(57)【要約】【課題】データの関連性の検査に要する時間を抑制する。【解決手段】記憶装置によって構成される記憶領域を提供するストレージ装置と、データを管理する計算機とを備える計算機システムであって、記憶領域には複数のデータが記憶され、複数のデータは他のデータに関連付けられたデータを含み、計算機は、データが他のデータに正常に関連付けられているか否かを検査し、検査を複数のデータで実行する場合には、一のデータの検査が完了したか否かにかかわらず、他のデータの検査を開始する。【選択図】図１
2015203927.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置によって構成される記憶領域を提供するストレージ装置と、前記データを管理する計算機とを備える計算機システムであって、
前記記憶領域には、複数のデータが記憶され、
前記複数のデータは、他のデータに関連付けられたデータを含み、
前記計算機は、
前記データが他のデータに正常に関連付けられているか否かを検査し、
前記検査を複数のデータで実行する場合には、一のデータの検査が完了したか否かにかかわらず、他のデータの検査を開始することを特徴とする計算機システム。
【請求項２】
前記計算機は、
前記計算機システムの資源情報を管理し、
前記検査の実行時に、前記記憶領域に対する入出力要求を発行するためのタスクを生成し、
前記資源情報に基づいて、前記タスクを実行するためのスレッドを生成するか否かを判定し、
前記スレッドを生成しないと判定した場合には、当該スレッドの生成を保留することを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記計算機は、前記検査の実行要求を受け付け、当該実行要求に基づくタスクの実行スケジュールを管理する入出力制御部をさらに備え、
前記入出力制御部は、
前記タスクの実行スケジュールが設定された要求を格納する発行待ちキューと、前記タスクの実行スケジュールが設定されていない要求を格納するスケジュール待ちキューと、を備え、
前記スケジュール待ちキューに格納された要求の処理順序を決定し、
前記処理順序が決定された要求を前記発行待ちキューに格納し、
前記発行待ちキューに格納された要求に基づくタスクを実行するためのスレッドを順次生成することを特徴とする請求項２に記載の計算機システム。
【請求項４】
前記スケジュール待ちキューには、第１のスケジュール待ちキューと、当該第１のスケジュール待ちキューよりも優先して要求が処理される第２のスケジュール待ちキューと、が含まれ、
前記入出力制御部は、
前記記憶領域に格納されたデータを読み書きする要求を受け付けた場合には、当該要求を前記第１のスケジュール待ちキューに格納し、
前記検査の実行要求を受け付けた場合には、当該要求を前記第２のスケジュール待ちキューに格納することを特徴とする請求項３に記載の計算機システム。
【請求項５】
前記計算機は、前記検査の実行要求を受け付け、当該実行要求に基づくタスクの実行スケジュールを管理する入出力制御部をさらに備え、
前記実行スケジュールが設定されたタスクを格納する発行待ちキューと、前記実行スケジュールが設定されていないタスクを格納するスケジュール待ちキューと、を備え、
前記スケジュール待ちキューに格納されたタスクの実行順序を決定し、
前記実行順序が決定されたタスクを前記発行待ちキューに格納し、
前記発行待ちキューに格納されたタスクを実行するためのスレッドを順次生成することを特徴とする請求項２に記載の計算機システム。
【請求項６】
前記スケジュール待ちキューには、第１のスケジュール待ちキューと、当該第１のスケジュール待ちキューよりも優先してタスクが実行される第２のスケジュール待ちキューと、が含まれ、
前記入出力制御部は、
前記記憶領域に格納されたデータを読み書きするためのタスクを、前記第１のスケジュール待ちキューに格納し、
前記検査を実行するためのタスクを、前記第２のスケジュール待ちキューに格納することを特徴とする請求項５に記載の計算機システム。
【請求項７】
前記データは、所定サイズのページに分割して格納され、
前記計算機は、
前記ページの配置を含む管理情報を管理し、
前記管理情報に基づいて、前記検査として前記データを格納するページが正常に設定されているか否かを判定し、
前記検査をページごとに実行することを特徴とする請求項１から請求項６のいずれか１項に記載の計算機システム。
【請求項８】
前記ページには、前記分割されたデータの実体、又は、他のページを参照するページ識別子の少なくともいずれか一方が格納され、
前記管理情報には、前記データを格納するページのページ識別子が含まれることを特徴とする請求項７に記載の計算機システム。
【請求項９】
前記ページを節点とし、当該ページに含まれるページ識別子が参照する他のページとの接続を枝とする木構造が形成され、
前記データは、
前記管理情報に含まれるページ識別子によって識別されるページを根とする木を形成し、
前記木の葉に対応するページに、分割されて格納されることを特徴とする請求項８に記載の計算機システム。
【請求項１０】
前記計算機は、前記データを管理するデータベース管理システムを実行し、
前記データは、当該データに対応する１以上の列を含むレコードによって構成される関係表に格納され、
前記計算機は、
前記データと、当該データに対応する列を含むレコードの格納情報とを含む索引を管理し、
前記検査として、前記データに対応する列を含むレコードの格納情報が前記索引に正常に設定されているか否かを判定することを特徴とする請求項１から請求項６のいずれか１項に記載の計算機システム。
【請求項１１】
前記計算機は、前記データを管理するデータベース管理システムを実行し、
前記データは、当該データに対応する１以上の列を含むレコードによって構成される関係表に格納され、
前記計算機は、異なる関係表に格納されたレコードに含まれるデータが対応している場合には、前記検査として、各データの対応が正常に設定されているか否かを判定することを特徴とする請求項１から請求項６のいずれか１項に記載の計算機システム。
【請求項１２】
記憶装置によって構成される記憶領域を提供するストレージ装置と、前記データを管理する計算機とを備える計算機システムにおける前記データの検査方法であって、
前記記憶領域には、複数のデータが記憶され、
前記複数のデータは、他のデータに関連付けられたデータを含み、
前記検査方法は、
前記計算機が、前記データが他のデータに正常に関連付けられているか否かを検査し、
前記検査を複数のデータで実行する場合には、前記計算機が、一のデータの検査が完了したか否かにかかわらず、他のデータの検査を開始することを特徴とするデータの検査方法。
【請求項１３】
記憶装置によって構成される記憶領域を提供するストレージ装置に接続され、前記記憶領域に格納されたデータを管理する計算機であって、
前記ストレージ装置に接続されるインターフェイスと、前記データを管理するためのプログラムを記憶可能なメモリと、当該メモリに記憶されたプログラムを実行するプロセッサと、を備え、
前記記憶領域には、複数のデータが記憶され、
前記複数のデータは、他のデータに関連付けられたデータを含み、
前記プロセッサは、
前記データが他のデータに正常に関連付けられているか否かを検査し、
前記検査を複数のデータで実行する場合には、一のデータの検査が完了したか否かにかかわらず、他のデータの検査を開始することを特徴とする計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの関連性を検査する技術に関する。
【背景技術】
【０００２】
計算機システムでは、複数のデータを必要に応じて関連付けて記憶装置に格納することによって効率的に管理することができる。例えば、大容量のデータを格納する場合には、データを分割して格納することによってデータの格納効率を向上させることができる（特許文献１参照）。また、分割されたデータの管理情報を別途管理し、データの読み出し要求を受け付けた場合には、分割されたデータを結合して当該データを提供する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平０７−１４１２３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、格納されたデータの関連性を検査するためにはデータの格納領域全体にアクセスしなければならない場合があるため、データの格納領域の拡大にともなって検査時間が増大するおそれがあった。
【０００５】
本発明の目的は、データの関連性の検査に要する時間の増大を抑制することである。
【課題を解決するための手段】
【０００６】
本発明のある態様によれば、記憶装置によって構成される記憶領域を提供するストレージ装置と、前記データを管理する計算機とを備える計算機システムであって、前記記憶領域には、複数のデータが記憶され、前記複数のデータは、他のデータに関連付けられたデータを含み、前記計算機は、前記データが他のデータに正常に関連付けられているか否かを検査し、前記検査を複数のデータで実行する場合には、一のデータの検査が完了したか否かにかかわらず、他のデータの検査を開始する。
【発明の効果】
【０００７】
本発明の代表的な実施形態によると、データの関連性の検査に要する時間の増大を抑制することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の第１実施形態のネットワークファイルシステムの構成を示す図である。
【図２】本発明の第１実施形態におけるファイルを格納する構造を説明する図であり、ファイルが正常に格納されている状態を示している。
【図３】本発明の第１実施形態におけるファイルを格納する構造を説明する図であり、ファイル（データ）の格納情報に不整合が発生している状態を示している。
【図４】本発明の第１実施形態のファイルシステムボリュームに格納されたファイルの一貫性検査を実行するための手順を示すフローチャートである。
【図５】本発明の第１実施形態のファイルの一貫性を検査する手順を示すフローチャートである。
【図６】本発明の第１実施形態においてエラー内容を検査結果表に保存する処理の手順を示すフローチャートである。
【図７】本発明の第１実施形態の検査結果表の一例を示す図である。
【図８】本発明の第１実施形態の一貫性検査を実行するためのスレッドを生成する手順を示すフローチャートである。
【図９】本発明の第１実施形態の一貫性検査を実行するためのスレッドを再開する手順を示すフローチャートである。
【図１０】本発明の第１実施形態の資源余力表の一例を示す図である。
【図１１】本発明の第１実施形態のスレッドの生成を待機させるキューの構造を説明する図である。
【図１２】本発明の第１実施形態のスケジュール待ちキューに格納されたタスクを発行待ちキューに移動させる手順を示すフローチャートである。
【図１３】本発明の第２実施形態のデータベースシステムの構成を示す図である。
【図１４】本発明の第２実施形態のデータベースシステムにおけるデータ構造を説明する図であり、データが正常に格納されている状態を示している。
【図１５】本発明の第２実施形態のデータベースシステムにおけるデータ構造を説明する図であり、データの格納情報に不整合が発生している状態を示している。
【図１６】本発明の第２実施形態のデータベースシステムにおけるデータモデルを説明する図であり、データが正常に格納されている状態を示している。
【図１７】本発明の第２実施形態のデータベースシステムにおけるデータモデルを説明する図であり、データの格納情報に不整合が発生している状態を示している。
【発明を実施するための形態】
【０００９】
（第１実施形態）
本発明の第１実施形態におけるネットワークファイルシステム（計算機システム）では、クライアント３００がアプリケーションプログラム３２１によって業務処理を実行し、ネットワークファイルシステムサーバ１００を介して当該業務処理に必要なデータを読み書きする。以下、本発明の第１実施形態におけるネットワークファイルシステムの構成について説明する。
【００１０】
図１は、本発明の第１実施形態のネットワークファイルシステムの構成を示す図である。
【００１１】
本発明の第１実施形態のネットワークファイルシステムは、ネットワークファイルシステムサーバ１００、外部ストレージ装置２００及びクライアント３００を含む。ネットワークファイルシステムサーバ１００は、複数であってもよく、単数に限られない。また、外部ストレージ装置２００は、システム内に複数備えられるようにしてもよい。さらに、クライアント３００の数は任意である。
【００１２】
ネットワークファイルシステムサーバ１００は、外部ストレージ装置２００に格納されたファイル（データ）を管理する。外部ストレージ装置２００は、クライアント３００によってアクセスされるファイル（データ）を格納する。クライアント３００は、ネットワークファイルシステムサーバ１００を介して外部ストレージ装置２００に格納されたファイル（データ）にアクセスする。
【００１３】
ネットワークファイルシステムサーバ１００は、ネットワーク１０を介してクライアント３００に接続される。ネットワーク１０は、例えば、インターネットプロトコル（ＩＰ）ネットワークである。
【００１４】
また、ネットワークファイルシステムサーバ１００は、ネットワーク２０を介して外部ストレージ装置２００に接続する。ネットワーク２０は、ネットワーク１０と共通であってもよいし、例えば、ファイバーチャネル（ＦＣ）プロトコルが適用されるストレージエリアネットワーク（ＳＡＮ）であってもよい。ネットワークファイルシステムサーバ１００と外部ストレージ装置２００との間をＳＡＮで接続することによって、信頼性を向上させながら大量のデータを高速に送受信することが可能となる。
【００１５】
続いて、ネットワークファイルシステムサーバ１００、外部ストレージ装置２００及びクライアント３００の詳細を説明する。まず、ネットワークファイルシステムサーバ１００について説明する。
【００１６】
ネットワークファイルシステムサーバ１００は、クライアント３００から要求されたファイル（データ）を外部ストレージ装置２００から取得し、当該クライアント３００に送信する。
【００１７】
ネットワークファイルシステムサーバ１００は、ＣＰＵ１１０、メモリ１２０、ネットワークインターフェイス（Ｉ／Ｆ）１３０及びネットワークファイルアクセスインターフェイス（Ｉ／Ｆ）１７０を備える。ＣＰＵ１１０、メモリ１２０、ネットワークＩ／Ｆ１３０及びネットワークファイルアクセスＩ／Ｆ１７０は、内部バスによって接続される。
【００１８】
ＣＰＵ１１０は、メモリ１２０に記憶されたプログラム（図示せず）を実行することによって、クライアント３００から要求された処理、又は、入力装置（図示せず）を介して管理者から指示された処理を実行する。
【００１９】
メモリ１２０は、ＣＰＵ１１０によって実行されるプログラムと、当該プログラムの実行に必要なデータなどを記憶する。さらに、外部ストレージ装置２００とクライアント３００との間で送受信されるデータを一時的に記憶する。
【００２０】
また、メモリ１２０は、外部ストレージ装置２００によって提供される記憶領域を管理するファイルシステム１５０を記憶する。ファイルシステム１５０は、図示しないオペレーティングシステムによって提供される機能であってもよいし、単体のプログラムなどであってもよい。また、分散ファイルシステムのように、複数の計算機にまたがって構成されていてもよい。さらに、メモリ１２０は、外部ストレージ装置２００によって提供される記憶領域にアクセスするためのソフトウェアであるドライバ１６０を記憶する。
【００２１】
ファイルシステム１５０には、ファイルアクセス管理部１５１、一貫性検査部１５２、入出力制御部１５３が含まれる。ファイルアクセス管理部１５１は、ファイルシステム１５０によって管理されるファイルのアクセス要求を管理する。例えば、クライアント３００から送信されたファイルアクセス要求を受け付け、当該受け付けた要求を入出力制御部１５３に入力する。なお、ファイルアクセス要求そのものではなく、要求内容に応じて定義された当該ファイルの入出力要求を含むタスクを入力するようにしてもよい。タスクは、外部ストレージ装置２００に対する入出力処理の他に、出力されたファイル（データ）の加工など応答結果に基づく処理などを含む。
【００２２】
一貫性検査部１５２は、後述するファイルシステムボリューム２１０に格納されたファイルの一貫性（整合性）を検査する。一貫性検査は、ファイル毎に実行してもよいし、記憶領域（論理ボリューム）毎に実行してもよい。一貫性検査部１５２は、コマンド入力などによって一貫性検査要求（検査要求）を受け付けると、受け付けられた一貫性検査要求を入出力制御部１５３に入力する。
【００２３】
入出力制御部１５３は、ファイルアクセス管理部１５１又は一貫性検査部１５２から要求の入力を受け付け、当該要求に基づくタスクの実行によりファイルシステムボリューム２１０にアクセスする順序、すなわち、要求の処理順序を決定する。そして、決定された順序でＣＰＵ１１０がタスクを実行し、入出力要求を外部ストレージ装置２００に発行する。なお、具体的な手順については後述する（図１１、図１２）。
【００２４】
本発明の第１実施形態では、ネットワーク１０及びネットワーク２０は、異なるネットワークを構成しており、ネットワークファイルシステムサーバ１００は、各ネットワークに接続するためのインターフェイスをそれぞれ備えている。なお、ネットワーク１０及びネットワーク２０は同じであってもよく、この場合にはネットワークに接続するインターフェイスを共通にしてもよい。
【００２５】
ネットワークＩ／Ｆ１３０は、ネットワーク１０に接続するためのインターフェイスである。例えば、ネットワークインターフェイスカードなどである。一方、ネットワークファイルアクセスＩ／Ｆ１７０は、ネットワーク２０に接続するためのインターフェイスである。ネットワーク２０が前述したＳＡＮである場合には、ネットワークファイルアクセスＩ／Ｆ１７０は、例えば、ホストバスアダプタ（ＨＢＡ）である。
【００２６】
続いて、外部ストレージ装置２００について説明する。外部ストレージ装置２００は、ファイルシステムボリューム２１０、ディスク制御コントローラ２５０及びディスクインターフェイス（Ｉ／Ｆ）２６０を備える。
【００２７】
ファイルシステムボリューム２１０は、クライアント３００によってアクセスされるファイルを格納する記憶領域である。また、ファイルシステムボリューム２１０は、複数の記憶装置によって構成された論理的なボリュームである。ファイルシステムボリューム２１０を複数の記憶装置で構成することによって、大容量の記憶領域を提供することが可能となっている。
【００２８】
ファイルシステムボリューム２１０を構成する記憶装置は、例えば、ハードディスクドライブ（ＨＤＤ）、光ディスクドライブ、半導体記憶装置（ソリッドステートドライブ；ＳＳＤ）などの不揮発性記憶媒体である。また、複数の記憶装置によってディスクアレイを構成するようにしてもよい。
【００２９】
ファイルシステムボリューム２１０には、各ファイルの名前、格納位置などを含むメタ情報２１１と、外部から読み書きされるデータであるファイル（データ）２１２とが格納される。
【００３０】
ディスク制御コントローラ２５０は、ファイルの読み書きなどの制御を実行する。例えば、ネットワークファイルシステムサーバ１００から送信された入出力要求に基づいて、ファイルシステムボリューム２１０に格納されたファイルを読み書きする。また、ファイルの更新、削除、移動などにともなって、メタ情報２１１を更新する。
【００３１】
ディスクＩ／Ｆ２６０は、ネットワーク２０を介してネットワークファイルシステムサーバ１００に接続するためのインターフェイスである。
【００３２】
続いて、クライアント３００について説明する。クライアント３００は、ＣＰＵ３１０、メモリ３２０及びネットワークインターフェイス（Ｉ／Ｆ）３３０を備える。
【００３３】
ＣＰＵ３１０は、メモリ３２０に記憶されたプログラムを実行することによって各種処理を実行する。メモリ３２０は、ＣＰＵ３１０によって実行されるプログラム及び当該プログラムの実行に必要なデータを記憶する。ＣＰＵ３１０によって実行されるプログラムには、業務処理を実行するためのアプリケーションプログラム３２１と、アプリケーションプログラム３２１が各種資源（リソース）を利用するためのインターフェイスを提供したり、リソースを管理したりするためのオペレーティングシステム（ＯＳ）３２２とが含まれる。
【００３４】
ネットワークＩ／Ｆ３３０は、ネットワーク１０に接続するためのインターフェイスであり、ネットワークファイルシステムサーバ１００に備えられたネットワークＩ／Ｆ１３０と同様でよい。なお、ネットワーク１０に有線で接続するようにしてもよいし、無線で接続するようにしてもよい。
【００３５】
以上、本発明の第１実施形態におけるネットワークファイルシステムの構成について説明した。続いて、本発明の第１実施形態のネットワークファイルシステムにおいて、管理対象のファイル（データ）を格納する構造について説明する。
【００３６】
図２及び図３は、本発明の第１実施形態におけるファイルを格納する構造を説明する図である。図２はファイルが正常に格納されている状態を示し、図３はファイル（データ）の格納情報に不整合が発生している状態を示している。
【００３７】
まず、本発明の第１実施形態のファイルシステムにおいてファイルを格納するためのデータ構造について説明する。本発明の第１実施形態のファイルシステムに格納されたファイルは、ファイル管理表（管理情報）２２０によって管理される。
【００３８】
ファイル管理表２２０には、ファイルを一意に識別するファイル識別子（Ｆｉｌｅ  ＩＤ）２２１及びファイルが格納されたページ（ページ領域）を示すページ識別子（Ｐａｇｅ  ＩＤ）２２２が含まれる。
【００３９】
また、ファイルがディレクトリに格納されている場合には、ファイル識別子２２１がディレクトリのＩｎｏｄｅ番号（Ｉｎｏｄｅ  ＩＤ）２３１としてディレクトリ管理表２３０に格納される。さらに、当該ファイルが格納されているディレクトリのパス名（Ｐａｔｈ）２３２がＩｎｏｄｅ番号２３１と関連付けられて格納されている。
【００４０】
なお、ファイル管理表２２０及びディレクトリ管理表２３０は、外部ストレージ装置２００のファイルシステムボリューム２１０に記憶されたメタ情報２１１に含まれるようにしてもよいし、ネットワークファイルシステムサーバ１００に保持されるようにしてもよい。また、複数の外部ストレージ装置２００のメタ情報を管理するための計算機をネットワークファイルシステムに備えるようにしてもよい。
【００４１】
本発明の第１実施形態では、ファイル（データ）は、ページ単位に分割されて格納される。各ページには、分割されたページの位置を指し示す参照ポインタ（Ｐ）と、ファイルの内容（コンテンツ）が格納されたページの位置を指し示す実体ポインタ（Ｐ）とが含まれる。参照Ｐ及び実体Ｐは参照先のページのページ識別子に対応し、図２及び図３では、理解しやすいように、ポインタ（アドレス）とページ識別子とが一致するようにしている。
【００４２】
また、参照Ｐの参照先のページには、参照Ｐと実体Ｐが含まれる。また、実体Ｐの参照先のページには、分割されたファイルの内容（コンテンツ）が格納される。
【００４３】
なお、図２に示すように参照先のポインタとコンテンツのいずれか一方のみがページに格納されるのではなく、参照先のポインタとコンテンツの両方が格納されるようにしてもよい。このように構成することによってページの構造が統一されるので、ファイルにアクセスする処理を簡略化することが可能となる。
【００４４】
ここで、図２を参照しながらデータ構造を具体的に説明すると、まず、ファイル管理表２２０には、ファイル識別子２２１として「９００１」、ページ識別子２２２として「１０１」が設定されたレコードが格納されている。また、ファイル識別子２２１が「９００１」のファイル（以下、「ファイル９００１」と表現する）は、ディレクトリ「／ｄａｔａ／ｄａｔａ０１」に格納されている。そこで、ディレクトリ管理表２３０には、Ｉｎｏｄｅ番号２３１にファイル識別子２２１である「９００１」が設定されたレコードが格納されており、パス名として「／ｄａｔａ／ｄａｔａ０１」が設定される。
【００４５】
ページ識別子２２２が「１０１」のページ（以下、「ページ１０１」と表現する）には、参照Ｐ「１１１」「１１２」、実体Ｐ「１１３」が設定されている。同様に、ページ１１１には参照Ｐ「１２１」及び実体Ｐ「１２２」、ページ１１２には参照Ｐ「１３１」及び実体Ｐ「１３２」、さらに、ページ１２１には参照Ｐ「１４１」及び実体Ｐ「１４２」、ページ１３１には参照Ｐ「１５１」及び実体Ｐ「１５２」が設定されている。したがって、ファイル９００１の実体は、ページ１１３、ページ１２２、ページ１３２、ページ１４２、ページ１５２、・・・に分割して格納されている。
【００４６】
以上、図２を参照しながらファイル９００１が正常に格納されている状態を説明した。次に、ファイル９００１の格納位置を示す情報（参照Ｐ）に不整合が発生している状態を示す場合について図３を参照しながら説明する。
【００４７】
図３に示すように、ファイル管理表２２０及びディレクトリ管理表２３０は、図２に示した例と同様である。また、ページ１０１も正常な場合と同様であるが、ページ１１１の参照Ｐが指し示すページ１２１では、ページそのものが欠落しており、内容を参照することができなくなっている。さらに、ページ１１２の参照Ｐは不正なポインタ（−１）となっており、参照先のページを特定することができなくなっている。
【００４８】
ファイルが正常に格納されている場合には、ファイル管理表２２０に格納された先頭ページに対応するページ識別子２２２から参照Ｐをたどり、実体Ｐの参照先のページに格納されたコンテンツを結合することによってファイルを取得することが可能となっている。しかしながら、図３に示すように、参照Ｐの参照先のページが欠落していたり、参照Ｐの値が不正であった場合には、ファイルを正常に読み出すことができなくなってしまう。本発明の第１実施形態における一貫性検査は、ファイルを構成するコンテンツを格納するページが正常に登録されているか否かを判定する検査である。
【００４９】
なお、本発明の第１実施形態では、各ファイルは、各ページを節点とし、参照Ｐ又は実体Ｐによるページ間の接続（参照）を枝とする木構造を形成している。また、一のファイルについて一の木が対応するように構成されており、各ファイルに対応する木は、ファイル管理表２２０にファイルと対応付けられて格納されたページ識別子２２２に対応するページに対応する節点を根とする。さらに、図２及び図３に示した例では、参照先のポインタ又はコンテンツのいずれか一方がページに格納されるため、葉となる節点にはコンテンツが格納される。
【００５０】
以下、ファイルの格納情報が正常であるか否かを検査する手順について説明する。ファイルシステムの一貫性（整合性）検査は、通常、オペレーティングシステムの機能として提供される。例えば、ＵＮＩＸ（登録商標）関連のＯＳではｆｓｃｋコマンド、Ｗｉｎｄｏｗｓ（登録商標）ではＳｃａｎｄｉｓｋコマンドとしてファイルの一貫性を検査する機能が提供される。これらのコマンドには、ファイルに不整合が生じている場合（ファイルの一貫性が損なわれている場合）に修復を試みる機能が含まれている。
【００５１】
図４は、本発明の第１実施形態のファイルシステムボリューム２１０に格納されたファイルの一貫性検査を実行するための手順を示すフローチャートである。本処理は、システムの起動、又は、一貫性検査の実行を要求するコマンドの入力を契機にネットワークファイルシステムサーバ１００によって実行され、外部ストレージ装置２００に格納された各ファイルの一貫性を検査する。また、図４に示すフローチャートでは、ファイル管理表２２０に含まれるすべてのファイルに対して一貫性検査を実行するように構成されているが、ファイル又はディレクトリを指定して一貫性検査を実行するようにしてもよい。
【００５２】
ネットワークファイルシステムサーバ１００のＣＰＵ１１０は、ファイルシステムボリューム２１０の一貫性検査が開始されると、一貫性検査の結果を記録する検査結果表１４０を初期化する（Ｓ１００１）。検査結果表１４０は、ファイルシステム１５０に記憶するようにしてもよいし、外部ストレージ装置２００のメタ情報２１１の一部として記憶してもよい。なお、ファイルシステム１５０に記憶する場合には、ネットワークファイルシステムサーバ１００に備えられた図示しない不揮発性の記憶装置に記憶するようにしてもよい。なお、検査結果表１４０の内容については後述する（図７）。
【００５３】
次に、ＣＰＵ１１０は、外部ストレージ装置２００に格納されたメタ情報２１１のファイル管理表２２０を検索し、検査対象のファイルを選択する（Ｓ１００２）。続いて、選択されたファイルに対し、当該ファイルの格納情報が整合しているか否かを検査する一貫性検査を実行する（Ｓ１００３）。なお、一貫性検査の詳細な手順については後述する（図５）。
【００５４】
ＣＰＵ１１０は、検査対象のファイルの一貫性検査が終了すると、未検査のファイルが残っているか否かを判定する（Ｓ１００４）。未検査のファイルが残っている場合には（Ｓ１００４の結果が「Ｔ」）、次の検査対象のファイルを選択し（Ｓ１００５）、当該ファイルに対する一貫性検査を実行する（Ｓ１００３）。
【００５５】
以上のようにして、すべての検査対象のファイルの一貫性検査が終了すると（Ｓ１００４の結果が「Ｆ」）、ＣＰＵ１１０は、検査結果表１４０を出力し（Ｓ１００６）、本処理を終了する。
【００５６】
ここで、本発明の第１実施形態の外部ストレージ装置２００は、前述のように、複数の記憶装置で記憶領域を構成することで、記憶装置単体では提供できない大容量の領域を提供することが可能となっている。また、ストレージ装置の信頼性（耐障害性）を向上させるために、複数の記憶装置によって冗長性を持たせた構成とする場合もある。このように構成された記憶領域では、一のファイルのコンテンツを格納する各ページが複数の記憶装置に分散して格納される場合がある。そこで、異なる記憶装置に格納されたページを検査する場合には、各ページを並列して検査することによって一貫性検査を高速化することができる。以下、ファイルの一貫性検査の手順について具体的に説明する。
【００５７】
図５は、本発明の第１実施形態のファイルの一貫性を検査する手順を示すフローチャートである。本処理は、ネットワークファイルシステムサーバ１００によって実行され、外部ストレージ装置２００に格納されたファイル毎の一貫性を検査する処理である。
【００５８】
ネットワークファイルシステムサーバ１００のＣＰＵ１１０は、まず、メタ情報２１１のファイル管理表２２０を参照し、検査対象のファイルの根（ルート）となるページのページ識別子２２２を取得する（Ｓ１１０１）。さらに、取得したページ識別子２２２に基づいて、対応するページを読み込む（Ｓ１１０２）。
【００５９】
次に、ＣＰＵ１１０は、読み込まれたページが正当か否かを判定する（Ｓ１１０３）。例えば、不良セクタなどによって参照ポインタ又は実体ポインタが指し示すページに記憶された内容を読み込むことができない場合には、ページが正当でないと判断する。読み込まれたページが正当でない場合には（Ｓ１１０３の結果が「Ｎ」）、エラー内容を保存する処理を実行する（Ｓ１１０４）。エラー内容を保存する処理については後述する（図６）。
【００６０】
一方、ＣＰＵ１１０は、読み込まれたページが正当である場合には（Ｓ１１０３の結果が「Ｔ」）、読み込まれたページに参照先となる別ページのページ識別子が含まれているか否かを判定する（Ｓ１１０５）。別ページのページ識別子は、前述のように、参照ポインタ又は実体ポインタである。ＣＰＵ１１０は、別ページのページ識別子が含まれていない場合には（Ｓ１１０５の結果が「Ｆ」）、本処理を終了する。
【００６１】
ＣＰＵ１１０は、読み込まれたページに別ページのページ識別子が設定されている場合には（Ｓ１１０５の結果が「Ｔ」）、別ページのページ識別子が正当であるか否かを判定する（Ｓ１１０６）。ページ識別子に対応するページが存在しないなど、別ページのページ識別子が正当でない場合には（Ｓ１１０６の結果が「Ｆ」）、エラー内容を保存する処理を実行し（Ｓ１１０７）、Ｓ１１０９以降の処理を実行する。
【００６２】
ＣＰＵ１１０は、別ページのページ識別子が正当である場合には（Ｓ１１０６の結果が「Ｔ」）、別ページを対象とする一貫性検査を実行するためのスレッドを生成する（Ｓ１１０８）。そして、生成されたスレッドで別ページを根（ルート）とした一貫性検査を実行する（Ｓ１１１１〜Ｓ１１１６）。詳細については後述する。
【００６３】
ＣＰＵ１１０は、別ページの一貫性検査を実行するためのスレッドを生成すると、当該スレッドで実行された一貫性検査が終了するまで待機せずに、読み込まれたページに他のページ識別子が含まれているか否かを判定する（Ｓ１１０９）。
【００６４】
ＣＰＵ１１０は、読み込まれたページに他のページ識別子が含まれている場合には（Ｓ１１０９の結果が「Ｔ」）、他のページ識別子についてＳ１１０６以降の処理を実行する。一方、読み込まれたページに他のページ識別子が含まれていない場合には（Ｓ１１０９の結果が「Ｆ」）、本処理を終了する。
【００６５】
ここで、Ｓ１１０８の処理で生成されたスレッドで実行される一貫性検査について説明する。本発明の第１実施形態では、複数のスレッドを並列して生成可能となっており、ページ毎の一貫性検査を再帰的に実行することによって、複数のページに対する一貫性検査を並列して処理することが可能となっている。
【００６６】
Ｓ１１０８の処理で別ページのページ識別子に基づいてスレッドが起動されると、ＣＰＵ１１０は、当該別ページのページ識別子に基づいて対応するページを読み込む（Ｓ１１１１）。続いて、読み込まれたページが正当か否かを判定する（Ｓ１１１２）。Ｓ１１１２の処理は、Ｓ１１０３の処理と同様である。
【００６７】
ＣＰＵ１１０は、読み込まれたページが正当でない場合には（Ｓ１１１２の結果が「Ｎ」）、エラー内容を保存する処理を実行する（Ｓ１１１３）。一方、読み込まれたページが正当である場合には（Ｓ１１１２の結果が「Ｔ」）、読み込まれたページにさらに別ページを参照するページ識別子が含まれているか否かを判定する（Ｓ１１１４）。
【００６８】
ＣＰＵ１１０は、読み込まれたページに別ページを参照するページ識別子が含まれていない場合には（Ｓ１１１４の結果が「Ｆ」）、本処理を終了する。このとき、本処理を実行するために生成されたスレッドを消滅させることでメモリの消費を抑制する。
【００６９】
また、ＣＰＵ１１０は、読み込まれたページに別ページを参照するページ識別子が含まれている場合には（Ｓ１１１４の結果が「Ｔ」）、別ページを参照するページ識別子が正当であるか否かを判定する（Ｓ１１１５）。別ページのページ識別子が正当でない場合には（Ｓ１１１５の結果が「Ｆ」）、エラー内容を保存する処理を実行し（Ｓ１１１６）、Ｓ１１１８以降の処理を実行する。
【００７０】
ＣＰＵ１１０は、別ページのページ識別子が正当である場合には（Ｓ１１１５の結果が「Ｔ」）、別ページを対象とする一貫性検査を実行するためのスレッドをさらに生成し（Ｓ１１１７）、一貫性検査を行うＳ１１１１からＳ１１１８までの一連の処理を実行する。なお、Ｓ１１１１からＳ１１１８までの一連の処理を、一貫性検査を行うための「タスク」とする。本発明の第１実施形態では、１スレッド上で１タスクが実行され、完結する（別のタスクを実行するために、新たにスレッドを生成する場合を含む）。タスクには、一貫性検査の他に、通常のファイルアクセスを行うための処理なども含まれる。
【００７１】
ＣＰＵ１１０は、さらに、読み込まれたページに他のページ識別子が含まれているか否かを判定する（Ｓ１１１８）。そして、他のページ識別子が含まれている場合には（Ｓ１１１８の結果が「Ｔ」）、他のページ識別子について、スレッドを新たに生成して一貫性検査を行うタスクを実行する。一方、他のページ識別子が含まれていない場合には（Ｓ１１１８の結果が「Ｆ」）、本処理を終了する。
【００７２】
以上のように、本発明の第１実施形態では、一貫性検査を実行するためのスレッドを生成すると、当該スレッドで実行された一貫性検査が完了するまで待機せずに、ページ毎の一貫性検査を再帰的に実行する。このように、複数の一貫性検査を並列して実行することによって、検査に要する時間を短縮することが可能となる。
【００７３】
本発明の第１実施形態では、データを格納するページが正常に設定されているか否か、すなわち、ページ識別子の参照先のページが正常であるか（存在するか）、ページ識別子そのものが正常であるかを、ネットワークファイルシステムサーバ１００が判定している。これに対し、外部ストレージ装置２００のディスク制御コントローラ２５０がデータを格納するページが正常に設定されているか否かを判定するようにしてもよい。また、ファイルシステムボリューム２１０のメタ情報２１１にファイル管理表２２０が含まれている場合には、外部ストレージ装置２００が一貫性検査を実行し、検査結果表を生成するようにしてもよい。
【００７４】
さらに、外部ストレージ装置２００のディスク制御コントローラ２５０が、ファイル管理表２２０等の一貫性検査に必要な情報を管理し、さらに、図５のフローチャートに示した処理を実行するようにしてもよい。このように構成することによって、外部ストレージ装置２００が一貫性検査を含むデータ（ファイル）の一貫性の管理を行うことが可能となり、ネットワークファイルシステムサーバ１００の負荷を低減することができる。
【００７５】
また、本発明の第１実施形態では、スレッドを無制限に生成するのではなく、ネットワークファイルシステムサーバ１００の資源（リソース）などに依存して生成数などを制限し、制限を超えた数のスレッドの生成は待機させる。なお、スレッドの生成数の制限及び生成されたスレッドの実行順序等の制御については後述する（図８〜図１２）。
【００７６】
続いて、検査結果表１４０の生成及び内容について説明する。図６は、本発明の第１実施形態においてエラー内容を検査結果表１４０に保存する処理の手順を示すフローチャートである。図７は、本発明の第１実施形態の検査結果表１４０の一例を示す図である。
【００７７】
ネットワークファイルシステムサーバ１００のＣＰＵ１１０は、検査結果表１４０に発生したエラーの内容を書き込む（Ｓ１２０１）。具体的には、図７に示すように、エラーが発生したファイルの識別子（Ｆｉｌｅ  ＩＤ）１４１、参照元のページ１４２、参照先のページ（参照先のＰａｇｅ  ＩＤ）１４３、参照結果（エラーの種類）１４４が保存される。
【００７８】
また、参照結果には、図７に示すように、ページの不正、参照先のページ識別子の不正等がある。ページの不正では、ページを格納する領域が物理的に破損している場合などが含まれる。参照先のページ識別子が不正では、ページ識別子に対応するページが存在しない場合などが含まれる。
【００７９】
以上のように、ページ毎に一貫性検査を実行し、検査結果表１４０を作成することによって、エラーが発生したページを特定することができる。そして、検査結果表１４０を参照しながらファイルの修復などの処理を実行することが可能となる。
【００８０】
ここで、スレッド生成数の制限について説明する。本発明の第１実施形態では、ネットワークファイルシステムサーバ１００及びネットワーク２０などの資源の余力（性能）が記録された資源余力表１８０（図１０）に基づいてスレッドの生成可否を決定する。スレッドの生成が許可されなかった場合には、生成可能となるまで待機させる。以下、詳細について説明する。
【００８１】
図８は、本発明の第１実施形態の一貫性検査を実行するためのスレッドを生成する手順を示すフローチャートである。
【００８２】
ネットワークファイルシステムサーバ１００のＣＰＵ１１０は、まず、資源余力表１８０を参照し（Ｓ２００１）、一貫性検査を実行するための所定の制約条件を満たすか否かを判定する。具体的には、一貫性検査を実行するために割当可能な資源余力が存在するか否か、又は、一貫性検査実行時に使用中の資源の総量が所定の最大資源（閾値）を超えるか否かを判定する（Ｓ２００２）。
【００８３】
所定の制約条件としては、例えば、同時に実行（生成）するスレッドの数、ＣＰＵ１１０の使用率などのネットワークファイルシステムサーバ１００の資源に関する制約、ストレージ装置２００との間の転送帯域などのネットワーク資源に関する制約などが含まれる。資源及び当該資源の制約条件の具体的な例については後述する（図１０）。
【００８４】
ＣＰＵ１１０は、一貫性検査の実行に割当可能な資源余力又は最大資源を超えない場合には（Ｓ２００２の結果が「Ｆ」）、スレッドを生成し（Ｓ２００３）、一貫性検査を行うためのタスクを実行する。一方、一貫性検査の実行に割当可能な資源余力又は最大資源を超えてしまう場合には（Ｓ２００２の結果が「Ｔ」）、スレッドの生成を保留し、生成可能となるまで待機させるためのキューに、当該スレッドで実行されるタスクを格納する（Ｓ２００４）。なお、一貫性検査を実行するための一連の手順（タスク）をあらかじめ定義し、キューには一貫性検査の対象となるページの識別子を格納するようにしてもよい。
【００８５】
続いて、キューに格納されたスレッドを再開（生成）するための手順について説明する。図９は、本発明の第１実施形態の一貫性検査を実行するためのスレッドを再開する手順を示すフローチャートである。
【００８６】
ネットワークファイルシステムサーバ１００のＣＰＵ１１０は、まず、キューにスレッド生成待ちのタスクが存在するか否かを判定する（Ｓ２１０１）。存在しない場合には（Ｓ２１０１の結果が「Ｆ」）、本処理を終了する。
【００８７】
一方、ＣＰＵ１１０は、キューにスレッド生成待ちのタスクが存在する場合には（Ｓ２１０１の結果が「Ｔ」）、キューの先頭に格納されたタスクを取得する（Ｓ２１０２）。そして、図８に示した場合と同様に、資源余力表１８０を参照し（Ｓ２１０３）、スレッドを生成してタスク（一貫性検査）を実行することにより、当該一貫性検査の実行に割当可能な資源余力又は最大資源を超えるか否かを判定する（Ｓ２１０４）。
【００８８】
ＣＰＵ１１０は、一貫性検査の実行に割当可能な資源余力又は最大資源を超えない場合には（Ｓ２１０４の結果が「Ｆ」）、スレッドを生成し（Ｓ２１０５）、タスク（一貫性検査）を実行する。一方、タスク（一貫性検査）の実行に割当可能な資源余力又は最大資源を超えてしまう場合には（Ｓ２１０４の結果が「Ｔ」）、スレッドの生成を保留し、生成可能となるまで待機させるための再びキューに当該タスクを格納する（Ｓ２１０６）。
【００８９】
以上が、スレッドを生成する手順である。続いて、スレッドの生成を許可するか否かを決定するための資源余力表１８０について説明する。図１０は、本発明の第１実施形態の資源余力表１８０の一例を示す図である。
【００９０】
本発明の第１実施形態では、入出力処理帯域、転送帯域、同時入出力発行数、同時実行スレッド数、ＣＰＵ使用率の５種類の項目に基づいて、スレッドを生成するか否かを判定する。さらに別の項目に基づいてスレッドの生成可否を判断してもよい。
【００９１】
また、これらの項目について、システムが利用可能な最大資源である「システムが保持する性能資源（Ａ）」、外部ストレージ装置２００に格納されたファイルにアクセスするために利用される資源である「ファイルアクセスによる利用資源（Ｂ）」があらかじめ設定される。また、「システムが保持する性能資源（Ａ）」から「ファイルアクセスによる利用資源（Ｂ）」を減算することによって、「一貫性検査のために割当可能な資源余力（Ａ）−（Ｂ）」を算出することができる。さらに、ファイルアクセスに必要な資源も含めて「一貫性検査のために割当可能な最大資源（Ｃ）」が設定される。
【００９２】
本発明の第１実施形態では、前述のように、スレッド生成前（又は生成後）の資源の消費量が「一貫性検査のために割当可能な資源余力（Ａ）−（Ｂ）」及び「一貫性検査のために割当可能な最大資源（Ｃ）」を超えない場合に、スレッドの生成が許可される。以下、各項目について説明する。
【００９３】
入出力処理帯域は、ネットワークファイルシステムサーバ１００が外部ストレージ装置２００に１秒間で送信可能な入出力要求の数である。システムが保持する性能資源（Ａ）は５００００ＩＯ／ｓとなっており、ファイルアクセスによる利用資源（Ｂ）は２００００ＩＯ／ｓとなっている。したがって、一貫性検査のために割当可能な資源余力は３００００ＭＢ／ｓとなる。さらに、一貫性検査のために割当可能な最大資源（Ｃ）は、４００００ＭＢ／ｓとなっている。
【００９４】
転送帯域は、ネットワークファイルシステムサーバ１００と外部ストレージ装置２００との間で１秒間に転送可能なデータ量である。システムが保持する性能資源（Ａ）は５０００ＭＢ／ｓとなっており、ファイルアクセスによる利用資源（Ｂ）は２５００ＭＢ／ｓとなっている。したがって、一貫性検査のために割当可能な資源余力は２５００ＭＢ／ｓとなる。さらに、一貫性検査のために割当可能な最大資源（Ｃ）は、４０００ＭＢ／ｓとなっている。
【００９５】
同時入出力発行数は、外部ストレージ装置２００に対して同時に発行される入出力要求の数である。システムが保持する性能資源（Ａ）は１０００ＩＯｓとなっており、すなわち、最大１０００件の入出力要求を同時に発行することが可能となっている。また、ファイルアクセスによる利用資源（Ｂ）は、２００ＩＯｓとなっている。したがって、一貫性検査のために割当可能な資源余力は８００ＩＯｓとなる。さらに、一貫性検査のために割当可能な最大資源（Ｃ）は、８００ＩＯｓとなっている。
【００９６】
同時実行スレッド数は、ネットワークファイルシステムサーバ１００が実行（生成）可能なスレッドの数である。システムが保持する性能資源（Ａ）は８００Ｔｈｒｅａｄｓとなっており、ファイルアクセスによる利用資源（Ｂ）は１５０Ｔｈｒｅａｄｓとなっている。したがって、一貫性検査のために割当可能な資源余力は６５０Ｔｈｒｅａｄｓとなる。さらに、一貫性検査のために割当可能な最大資源（Ｃ）は、６００Ｔｈｒｅａｄｓとなっている。
【００９７】
ＣＰＵ使用率は、ネットワークファイルシステムサーバ１００のＣＰＵ１１０の使用率である。システムが保持する性能資源（Ａ）は１００％となっており、ファイルアクセスによる利用資源（Ｂ）は１０％となっている。したがって、一貫性検査のために割当可能な資源余力は９０％となる。さらに、一貫性検査のために割当可能な最大資源（Ｃ）は、８０％となっている。
【００９８】
なお、システムが使用中の資源量の取得は、オペレーティングシステムにあらかじめ用意されているコマンドを利用してもよいし、同等の機能を実装してもよい。
【００９９】
続いて、スレッドの生成を待機させる構成について説明する。図１１は、本発明の第１実施形態のスレッドの生成を待機させるキューの構造を説明する図である。
【０１００】
クライアント３００から外部ストレージ装置２００に格納されたファイルに対するアクセス要求が送信されると、ネットワークファイルシステムサーバ１００は、ファイルアクセス管理部１５１によって当該アクセス要求を受け付ける。ファイルアクセス管理部１５１は、アクセス要求を受け付けると、当該受け付けられたアクセス要求を入出力制御部１５３に引き渡す。
【０１０１】
また、ネットワークファイルシステムサーバ１００は、外部ストレージ装置２００によって提供される記憶領域の一貫性検査要求を一貫性検査部１５２が受け付ける。一貫性検査部１５２は、一貫性検査要求を受け付けると、当該受け付けられた一貫性検査要求を入出力制御部１５３に引き渡す。
【０１０２】
入出力制御部１５３は、優先度が設定された複数のスケジュール待ちキュー１５４と、スレッドの生成を待機させる発行待ちキュー１５５とを備える。発行待ちキュー１５５に格納された要求を処理することによって、ファイルシステムボリューム２１０に対する入出力要求を発行する。
【０１０３】
入出力制御部１５３は、ファイルアクセス管理部１５１から受け付けられたアクセス要求を、優先度の高いスケジュール待ちキュー１５４に格納する。一方、一貫性検査部１５２から受け付けられた一貫性検査要求を、優先度の低いスケジュール待ちキュー１５４に格納する。なお、ファイルのアクセス要求及び記憶領域の一貫性検査要求に対し、個別に優先度を設定するようにしてもよい。
【０１０４】
スケジュール待ちキュー１５４にファイルのアクセス要求又は記憶領域の一貫性検査要求が格納されると、入出力制御部１５３は、要求の種類等に基づいてスケジュール待ちキュー１５４から要求を選択し、選択された要求を発行待ちキュー１５５に移動させる。スケジュール待ちキュー１５４から発行待ちキュー１５５に要求を移動させる手順については後述する（図１２）。そして、発行待ちキュー１５５の先頭から取り出された要求を処理することによってファイルシステムボリューム２１０に入出力要求を発行する。
【０１０５】
図１２は、本発明の第１実施形態のスケジュール待ちキュー１５４に格納された要求を発行待ちキュー１５５に移動させる手順を示すフローチャートである。なお、スケジュール待ちキュー１５４に格納された要求を発行待ちキュー１５５に移動させるタイミングは、例えば、発行待ちキュー１５５に格納された要求が所定数以下になった場合であってもよいし、生成されているスレッドの数が所定数以下になった場合であってもよい。
【０１０６】
ネットワークファイルシステムサーバ１００のＣＰＵ１１０は、まず、高優先度のスケジュール待ちキュー１５４に要求があるか否かを判定する（Ｓ２２０１）。高優先度のスケジュール待ちキュー１５４に要求がある場合には（Ｓ２２０１の結果が「Ｔ」）、高優先度のスケジュール待ちキュー１５４から最大Ｍ個の要求を取り出す（Ｓ２２０２）。
【０１０７】
一方、ＣＰＵ１１０は、高優先度のスケジュール待ちキュー１５４に要求がない場合には（Ｓ２２０１の結果が「Ｆ」）、低優先度のスケジュール待ちキュー１５４に要求があるか否かを判定する（Ｓ２２０３）。低優先度のスケジュール待ちキュー１５４に要求がない場合には（Ｓ２２０３の結果が「Ｆ」）、スケジュール待ちキュー１５４に要求が含まれていないので、本処理を終了する。
【０１０８】
また、ＣＰＵ１１０は、低優先度のスケジュール待ちキュー１５４に要求がある場合には（Ｓ２２０３の結果が「Ｔ」）、低優先度のスケジュール待ちキュー１５４から最大Ｎ個の要求を取り出す（Ｓ２２０４）。このとき、ＭとＮは同じ値であってもよいし、優先度の高い要求を処理できるように、ＮをＭよりも小さい値としてもよい。
【０１０９】
ＣＰＵ１１０は、スケジュール待ちキュー１５４から取り出された要求を並び替える（Ｓ２２０５）。例えば、優先度の高い要求ほど早く処理するように順序を決定する。また、優先度が同じ場合には、後続の処理が多い（残りの処理時間の多い）要求を優先するようにしてもよいし、発行待ちキュー１５５に含まれる要求を最小化するために後続の処理が少ない（残りの処理時間の少ない）要求を優先するようにしてもよい。
【０１１０】
また、発行待ちキュー１５５に要求が含まれている場合には、取り出された要求と、発行待ちキュー１５５に含まれている要求とを合わせて並べ替えをしてもよい。
【０１１１】
最後に、ＣＰＵ１１０は、並び替えられた要求を発行キューに格納し（Ｓ２２０６）、本処理を終了する。発行キューに格納された要求は、スレッドの生成が可能になると、キューの先頭から順次取り出され、生成されたスレッドで処理される。そして、生成されたスレッドにおいて、外部ストレージ装置２００に入出力要求が発行（送信）され、入出力要求に対する応答が処理される。
【０１１２】
ファイルの入出力要求の場合には、スレッド毎にページ単位でファイルのコンテンツが取得される。このとき、取得された各コンテンツを結合してファイルを生成した後、クライアント３００に送信するようにしてもよいし、ファイルを生成せずに分割された状態でクライアント３００に送信し、クライアント３００で結合するようにしてもよい。
【０１１３】
一方、記憶領域の一貫性検査要求の場合には、前述のように、スレッド毎に検査結果表１４０に検査結果を書き出す。そして、指定された記憶領域の一貫性検査が終了した後、検査結果表１４０を出力する。
【０１１４】
なお、入出力制御部１５３のスケジュール待ちキュー１５４及び発行待ちキュー１５５には、ファイルのアクセス要求又は記憶領域の一貫性検査要求の代わりに各要求に対応するタスクを格納するようにしてもよい。
【０１１５】
以上のように、本発明の第１実施形態によれば、一貫性検査をページ毎に並列して処理することが可能であるため、各ページに対して順次検査する場合と比較して高速に一貫性検査を行うことができる。特に、外部ストレージ装置２００が提供する記憶領域を構成する記憶装置の数が多くなるほど処理の並列性を高めることが可能となる。
【０１１６】
なお、本発明の第１実施形態では、記憶領域単位で一貫性検査を実行する例について説明したが、ファイル単位又はディレクトリ単位で一貫性検査を行うようにしてもよい。
【０１１７】
以上説明した第１実施形態では、ネットワークファイルシステム（ネットワークアタッチトストレージ；ＮＡＳ）に対して、ページ毎に並列して一貫性検査を実行する例について説明したが、外部にストレージ装置を備えずにディスクアレイ装置が接続されたアプリケーションサーバ又はデータベースサーバなどにも適用することができる。
【０１１８】
（第２実施形態）
第１実施形態では、記憶装置に格納されたファイル（データ）の一貫性検査に本発明を適用する例について説明したが、第２実施形態では、データベースシステムによって管理されるデータの一貫性検査に本発明を適用する例について説明する。
【０１１９】
図１３は、本発明の第２実施形態のデータベースシステムの構成を示す図である。本発明の第２実施形態におけるデータベースシステムは、第１実施形態におけるネットワークファイルサーバ１００の代わりに、外部ストレージ装置２００に格納されたデータを管理するデータベースサーバ４００を備える。なお、外部ストレージ装置２００及びクライアント３００については、第１実施形態と共通の構成については同じ符号を割り当てる。
【０１２０】
本実施形態では、クライアント３００がアプリケーションプログラム３２１を実行し、データベースサーバ４００によって管理されるデータにアクセスする。外部ストレージ装置２００は、データベースサーバ４００によって管理されるデータを格納する。なお、データベースを管理するための管理計算機を計算機システムに備えるようにしてもよい。
【０１２１】
外部ストレージ装置２００及びクライアント３００の構成は第１実施形態と同様である。また、ネットワーク１０及びネットワーク２０についても第１実施形態と同様であり、前述のように、ネットワーク１０及びネットワーク２０が同じネットワークであってもよい。
【０１２２】
データベースシステムには、関係モデルをベースとした関係データベース（ＲＤＢ）、又はオブジェクトモデルをベースとしたオブジェクト指向データベースがある。本実施形態では、関係データベースを対象として説明する。
【０１２３】
関係データベースでは、複数種類のデータによって構成されるレコード単位でデータを関係表１２７０に格納し、少ない入出力要求でレコードにアクセスするための索引１２８０を備える。索引１２８０のデータ構造は、本実施形態では後述するようにＢ＋木であるが、Ｂ木であってもよいし、ハッシュであってもよい。
【０１２４】
なお、本実施形態におけるデータベースシステムでは、関係表１２７０及び索引１２８０を外部ストレージ装置２００に格納しているが、データベースサーバ４００に備えられた記憶装置に関係表１２７０及び索引１２８０を格納するようにしてもよい。
【０１２５】
データベースサーバ４００は、ＣＰＵ４１０、メモリ４２０、ネットワークＩ／Ｆ４３０及びホストバスアダプタ４７０を備える。ＣＰＵ４１０、メモリ４２０、ネットワークＩ／Ｆ４３０は、第１実施形態のネットワークファイルシステムサーバ１００のＣＰＵ１１０、メモリ１２０、ネットワークインターフェイス（Ｉ／Ｆ）１３０と同様であり、同等の機能を有する。また、ホストバスアダプタ４７０についても、ネットワークファイルアクセスインターフェイス（Ｉ／Ｆ）１７０と同様である。
【０１２６】
データベースサーバ４００は、メモリ４２０に記憶されたプログラムであるデータベース管理システム４５０を実行することによって、外部ストレージ装置２００に格納されたデータを管理する。なお、第２実施形態も第１実施形態と同様にメモリ４２０にドライバが記憶されるが、第１実施形態と同等の機能であるため記載を省略する。
【０１２７】
データベース管理システム４５０は、問合せ処理部４５１、データ管理部４５２、一貫性検査部４５３、入出力制御部４５４等を含む。
【０１２８】
問合せ処理部４５１は、クライアント３００から送信されたデータアクセス要求を受け付ける。データアクセス要求は、例えば、ＳＱＬによって記述される。また、問合せ処理部４５１は、受け付けたデータアクセス要求に基づいて、外部ストレージ装置２００に格納されたデータにアクセスする。
【０１２９】
データ管理部４５２は、本実施形態のデータベースシステムにおいてデータを管理するための機能（プログラム）及び管理情報を含む。管理情報には、関係表１２７０及び索引１２８０の格納位置を示す情報などが含まれる。
【０１３０】
一貫性検査部４５３は、索引１２８０に定義された参照先のレコードが関係表１２７０に格納されているか否かを検査する。具体的には、索引１２８０に定義された参照先のレコードが関係表１２７０に存在するか否か、格納場所そのものが存在するか否かを検査する。詳細については、図１４及び図１５にて後述する。なお、索引１２８０の内部における索引間の一貫性を検査するようにしてもよい。
【０１３１】
また、一貫性検査部４５３は、関係表１２７０に格納されたレコード間の関係性（参照整合性）が維持されているか否かを検査する。通常、参照整合性を破壊するレコードの更新又は削除は、データベース管理システム４５０（例えば、データ管理部４５２）によって阻止される。しかしながら、参照整合性の定義に誤りがあったり、定義そのものがなされていなかったりした場合など、関係性に不整合が生じたレコードが生成されてしまう可能性がある。本実施形態における一貫性検査部４５３は、このような不整合を検出する。詳細については、図１６及び図１７にて後述する。
【０１３２】
入出力制御部４５４は、第１実施形態と同様に、外部ストレージ装置２００に格納されたデータに対する入出力を制御する。具体的には、問合せ処理部４５１又は一貫性検査部４５３からの要求に基づいて、外部ストレージ装置２００に格納されたデータにアクセスする。
【０１３３】
例えば、問合せ処理の場合には、入出力制御部４５４がクライアント３００から送信された問合せ要求を受け付け、問合せ処理部４５１に引き渡す。そして、問合せ処理部４５１が問合せ要求を処理し、問合せ結果を入出力制御部４５４に応答する。入出力制御部４５４は、問合せ結果をクライアント３００に送信する。
【０１３４】
一方、一貫性検査の場合には、入出力制御部４５４が管理計算機等から送信された検査要求を受け付け、一貫性検査部４５３に引き渡す。そして、一貫性検査部４５３が一貫性検査を実行し、検査結果を入出力制御部４５４に応答する。入出力制御部４５４は、検査結果を一貫性検査の要求元に送信する。
【０１３５】
このとき、入出力制御部４５４は、第１実施形態と同様に、受け付けた要求（問合せ要求、検査要求）の実行順序を管理する。例えば、優先度の高いスケジュール待ちキューに問合せ要求、優先度の低いスケジュール待ちキューには検査要求を格納し、第１実施形態と同様に要求を処理するタスクを実行するためのスレッドを順次生成する。
【０１３６】
続いて、関係表１２７０に格納されたレコードと索引１２８０のデータ構造について説明する。図１４及び図１５は、本発明の第２実施形態のデータベースシステムにおける関係表及び索引のデータ構造を説明する図である。図１４はデータが正常に格納されている状態を示し、図１５はデータの格納情報に不整合が発生している状態を示している。
【０１３７】
本実施形態では、主キー以外の属性に索引を付与する二次索引の場合を例として説明する。二次索引では、データレコードを格納する必要はなく、キーに対し、レコードの格納情報（ポインタ、レコード識別子）を保持すればよい。
【０１３８】
二次索引は、Ｂ＋木で構成されており、ページ１０１が根（ルート）に対応するページとなっている。Ｂ＋木では、葉（リーフ）に対応するページにのみ関係表２８０のレコードの格納情報が格納される。図１４及び図１５では、根（ルート）であるページ１０１から、葉（リーフ）であるページ１１１及びページ１１２を参照している。
【０１３９】
格納情報についてさらに説明すると、二次索引内部におけるページ間の参照はページ番号のみとなっている。一方、葉（リーフ）から関係表１２７０（ページ２０１〜ページ２０３）のレコードへの参照はページ番号及びスロット番号となっている。スロット番号は、ページ内でレコードが格納されている位置を示す情報である。
【０１４０】
以上のようなデータ構造で関係表１２７０及び索引１２８０が構成される。図１４を参照すると、ルートとなるページ１０１には、ｋｅｙ１からｋｅｙ３に対応するレコードの参照情報がページ１１１に格納され、ｋｅｙ３以降に対応するレコードの参照情報がページ１１２に格納されることが示されている。そして、ページ１１１にはｋｅｙ０１に対応するレコードがページ番号２０１のスロット番号１に対応する領域に格納されていることが示されている。他のレコードについても同様に格納領域が特定されている。
【０１４１】
これに対し、図１５に示す状態では、一部のｋｅｙに対応するレコードの格納領域を特定できない状態となっている。具体的には、ページ１１１においてｋｅｙ０２に対応するレコードが格納されている領域が「−１」となっているため、レコードの格納位置を特定することができなくなっている。また、ページ１１２においてｋｅｙ１２に対応するレコードがページ番号２０３のスロット番号２に対応する領域に格納されていることが示されているが、ページ２０３が存在していない。
【０１４２】
本発明の第２実施形態における一貫性検査では、索引１２８０によってレコードの格納位置を特定することができない不整合を検出することが可能となっている。基本的には、第１実施形態（図４、図５）に示した手順と同様に処理することができる。
【０１４３】
索引１２８０には複数の索引が含まれており、これらの索引はデータ管理部４５２によって取得することが可能となっている。そのため、索引１２８０に含まれる各索引（第１実施形態のファイルに対応）を順次選択して一貫性検査を実行することによって、図４のフローチャートに示した手順と同様に処理することができる。
【０１４４】
また、索引ごとの一貫性検査についても図５のフローチャートに示した手順と同様に処理することができる。まず、検査対象の索引の根（ルート）となるページを特定し（Ｓ１１０１）、当該ページを読み込む（Ｓ１１０２）。そして、ページの正当性を判定する（Ｓ１１０３）。検査対象のページが他のページを参照しているか否かを判定し（Ｓ１１０５）、さらにページの参照先の正当性を判定する（Ｓ１１０６）。参照先が正当である場合には、新たにスレッドを生成し、参照先のページに対して一貫性検査を実行する（Ｓ１１０８）。
【０１４５】
以上のように、データベースシステムにおける索引の一貫性検査においても本願発明を適用することができる。本発明の第２実施形態によれば、複数の記憶装置によって一の記憶領域が構成されている場合に、並列して一貫性検査を実行することが可能であるため、特に、大規模なデータベースシステムにおいて高速に検査を行うことが可能となる。そして、索引の一貫性検査を高速に完了させることが可能となるため、計算機システム全体の信頼性を向上させることができる。
【０１４６】
続いて、関係表に含まれるレコード間の関係性に生じた不整合を検出する場合について説明する。図１６及び図１７は、本発明の第２実施形態のデータベースシステムにおけるデータモデルを説明する図である。図１６は正常な状態（レコード間に不整合が生じていない状態）を示し、図１７はレコード間に不整合が生じている状態を示している。
【０１４７】
図１６及び図１７には、顧客情報を格納するＣＵＳＴＯＭＥＲ表と顧客の注文情報を格納するＯＲＤＥＲＳ表が示されており、各表はＣｕｓｔＩＤで関係付けられている。ＯＲＤＥＲＳ表に含まれるＣｕｓｔＩＤに対応するレコードをＣＵＳＴＯＭＥＲ表から削除すると注文に対応する顧客情報が消失してしまう。そのため、ＣｕｓｔＩＤがＯＲＤＥＲＳ表に含まれる場合には、通常、データベース管理システム４５０（データ管理部４５２）がＣＵＳＴＯＭＥＲ表から対応するレコードが削除されないように制御している。
【０１４８】
図１６を参照すると、ＣＵＳＴＯＭＥＲ表とＯＲＤＥＲＳ表の各レコードの関係性が正常な場合には、ＯＲＤＥＲＳ表に含まれる各レコードに対応するＣｕｓｔＩＤを有するレコードがすべて存在している。
【０１４９】
一方、図１７に示すＯＲＤＥＲＳ表には、ＣｕｓｔＩＤが「１０６」のレコードが含まれているが、対応するＣｕｓｔＩＤのレコードはＣＵＳＴＯＭＥＲ表に含まれていない。そのため、ＣｕｓｔＩＤが「１０６」に対応する注文情報に顧客情報が含まれない不完全なデータとなってしまう。
【０１５０】
また、図１６及び図１７に示した例では一方の関係表が他方の関係表を参照する単純な構成であったが、一般的に、関係データベースでは、データ量を最小限に抑え、データの重複をなくすように関係表を正規化する。そのため、大規模なデータベースでは、トランザクション系の関係表で多くのマスタ系の関係表を参照する場合があり、不整合が生じているレコードを検出するために多くのコストを必要とする可能性がある。そこで、本発明の一貫性検査を適用することで、レコード間の関係の不整合を迅速に検出することが可能となる。
【０１５１】
データベースシステムで管理される関係表のレコード間の関係は、データベースの定義情報に基づいて木構造で表現することができる。そこで、他の関係表（例えば、ＣＵＳＴＯＭＥＲ表）を参照する関係表（例えば、ＯＲＤＥＲＳ表）の各レコードを根（ルート）とすることで、第１実施形態（図４、図５）に示した手順と同様に、レコード（フィールド）ごとに一貫性検査を実行することができる。
【０１５２】
なお、複数のレコードが一のレコードを参照する場合には、検査対象のフィールド（例えば、ＣｕｓｔＩＤ）ごとに重複したレコードをあらかじめ除外して検査を行うようにしてもよいし、検査済みのフィールドを検査しないように制御してもよい。また、レコード（フィールド）ごとではなく、関係表ごとに一貫性検査を実行するようにしてもよい。
【０１５３】
本発明の第２実施形態によれば、データベースシステムにおける索引と関係表のレコードとの間の整合性、及び、関係表のレコード間の整合性の検査に要する時間を短縮することができる。
【０１５４】
以上、本発明の実施形態について説明したが、上記実施形態は本発明の適用例の一部を示したに過ぎず、本発明の技術的範囲を上記実施形態の具体的構成に限定する趣旨ではない。
【符号の説明】
【０１５５】
１００    ネットワークファイルシステムサーバ
１１０、４１０    ＣＰＵ
１２０、４２０    メモリ
１３０、４３０    ネットワークインターフェイス（Ｉ／Ｆ）
１４０    検査結果表
１５０    ファイルシステム
１５１    ファイルアクセス管理部
１５２    一貫性検査部
１５３    入出力制御部
１５４    スケジュール待ちキュー
１５５    発行待ちキュー
１７０    ネットワークファイルアクセスインターフェイス（Ｉ／Ｆ）
１８０    資源余力表
２００    外部ストレージ装置
２１０    ファイルシステムボリューム
２１１    メタ情報
２１２    ファイル
２２０    ファイル管理表
２３０    ディレクトリ管理表
２５０    ディスク制御コントローラ
２６０    ディスクインターフェイス（Ｉ／Ｆ）
３００    クライアント
４００    データベースサーバ
４５０    データベース管理システム
４５１    問合せ処理部
４５２    データ管理部
４５３    一貫性検査部
４５４    入出力制御部
１２７０    関係表
１２８０    索引
【図１】
2015203927.tif 000003
【図２】
2015203927.tif 000004
【図３】
2015203927.tif 000005
【図４】
2015203927.tif 000006
【図５】
2015203927.tif 000007
【図６】
2015203927.tif 000008
【図７】
2015203927.tif 000009
【図８】
2015203927.tif 000010
【図９】
2015203927.tif 000011
【図１０】
2015203927.tif 000012
【図１１】
2015203927.tif 000013
【図１２】
2015203927.tif 000014
【図１３】
2015203927.tif 000015
【図１４】
2015203927.tif 000016
【図１５】
2015203927.tif 000017
【図１６】
2015203927.tif 000018
【図１７】
2015203927.tif 000019