(57)【要約】  複数のプログラムが動作するマルチコアプロセッサで構成された計算機システムで、優先度の高いプログラムの性能遅延を回避する技術を提供する。計算機の構成情報と、プログラムの定義情報およびプログラム間での参照情報、およびデータ連携の鮮度を用いて、プログラムが使用するコアとメモリを割当てる。さらに、アクセス時に、優先度が高いプログラムが優先的にデータを参照/更新できるように、優先度と情報の鮮度に基づき優先度が低いプログラムにアクセスを許すデータを選択し、アクセスする頻度を調整するアクセス制御を行う。
2015145595.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサで構成される計算機システムであって、
前記プロセッサは複数のコアとメモリを備え、
アプリケーションプログラムを実行するスレッドを前記コアに割り当てるスレッド割当て部と、
前記アプリケーションで使用するデータをメモリへ割当てるデータ割当て部とを備え、
前記スレッド割当て部は優先度の高いアプリケーションを実行するスレッドである高優先度スレッドと優先度の低いアプリケーションを実行するスレッドである低優先度スレッドを異なるプロセッサのコアに割り当て、
前記データ割当て部は、高優先度スレッドが割り当てられたプロセッサに対応づけられたメモリへ高優先度スレッドと低優先度スレッドの両方でアクセスする共通データを格納するようデータの割り当てを行うことを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムにおいて、
前記スレッド割当て部は単一のアプリケーションを実行するための高優先度スレッドは可能であれば単一のプロセッサのコアに割り当てることを特徴とする計算機システム。
【請求項３】
請求項１に記載の計算機システムにおいて、
低優先度スレッドが、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするとき、低優先度スレッドが共通データをアクセスする頻度を指定するインタフェースを備えることを特徴とする計算機システム。
【請求項４】
請求項１に記載の計算機システムにおいて、
低優先度スレッドが、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするとき、低優先度スレッドが共通データをアクセスする頻度を制御するアクセス制御部を備えることを特徴とする計算機システム。
【請求項５】
請求項１に記載の計算機システムにおいて、
高優先度スレッドが共通データを更新するとき更新ログを作成し、高優先度スレッドが割り当てられたプロセッサのメモリへ格納するログ作成部を備え、
低優先度スレッドは前記更新ログを参照することを特徴とする計算機システム。
【請求項６】
請求項５に記載の計算機システムにおいて、
前記更新ログはデータベースのログであり、予め定められた規則に基づいてプロセッサのメモリから外部記憶装置へ出力され、
低優先度スレッドは前記出力されたログを参照することを特徴とする計算機システム。
【請求項７】
請求項５に記載の計算機システムにおいて、
前記アクセス制御部は低優先度スレッドがアクセスする共通データが更新された時刻に基づいて、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするか、更新ログをアクセスするかを制御することを特徴とする計算機システム。
【請求項８】
請求項７に記載の計算機システムにおいて、
前記優先度の高いアプリケーションはオンライントランザクションプログラムであり、前記優先度の低いアプリケーションはカスタマーリレーションシップマネージメントプログラムであることを特徴とする計算機システム。
【請求項９】
スレッド割当て部がアプリケーションプログラムを実行するスレッドを複数のコアを持つプロセッサのコアに割り当てるとき、優先度の高いアプリケーションを実行するスレッドである高優先度スレッドと優先度の低いアプリケーションを実行するスレッドである低優先度スレッドを異なるプロセッサのコアに割り当て、
データ割当て部が前記アプリケーションで使用するデータをメモリへ割当てるとき、高優先度スレッドが割り当てられたプロセッサのメモリへ高優先度スレッドと低優先度スレッドの両方でアクセスする共通データを格納するようデータの割り当てことを特徴とする計算機システム管理方法。
【請求項１０】
請求項９に記載の計算機システム管理方法において、
前記スレッド割当て部は単一のアプリケーションを実行するための高優先度スレッドは可能であれば単一のプロセッサのコアに割り当てることを特徴とする計算機システム管理方法。
【請求項１１】
請求項９に記載の計算機システム管理方法において、
低優先度スレッドが、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするとき、低優先度スレッドが共通データをアクセスする頻度を指定することを特徴とする計算機管理方法。
【請求項１２】
請求項９に記載の計算機システム管理方法において、
低優先度スレッドが、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするとき、アクセス制御部が低優先度スレッドが共通データをアクセスする頻度を制御することを特徴とする計算機管理方法。
【請求項１３】
請求項９に記載の計算機システム管理方法において、
ログ作成部が高優先度スレッドが共通データを更新するとき更新ログを作成し、高優先度スレッドが割り当てられたプロセッサのメモリへ格納し、
低優先度スレッドは前記更新ログを参照することを特徴とする計算機管理方法。
【請求項１４】
請求項１３に記載の計算機管理方法において、
前記更新ログはデータベースのログであり、予め定められた規則に基づいてプロセッサのメモリから外部記憶装置へ出力され、
低優先度スレッドは前記出力されたログを参照することを特徴とする計算機管理方法。
【請求項１５】
請求項１３に記載の計算機管理方法において、
前記アクセス制御部は低優先度スレッドがアクセスする共通データが更新された時刻に基づいて、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするか、更新ログをアクセスするかを制御することを特徴とする計算機管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
計算機の管理方法に関する。
【背景技術】
【０００２】
計算機の技術が発展し、大容量メモリと多コアを搭載した大規模サーバが登場している。基幹系業務を支えるデータベース群（ＯＬＴＰ（Ｏｎｌｉｎｅ  Ｔｒａｎｓａｃｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ）、ＥＲＰ（Ｅｎｔｅｒｐｒｉｓｅ  Ｒｅｓｏｕｒｃｅ  Ｐｌａｎｎｉｎｇ）、ＣＲＭ（Ｃｕｓｔｏｍｅｒ  Ｒｅｌａｔｉｏｎｓｈｉｐ  Ｍａｎａｇｅｍｅｎｔ）など）が、メモリ量と計算処理能力の観点では、1台の大規模サーバ上で、インメモリで実現できるようになった。加えて、経営分析の高度化、ビッグデータ分析をビジネスに活かす期待が高まっており、情報系業務のデータベースで、基幹系業務データベースのデータを迅速に利用することが求められている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第４２９３７９４号
【特許文献２】特許第４８３３５９０号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
大規模計算機において単一のインメモリＤＢエンジンが複数ＤＢシステム用に動作する際、各ＤＢシステムが必要な他ＤＢシステムのデータを参照すると、複数トランザクション実行と、メモリアクセス遅延により、高速実行が必要なＤＢシステムのトランザクション処理性能が低下する。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、代表的な本発明の計算機システムは複数のプロセッサで構成される計算機システムであって、プロセッサは複数のコアとメモリを備え、アプリケーションプログラムを実行するスレッドを前記コアに割り当てるスレッド割当て部と、アプリケーションで使用するデータをメモリへ割当てるデータ割当て部とを備え、スレッド割当て部は優先度の高いアプリケーションを実行するスレッドである高優先度スレッドと優先度の低いアプリケーションを実行するスレッドである低優先度スレッドを異なるプロセッサのコアに割り当て、前記データ割当て部は、高優先度スレッドが割り当てられたプロセッサに対応づけられたメモリへ高優先度スレッドと低優先度スレッドの両方でアクセスする共通データを格納するようデータの割り当てを行う計算機システムにより実現される。
【発明の効果】
【０００６】
優先度の低いアプリケーションの処理が優先度の高いアプリケーションの処理への影響を低減できる。
【図面の簡単な説明】
【０００７】
【図１】本発明が対象としている計算機システムの例を示している。
【図２】実施例におけるサーバで、データベース管理システムが動作する様子を示している。
【図３】実施例における、データベース管理システムが動作するためのデータベース管理システム構成情報を示している。
【図４】実施例におけるＯＬＴＰのＤＢインスタンス定義ファイルの例を示している。
【図５】実施例におけるＣＲＭのＤＢインスタンス定義ファイルの例を示している。
【図６】実施例におけるトポロジ情報の例を示している。
【図７】実施例における割当情報の例を示している。
【図８】実施例におけるＤＢ情報の例を示している。
【図９】実施例におけるデータベース管理システムの処理フローを示している。
【図１０】実施例におけるデータベース管理システムの処理フローを示している。
【図１１】実施例におけるデータを共有するＤＢインスタンスの割当て例を示している。
【図１２】実施例におけるデータを共有しないＤＢインスタンスの割当て例を示している。
【図１３】実施例におけるトランザクション処理を行うスレッドがデータにアクセスする際の概念図を示している。
【図１４】実施例におけるアクセス制御部の処理フローを示している。
【図１５】実施例におけるアクセス制御部の処理フローを示している。
【発明を実施するための形態】
【０００８】
以下、実施例を図面を用いて説明する。
【実施例１】
【０００９】
図１は、本発明が対象としている計算機システムの例を示している。サーバ１０１は、ネットワーク１０３を介して、複数のクライアント（クライアント１（１０５）、クライアント２（１０６）、クライアントＮ(１０７)）と接続されている。サーバ１０１は、クライアントで稼働しているアプリケーションプログラム（ＡＰＰ）からの要求を受け取り、サーバ１０１で処理した結果をクライアントのＡＰＰへ送信する。【００１０】
サーバ１０１は、主に、ノードと、ノードを接続するバスにより構成されている。バスは、システムインターコネクトバスと呼ばれる。システムインターコネクトバスは、１つのバスとして存在することもあれば、図１のように、システムインターコネクトバス１９０および１９１と、コントローラ１９３のように、バスとコントローラの組み合わせで構成されることもある。【００１１】
システムインターコネクトバス１９０、１９１には、複数のノード（ノード１（１１０）、ノード２（１３０）、ノード３（１５０）、ノード４（１７０））が接続されている。各ノードは、プロセッサとメモリが直接に接続される。プロセッサは、Ｉ／Ｏコントローラを介して、デバイスと接続されている。【００１２】
例えば、ノード１(１１０)では、プロセッサ１（１１４）は、４つのコアであるコア１１８、コア１１９、コア１２０、コア１２１を持つ。さらに、プロセッサ１（１１４）は、メモリコントローラ１（１１６）を持ち、メモリ１（１１２）と接続されている。またノード１（１１０）内のＩ／Ｏコントローラ１（１２２）には、２次記憶装置１（１２４）と通信装置１（１２８）が接続されている。【００１３】
２次記憶装置１には、サーバ１０１内で使うファイルの一部が格納されている。具体的には、プログラム１２５、データ１２６、ログ１２７が格納されている。図１において、各ノードの構成と役割は、ノード１（１１０）と同様である。【００１４】
サーバ１０１は、ＮＵＭＡ（Ｎｏｎ−Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）と呼ばれる形態の計算機となっている。各プロセッサ内のそれぞれのコアは、すべてのメモリにアクセスすることができる。【００１５】
しかし、アクセスの速度は、どのコアがどのアドレスにリードまたはライトするかによって異なる。例えば、ノード１にあるコア１１８は、メモリ１（１１２）の方が、メモリ２（１３２）よりも高速にアクセスできる。コア１１８は、メモリ１に、プロセッサ１（１１４）のメモリコントローラ１（１１６）経由でアクセスできる。しかし、コア１１８は、メモリ２（１３２）には、インターコネクトバス１９０を介してアクセスすることになるため、アクセスのレイテンシが大きい。【００１６】
さらに、コア１１８にとっては、インターコネクトバスを介するメモリアクセスでも、メモリ２（１３２）の方が、メモリ３（１５２）よりも高速にアクセスできる。コア１１８が、メモリ２（１３２）にアクセスする場合は、システムインターコネクトバス１９０を介するのに対し、メモリ３（１５２）にアクセスする場合は、システムインターコネクトバス１９０に加え、システムインターコネクトバス１９１、コントローラ１９３を介する必要があるためである。【００１７】
サーバ１０１で動作するソフトウェアからみて、計算を実行するプロセッサは、各ノードのプロセッサを合わせた２７０に相当する。メモリは、各ノードのメモリを合わせた２００に相当する。ノードに接続された２次記憶装置には、明示されていないがオペレーティングシステム２６０の実行ファイルが格納されている。【００１８】
オペレーティングシステム２６０は、プロセッサ２７０、メモリ２００上で動作し、さらに、アプリケーションがプロセッサ２７０およびメモリ２００上で動作するために各種資源を管理する。オペレーティングシステム２６０は、アプリケーションに対し、プロセッサ、コアのアフィニティ機能を提供している。アプリケーションは、アフィニティ機能を用いてオペレーティングシステム２６０に要求することで、特定のプロセッサおよびコア上で動作できる。【００１９】
また、オペレーティングシステム２６０は、アプリケーションに対して、メモリの割当て方針を指定する機能を提供している。これにより、アプリケーションは、自身が使う仮想メモリ領域を、特定ノードの物理メモリから割り当てるようオペレーティングシステム２６０に要求することができる。【００２０】
図２は、サーバで、ソフトウェア、特にデータベース管理システムが動作する様子を示している。【００２１】
データベース管理システム２２０は、データの原子性、一貫性、分離性、持続性を保証するソフトウェアである。データベース管理システム２２０は、オペレーティングシステム２６０の管理下にあるアプリケーションプログラムであり、複数のプロセスおよびスレッドとして動作する。【００２２】
図２には、データベース管理システム２２０の主要な構成を図示している。データベース管理システム２２０は、図２には図示されていないが、ＳＱＬで記述されたクライアントのアプリケーションからの要求を受付け、トランザクションとしてその要求を処理するために、複数の部位から構成されている。具体的には、クライアントとのネットワーク接続管理と、データを送受信する接続・通信管理のモジュールが存在する。また、クライアントから要求されたデータの参照、更新などのトランザクションを実現する基本情報を管理するトランザクション管理部がある。【００２３】
加えて、データベース管理システム２２０へのデータ操作要求として利用されるＳＱＬ言語の解析と実行プランを管理するＳＱＬ管理部が存在する。データベース管理システム２２０の内部では、データはテーブルとして管理されるのが一般的であり、このためにテーブル管理部を備える。また、データベース管理システム２２０は、トランザクションが操作対象のデータに高速にアクセスするためにインデックスを用いることができ、このためにインデックス管理部を持つ。【００２４】
データベース管理システム２２０では、全体を管理するためにデータベース管理スレッド３６０、トポロジ管理スレッド３７０が動作する。データベース管理スレッド３６０では、データベース管理システム２２０上で動作するデータベースの情報をＤＢ情報３６２に保持している。またデータベース管理システム２２０が使用可能なコア、メモリなどの資源の総量、各インスタンスでの使用状況および使用量を割当情報３６４に保持する。データベース管理スレッド３６０は、データベース管理システム２２０のスレッドを管理するため、スレッド割当て部３８０を持つ。【００２５】
また、データのメモリへの割当てを管理するために、データ割当て部３８２が存在する。トポロジ管理スレッド３７０は、サーバ１０１の構成情報をオペレーティングシステム２６０から取得し、トポロジ情報３７２として保持する。【００２６】
データベース管理システム２２０は、内部のデータアクセスを管理するため、アクセス制御部３８４を持つ。さらに、データベース管理システム２２０は、クライアントからのデータの操作を永続化するため、サーバ１０１の２次記憶に、ログ(１２７、１４７、１６７、１８７)として操作情報を記録する。ログ生成部３８６は、ログのデータを管理する。また、データベース管理システム２２０全体の稼動情報、性能情報は、統計情報３９０として保持され、図示されていないがデータベースの管理インタフェースを通して参照できる。【００２７】
データベース管理システム２２０は、複数のＤＢインスタンスを実行することができるインメモリデータベースとして動作する。【００２８】
ＤＢインスタンスは複数のスレッドで構成され独立した記憶領域と独立した制御をもつ。データベース管理システム２２０が確保したメモリは、データ割当て部３８２によって、各ＤＢインスタンスに割当てられる。割り当てられたメモリは、各ＤＢインスタンスのメモリ管理スレッドがＤＢインスタンス内で必要なメモリを管理する。データベースのログについても、各ＤＢインスタンスのログ管理スレッドがログ生成部３８６の機能を用いてデータベースの操作情報を２次記憶に記録する。【００２９】
図２では、オンライントランザクション処理（ＯＬＴＰ）を実現するＤＢインスタンス１(３００)と顧客関係管理（ＣＲＭ）を実現するＤＢインスタンス２（３３０）がデータベース管理システム２２０上で動作している。【００３０】
ＯＬＴＰは、基幹系システムの中でも重要なデータベースであり、大量のトランザクションを高速に実行しなければならない。ＣＲＭは、ＯＬＴＰの情報を元に顧客管理を行うためのデータベースである。基幹系システムにおける重要度は、ＯＬＴＰよりも低い。【００３１】
従来は、ＣＲＭが利用するＯＬＴＰのデータは、1日に１度などの定期的な頻度でバッチ処理を実行し、ＯＬＴＰのデータベースから変更履歴を抜き出し、変更履歴をＣＲＭにロードすることで、データを共有していた。計算機技術の発展により、ＯＬＴＰとＣＲＭなどの複数のデータベースが、１台の計算機上で実行できるようになった。本実施例では、単一のインメモリデータベース管理システム上で、データベースの複数のＤＢインスタンスを実行することにより、バッチ処理なしで、共有することを可能とする。【００３２】
ＤＢインスタンス１（３００）は、ＯＬＴＰのためのＤＢインスタンスであり、トランザクション１（３０４）とトランザクション２（３０８）を実行するために、トランザクションスレッド１（３０２）とトランザクションスレッド２（３０６）が動作している。【００３３】
ＤＢインスタンス１（３００）は、表データとして、店舗情報３１０、在庫情報３１２、商品情報３１４、注文情報３１６、顧客情報３１８の５つの情報を管理している。このうち、注文情報３１６、顧客情報３１８については、他のＤＢインスタンスと共有を可能としている。メモリ管理スレッド１（３２０）は、ＤＢインスタンス１(３００)が動作するために確保されたメモリを管理している。ログ管理スレッド１（３２２）は、オンライントランザクション処理のログを生成、管理する。【００３４】
ＤＢインスタンス２（３２０）は、ＣＲＭのためのインスタンスであり、表データとして、問合せ情報３４０、販促情報３４２、売上情報３４４、注文情報３４６および顧客情報３４８を持つ。このうち注文情報３４６は、ＤＢインスタンス１の注文情報３１６を参照することで実現している。顧客情報３４８も同様に、顧客情報３１８を参照することで実現している。【００３５】
前述したように、ＯＬＴＰは、ＣＲＭより重要度が高いシステムであるため、ＤＢインスタンス１（３００）の方が、ＤＢインスタンス２（３２０）よりも優先して動作することが求められる。すなわち、ＤＢインスタンス１（３００）の優先度は、ＤＢインスタンス２（３２０）の優先度より高い。【００３６】
したがって、ＤＢインスタンス１（３００）のプロセスとスレッド（３０２、３０６、３２０、３２２）は、ＤＢインスタンス２（３２０）のプロセスとスレッド（３３２、３３６、３５０、３５２）より優先して動作する。【００３７】
ＤＢインスタンスを構成するプロセス、スレッドが、別のＤＢインスタンスよりも優先して動作するためには、共有する資源を、優先度の低いＤＢインスタンスに阻害されないようにする必要がある。従来より、１つのデータベースが複数のユーザから利用される場合の並行処理制御方式が考えられてきた。本実施例は、データを部分的に共有する複数のデータベースが、複数のユーザから利用される場合の処理方式に関する。なお、実施例では、ＯＬＴＰとＣＲＭについて記載しているが、組み合わせて使用するデータベースはＥＲＰやＯＬＡＰ（Ｏｎｌｉｎｅ  Ａｎａｌｙｔｉｃａｌ  Ｐｒｏｃｅｓｓｉｎｇ）でもよい。【００３８】
図３は、データベース管理システムが動作するためのデータベース管理システム構成情報を示している。本データは、サーバ１０１の２次記憶装置にデータ（１２６、１４６、１６６または１８６）としてファイルで格納されており、データベース管理システム２２０が起動する際に、データベース管理スレッド３６０が読み込む。ノード数４０５は、データベース管理システム２２０が、サーバ１０１のノードをいくつ利用するかが記載されている。【００３９】
図３では、すべてのノードを利用する設定となっている。コア数４１０は、データベース管理システム２２０が全体で利用可能とするプロセッサのコア数が記載されている。【００４０】
メモリサイズ４１５は、データベース管理システム２２０が動作する際に、オペレーティングシステム２６０から確保するメモリサイズを示している。ＤＢ共有メモリサイズ４２０は、データベース管理システム２２０上で複数のＤＢインスタンスが動作する際、ＤＢインスタンス間で共有して使うメモリ、および全体管理に利用するメモリ量を示している。ＤＢインスタンス定義ファイル４２５は、データベース管理システム２２０が起動後にロードするＤＢインスタンスの設定ファイルを示している。図３では、トランザクション処理（ＯＬＴＰ）と顧客関係管理（ＣＲＭ）のＤＢインスタンスが設定されている。【００４１】
図４は、実施例におけるＯＬＴＰのＤＢインスタンスの定義ファイルの例を示している。ＤＢインスタンス定義ファイル５００は、ＯＬＴＰのＤＢインスタンス１（３００）を起動するために利用される。ＤＢインスタンス名５０５は、システム管理者が当該ＤＢインスタンスをデータベース管理システム２２０上で識別するための識別子である。【００４２】
優先度５１０は、データベース管理システム２２０上で複数のＤＢインスタンスが動作する場合、ＤＢインスタンスごとに設定される実行優先度を示す。優先度５１０で設定されている「１」は、最高優先度で動作することを表している。メモリ容量５１５は、当該ＤＢインスタンスが動作するために、データベース管理システム２２０内で割り当てるサイズである。共有メモリ容量５１７は、当該ＤＢインスタンスが他のＤＢインスタンスとデータ共有に利用するために、データベース管理システム２２０内で割り当てるメモリのサイズである。この情報を元に、データ割当て部が当該ＤＢインスタンス用にメモリを確保する。【００４３】
コア数５２０は、当該ＤＢインスタンスを動作させるために割り当てるコア数である。本実施例では、データベース管理システム２２０のスレッド割当て部３８０は、サーバ１０１の１つのコアに、１つのＤＢインスタンスを割当てる（２つ以上のＤＢインスタンスが、同じコアを利用しない）。最大トランザクション５２５は、1秒間に当該ＤＢインスタンスが処理すべきトランザクション数を示している。平均レスポンスタイム５３０は、当該ＤＢインスタンスで処理されるトランザクションの目標平均処理時間を示す。【００４４】
管理テーブル情報５３５には、当該インスタンスで利用するテーブルのうち、自身がデータベース管理システム２２０上で所有者となって管理する表データの情報を示す。管理テーブル５３５には、テーブルの名称（識別子）の他に、テーブルが他のＤＢインスタンスと共有できるか否かを示す情報、データをＩＤなどのキー値を用いてパーティショニングするかどうかについても、合わせて定義されている。管理テーブル情報５３５には、店舗情報、在庫情報および商品情報が共有不可として、注文情報、在庫情報が共有可として定義されている。ＯＬＴＰのＤＢインスタンス定義ファイル５００は、どのテーブルもパーティショニングを利用しない。【００４５】
なお、本実施例では、テーブルのスキーマは別のデータファイル内で定義されるものとして記載している。参照テーブル５４０には、当該ＤＢインスタンスが、他ＤＢインスタンスが所有するテーブルの情報を記載する。ＤＢインスタンス１（３００）は、他のＤＢインスタンスのテーブルを参照しないため、設定はない。【００４６】
初期データファイル５４５は、ＤＢインスタンス１（３００）が起動する際にロードすべきデータを格納したファイルが設定される。ポート番号５５０は、クライアント（クライアント１（１０５）、クライアント２（１０６）、クライアントＮ（１０７））が、サーバ１０１に要求を出す際に指定するポート番号が格納されている。【００４７】
図５は、実施例におけるＣＲＭのＤＢインスタンス定義ファイルの例を示している。ＤＢインスタンス名６０５、優先度６１０、メモリ容量６１５、共有メモリ容量６１７、コア数６２０、最大トランザクション数６２５、平均レスポンスタイム６３０、初期データファイル６４５およびポート番号６５０は、定義ファイル５００とは異なる値が設定されている。管理テーブル６３５には、ＤＢインスタンス２（３３０）が所有する表データの情報を設定している。【００４８】
問合せ情報、販促情報および売上情報は、共有不可かつパーティショニングなしの表データとして定義されている。参照テーブル６４０には、ＤＢインスタンス１（ＯＬＴＰ）が定義した表テーブルの情報を示している。注文情報は、識別子ＯＬＴＰで起動されるインスタンスの表データ注文を示しており、管理テーブル５３５で定義する注文情報の表テーブルを意味している。顧客情報についても同様である。ＣＲＭの優先度は、６１０で定義されている「３」であり、ＯＬＴＰの方が優先して処理される。参照するＯＬＴＰのデータに関しても、１０分古いデータでも利用可能と定義している。【００４９】
図６はトポロジ情報の例を示している。ノード番号７０５には、どのノードの情報かが示されている。【００５０】
この例では、ノード番号７０５の値である１は、サーバ１０１のノード１(１１０)の意味で使用している。プロセッサ数７１０は、ノードに搭載されたプロセッサの数を示す。サーバ１０１のノード１（１１０）に搭載されているプロセッサの数は１であるため、「１」となっている。コア数７１５は、ノード内に存在するコア数を示している。メモリ７２０は、ノードに搭載されたメモリ容量を示す。【００５１】
この例では、各ノードとも３２ＧＢのメモリが搭載されている。距離７２５は、各ノード間をアクセスする際のコストが代入される。この例では、ノード１からみて、ノード２へのアクセスコストは２０である。ノード１から見て、ノード３、４へのアクセスコストは、サーバ１０１のコントローラ１９３とシステムインターコネクトバス１９１を使用する必要があるため４０としている。デバイス７３０には、各ノードに搭載される装置が記録される。サーバ１０１に関しては、各ノードの通信装置も該当するが、記載を省略している。【００５２】
距離７２５は、例えば、データベース管理システム２２０のトポロジ管理スレッド３７０がオペレーティングシステム２６０に問い合わせることで取得できる。Ｌｉｎｕｘ（Ｒ）の場合、ｎｕｍａｃｔｌコマンドの実行により求められる。【００５３】
この例ではノード間でデータの参照/更新を行うときの負荷を示す値となっており、ノード１とノード１の間でデータの参照/更新を行うときは負荷を示す値が１０であるのに対し、ノード１とノード４の間でデータの参照/更新を行うときの負荷を示す値は４０となっている。【００５４】
図７は、実施例における割当情報の例を示している。大項目１７００は、設定されている内容が、データベース管理システム２２０全体の情報か、各ＤＢインスタンス固有の情報かを区別するために利用される。項目１７０２は、割り当てられる要素を示している。ノード１７０４は、割当てられる要素がノードとサーバ全体のどちらかを特定するために使用される。割当て１７０６は、各ノードまたは全体で割当てが可能な総量を示している。空き１７０８は、割当てが可能な総量に対して、現在の空き容量を示す。利用インスタンスＩＤ１７１０は、リソースを割り当てた際、どのＤＢインスタンスが利用しているかを管理するために使用される。なお、メモリの場合、容量だけでなく、開始アドレスや終了アドレスなどの情報も必要となるが、図示はしていない。【００５５】
全体１７２２〜１７３０は、データベース管理システム２２０全体のコア割当てに関する情報を示している。この例では、ノード１のコアは、すべてＤＢインスタンス１に割当てられている（１７２２）。全体１７３２〜１７４０は、データベース管理システム２２０全体のメモリ割当てに関する情報を示している。この例では、ノード１のメモリは、データベース管理システム２２０が２５ＧＢ確保しており、ＤＢインスタンス１が利用し、空き容量は１ＧＢとなっている。【００５６】
１７４２〜１７５０は、ＤＢインスタンス１（３００）のコア割当てに関する情報を示している。この例では、ＤＢインスタンス１（３００）は、ノード１のコアを割り当てている。１７５２〜１７６４は、ＤＢインスタンス１（３００）のメモリ割当てに関する情報を示している。ＤＢインスタンス１（３００）は、ノード１より２０ＧＢ確保している（１７５２）。【００５７】
占有１７６２は、占有管理テーブルを割当てるメモリのノードを記録する領域である。共有１７６４は、共有可能管理テーブルの割当てが推奨されるメモリのノードを記録する領域である。共有１７６４の利用インスタンスＩＤには、当該ＤＢインスタンスの共有可能管理テーブルを利用するＤＢインスタンスのＩＤが記録される。この例では、ＤＢインスタンス１が要求するメモリサイズが大きくないため、占有、共有ともノード１を割当て、共有可能管理テーブルはＤＢインスタンス２が参照する。【００５８】
１７８０以降は、ＤＢインスタンス２（３３０）の割当て情報となっている。データの構成としてはＤＢインスタンス１（３００）の１７４２〜１７６４と同様であるため、記載を割愛している。【００５９】
図８は、実施例におけるＤＢ情報の例を示している。ＩＤ１８００は、情報が設定されるＤＢインスタンスＩＤが格納される。項目１８０２は、登録される項目を示している。値１（１８０４）と値２（１８０６）は、項目ごとに必要な設定値が格納される領域となっている。ＤＢ情報３６２に設定される内容は、各ＤＢインスタンスのＤＢインスタンス定義ファイル（５００、６００）が基本となっている。【００６０】
１８２０〜１８５２は、ＯＬＴＰを処理するＤＢインスタンス１(３００)のＤＢ情報を示す。ステータス１８２０は、現在、当該ＤＢインスタンスの状態を示している。この例では、コアおよびメモリの割当てが完了したことを示している。メモリ容量１８２６、共有メモリ容量１８２７およびコア数１８２８は、ＤＢインスタンス定義ファイルの設定値だけでなく、値２（１８０６）に未割当てのリソース量を格納している。この例では、割当てが完了しているため未割当てのリソース量は０となっている。共有可能管理テーブル１８４２、１８４４では、参照する可能性があるＤＢインスタンスのＩＤが格納されている。【００６１】
１８５４〜１８６２は、ＣＲＭを処理するＤＢインスタンス２（３３０）のＤＢ情報を示している。参照テーブル１８６０では、ＤＢインスタンス定義ファイル６００に基づき、顧客テーブルの参照鮮度が１０分と設定されている。これは、図５でも示した通り、ＣＲＭは、ＯＬＴＰが保持する顧客のテーブルを参照するが、１０分前の顧客データを参照することが許容されていることを意味する。【００６２】
図９は、データベース管理システムの処理フローを示している。【００６３】
ステップ８０５：トポロジ管理スレッド３７０は、オペレーティングシステム２６０からサーバ１０１のハードウェア構成情報を取得する。【００６４】
ステップ８１０：トポロジ管理スレッド３７０は、取得したハードウェア構成情報をもとにトポロジ情報を生成し、トポロジ情報３７２として登録する。【００６５】
ステップ８１５：データベース管理スレッド３６０は、データベース管理システム２２０の構成情報として、データベース管理システム構成情報４００を読み込み、ＤＢ情報３６２を作成する。【００６６】
ステップ８２０：データベース管理スレッド３６０のデータ割当て部３８２は、データベース管理システム構成情報４００のメモリサイズ４１５を確保するため、トポロジ情報３７２を参照し、ノード数４０５に設定されたノードから割り当てるメモリサイズを決定する。例えば、設定されたメモリサイズを利用するノード数で割ったサイズを、１ノードあたりで確保するメモリサイズとする。データベース管理スレッド３６０のデータ割当て部３８２は、決定した各ノードから獲得するメモリサイズを割当情報３６４の１７３２〜１７４０に登録する。【００６７】
ステップ８２５：データベース管理スレッド３６０のスレッド割当て部３８０は、データベース管理システム構成情報４００のコア数４１０に指定されたコア数を、トロポジ情報３７２を参照し、決定する。スレッド割当て部３８０は、データ割当て部３８２が利用するノード内のコア数が、コア数４１０より大きいか等しい場合、データ割当て部３８２が利用するノードの中から使用するコア番号を決定する。【００６８】
スレッド割当て部３８０は、データ割当て部３８２が利用するノード内のコア数が、コア数４１０より少ない場合、トポロジ情報３７２の距離７２５を参照する。スレッド割当て部３８０は、データ割当て部３８２が利用するノードから近い距離にあるノードを選択し、残りの使用コアを決定する。【００６９】
データベース管理スレッド３６０は、決定したコア数を割当情報３６４に登録する。【００７０】
ステップ８３０：データベース管理スレッド３６０は、データベース管理システム構成情報４００のＤＢインスタンス定義ファイル４２５に指定されたファイルをひとつ読む。【００７１】
ステップ８３５：データベース管理スレッド３６０は、ＤＢインスタンス定義ファイル（例えば、定義ファイル５００）の情報をＤＢ情報３６２に登録する。ＤＢインスタンス定義ファイルの参照テーブル／鮮度（５４０、６４０）に定義情報がある場合、データベース管理スレッド３６０は、参照するＤＢインスタンスの共有可能管理テーブルに、当該ＤＢインスタンスのＩＤを登録する。たとえば、ＣＲＭは、ＯＬＴＰの顧客を参照するため、共有管理テーブル１８４４に、ＣＲＭのＤＢインスタンスＩＤである２を登録している。【００７２】
ステップ８４０：データベース管理スレッド３６０は、データベース管理システム構成情報４００のＤＢインスタンス定義ファイル４２５に書かれたファイルのうち、読み込んでいないファイルがあるか判定する。ほかに読むファイルがある場合は、ステップ８３０に戻る。そうでなければ、８５０へ進む。【００７３】
図１０は、図９の処理フローの続きを示している。【００７４】
ステップ９０５：データベース管理スレッド３６０は、ＤＢ情報３６２を参照し、割当て設定が行われていないＤＢインスタンスの中から最も優先度の高いＤＢインスタンスを選択する。データベース管理スレッド３６０は、選択したＤＢインスタンスについてＤＢ情報３６２のステータス（１８２０、１８５４）を割当て中に設定する。【００７５】
ステップ９１０：データ割当て部３８２は、ＤＢ情報３６２の中で、パーティショニング１８３４などを参照し、当該ＤＢインスタンスが、パーティショニングを使用するかどうかを判定する。パーティショニングをしない場合は、以下のように割当てを決める。【００７６】
データ割当て部３８２は、ＤＢ情報３６２を参照し、占有管理テーブル、共有可能管理テーブル、参照テーブルより、当該ＤＢインスタンスが他のＤＢインスタンスのデータを参照するかどうかを判定する。【００７７】
データ割当て部３８２は、優先度と他のＤＢインスタンスの参照の有無から、占有管理テーブルを割当てるノードを確定する。ＤＢインスタンスの優先度が高く、かつ、他のＤＢインスタンスのデータを参照しない場合、データ割当て部３８２は、割当情報３６４の全体の空き領域（１７３２〜１７４０の空きＧＢ１７０８）を参照し、割当てが行われていないノードからメモリを割り当てる。ＤＢインスタンスの優先度が低く、かつ、他ＤＢインスタンスのデータを参照しない場合、データ割当て部３８２は、割当情報３６４およびトポロジ情報３７２を参照し、割当てが既に実施されたノードから遠い距離にあるノード上のメモリを確保する。【００７８】
他ＤＢインスタンスのデータを参照し、他ＤＢインスタンスの割当てが完了している場合、データ割当て部３８２は、割当情報３６４およびトポロジ情報３７２を参照し、参照するＤＢインスタンスが利用するノードから近い距離にあるノード上のメモリを確保する。この際、ＤＢインスタンスの優先度が高い場合、近い距離にあるノードのうち、割当てが行われていないノードからメモリを割り当てる。【００７９】
なお、選択したノードのみで要求されたメモリ量（メモリ容量１８２６に設定された容量）が確保できない場合、データ割当て部３８２は、トポロジ情報３７２の距離７２５と割当情報３６４のメモリ１７３２〜１７３８を参照し、既に選択したノードから近い距離にあるノードからメモリを割当てる。【００８０】
データ割当て部３８２は、確保したメモリサイズを割当情報３６４の全体の空き領域（１７３２〜１７４０の空きＧＢ１７０８）から引く。また確保したメモリサイズを当該ＤＢインスタンスの割当てに加算する（１７５２）。さらに、データ割当て部３８２は、当該ＤＢインスタンスの占有１７６２に設定したノードを追加する。【００８１】
次に、データ割当て部３８２は、ＤＢ情報３６２を参照し、当該ＤＢインスタンスが共有メモリ容量を設定し、共有可能管理テーブルがあるかどうかを確認する。占有管理テーブルを確保したノードに空き容量があれば、データ割当て部３８２は、共有メモリ容量（１８２７）に設定されたメモリ量をそのノードより割当てる。ＤＢインスタンスの優先度が高く、占有管理テーブルを確保したノードに空き容量がなければ、データ割当て部３８２は、トポロジ情報３７２と割当情報３６４を参照し、占有管理テーブルを確保したノードから近い距離にある未割当てのノードから優先して共有メモリ容量を割当てる。ＤＢインスタンスの優先度が低く、占有管理テーブルを確保したノードに空き容量がなければ、データ割り当て部３８２は、トポロジ情報３７２と割当情報３６４を参照し、占有管理テーブルを確保したノードに近く、優先度が低いＤＢインスタンスのデータが割当てられているノードから共有メモリ容量を割当てる。【００８２】
データ割当て部３８２は、確保した共有メモリサイズを割当情報３６４の全体の空き領域（１７３２〜１７４０の空きＧＢ１７０８）から引く。また確保した共有メモリサイズを当該ＤＢインスタンスの割当てに加算する（１７５２）。さらに、データ割当て部３８２は、当該ＤＢインスタンスの共有１７６４に設定したノードを追加する。【００８３】
データ割当て部３８２は、当該ＤＢインスタンスが参照するテーブルがある場合、参照するＤＢインスタンスが割当て済みであれば、割当て済みのＤＢインスタンスのメモリ情報の中で、共有で利用するメモリノードに当該ＤＢインスタンスのＩＤを設定する。ＤＢインスタンス２（３３０）がＤＢインスタンス１（３００）のデータを共有する場合、共有１７６４の利用インスタンスＩＤに２を設定する。【００８４】
データ割当て部３８２は、当該ＤＢインスタンスがパーティショニングを利用する場合は、占有管理テーブルと共有可能管理テーブルの割当てにおいて、パーティショニングを行うテーブルのメモリ領域を割当てる際、複数のノードに分割して割り当てる。【００８５】
ステップ９１５：スレッド割当て部３８０は、ステップ９１０で割り当てたノード上のコアを優先し、ＤＢ情報３６２に指定されたコア数（１８２８など）のコアを、割当情報３６４を利用し割り当てる。スレッド割当て部３８０は、データ割当て部３８２がステップ９１０で割り当てたノードの空きコア数が、当該ＤＢインスタンスが必要とするコア数に満たない場合、トポロジ情報３７２の距離７２５を参照し、データを割り当てるノードから近い距離にあるノードを選択し、そこから利用するコアを割り当てる。【００８６】
割り当てたコア数を、ノードおよび全体の空きコア数から減らす。当該ＤＢインスタンスの割当てコアに加算する。【００８７】
ステップ９２０：データベース管理スレッド３６０は、選択しているＤＢインスタンスについてＤＢ情報３６２のステータス（１８２０、１８５４）を割当て完に設定する。【００８８】
ステップ９２５：データベース管理スレッド３６０は、ＤＢ情報３６２を参照し、全てのＤＢインスタンスのステータスが割当て完になっているかどうかを確認する。全てのＤＢインスタンスが割当て完になっている場合は、９３０へ進み、割当て処理を完了する。割当て完になっていないＤＢインスタンスが存在する場合は、ステップ９０５へ戻る。【００８９】
データ割当て部３８２とスレッド割当て部３８０は、優先度が高いＤＢインスタンスから、メモリとコアを割り当てることで、優先度とＤＢインスタンス間でのデータ共有を考慮した資源の割当てを実現する。【００９０】
図１１は、実施例におけるデータを共有するＤＢインスタンスの割当て例を示している。データベース管理システム２２０が使用するメモリは、各ノード上で均等な容量が確保されている（１３０５、１３２０、１３３５、１３５０）。ＯＬＴＰに使用するメモリ１３１０は、データ割当て部３８２により、ノード１（１１０）のメモリ１（１１２）から確保されている。ＣＲＭに使用するメモリは、ノード２（１３０）のメモリ２（１３２）と、ノード３のメモリ３（１５２）に分けて確保されている。【００９１】
ＯＬＴＰで使用するコアは、高優先度のスレッドを実行するコアであり、スレッド割当て部３８０により、ノード１（１１０）のコア１１８、１１９、１２０、１２１に割当てられている（１３７０、１３７２、１３７４、１３７６）。ＣＲＭで使用するコアは、低優先度のスレッドを実行するコアであり、ノード２（１３０）のコア１３８、１３９、１４０に割当てられている（１３８０、１３８２、１３８４）。【００９２】
このようにＯＬＴＰ等の優先度の高いプログラム用の記憶領域やデータ処理を割当てる場合には可能な限り同じノードのメモリやコアに割り当て、メモリやコアが不足する場合はデータ参照の負荷が低い隣接するノードのコアやメモリを割り当てるようにする。【００９３】
さらに、ＯＬＴＰ用のデータを使用してデータ処理を行うＣＲＭのようなプログラム用のメモリやコアはＯＬＴＰ用に割り当てたメモリやコアを持つノードに隣接するノードへ割当てることにより、同じデータを処理する複数のプログラム間で不必要にデータ参照/更新の負荷を上げない処理が可能となる。【００９４】
ＯＬＴＰとＣＲＭの両方で使用するデータは優先度の高いＯＬＴＰ用データを割当てるノードへ割り当て、ＯＬＴＰの処理をするときに負荷が上がらないようにする。【００９５】
データの容量、コアの必要数に依存してＯＬＴＰの処理が許容する場合は一部のノードでＯＬＴＰ用とＣＲＭ用に割りつけられたデータやコアが共存してもよい。【００９６】
データの参照/更新負荷は図６のようなトポロジ情報を参照して判断すればより正確な負荷の判断が可能であるが、ノード番号を負荷が低い順又は高い順に割り当て、ノード番号ができるだけ近いものを選択することにより、データを共有するプログラム間で不必要にデータ参照/更新の負荷を上げない簡易なシステムを提供することが可能となる。【００９７】
図１２は、実施例におけるデータを共有しないＤＢインスタンスの割当て例を示している。【００９８】
ＯＬＴＰ用とＯＬＴＰ用，ＣＲＭ用とＣＲＭ用のように同種類のアプリケーションであっても良いが、データを共有する必要の無いプログラム間ではお互いにデータ参照/更新の負荷の影響がでにくいノードにメモリとコアを割当てる。【００９９】
この例ではノード番号がデータ参照/更新の負荷を示す距離順に割り当てられているという前提でＯＬＴＰ用のデータ、コアをノード１からノード番号の大きいノードへ順に割り当て、ＣＲＭ用のデータを最もノード番号の大きいノードであるノード４からノード番号の小さいノードへ順に割り当てることにより、影響を低減している。トポロジ情報を用いて割当ててもよい。【０１００】
この場合であっても可能な限り、一つのノードへ割り付けるメモリやノードを集中した方が良い。【０１０１】
図１３は、トランザクション処理を行うスレッドがデータにアクセスする際の概念図を示している。【０１０２】
図１３はＯＬＴＰを処理するＤＢインスタンス１（３００）のトランザクションスレッド１（３０２）とＣＲＭを処理するＤＢインスタンス２（３３０）のトランザクションスレッド３（３３２）が、共有しているテーブルである顧客情報３１８にアクセスする様子を表している。【０１０３】
各トランザクション（３０４、３３４）を保持するトランザクションスレッド（３０２、３３２）は、データベース管理システム２２０のアクセス制御部３８４を用いて顧客情報３１８にアクセスする。ＯＬＴＰのトランザクション３０４を実行するトランザクションスレッド１（３０２）は、高優先度のスレッドである。ＣＲＭのトランザクション３３２を実行するトランザクションスレッド３（３３２）は、低優先度のスレッドである。【０１０４】
顧客情報３１８は、テーブルの各行ごとに顧客データが格納されている。顧客情報３１８は、内部では、最新の行データを管理する管理情報１４２０と実データ１４３０から構成されている。【０１０５】
ＯＬＴＰの処理において顧客情報３１８のデータが更新されると、トランザクションスレッド３０２は、ログバッファ１４４０に更新ログ情報を生成する。図では、行２が変更された更新ログ情報１４４２が格納されている。ログ生成部３８６は、トランザクションスレッド１（３０２）とログ管理スレッド１（３２２）により実行され、ログバッファ１４４０を介して更新ログ情報を２次記憶に保存する。【０１０６】
ＣＲＭの領域では、顧客情報３１８の更新ログ情報を保持する更新履歴１４５０が存在する。図では、行１が更新された際の更新ログ情報１４５２が格納されている。メモリ管理スレッド３２０とメモリ管理スレッド３５０は、連携して、トランザクション処理とは別に、ログバッファ１４４２に書かれた顧客情報３１８の更新情報を定期的に更新履歴１４５０に書くことができる。アクセス制御情報１４６０には、ＤＢインスタンス間のアクセス頻度情報、各ＤＢインスタンスが最後にトランザクションを実行した時刻および参照したデータの更新時刻などを保持する。【０１０７】
図の中で一つのノードの中に記載されているトランザクションスレッド（３０２，３３２）や顧客情報（３１８）は特定のノードに配置されるが、その他のノードを跨って記載されている構成要素はシステム上の位置を問わない。【０１０８】
図１４は、アクセス制御部の処理フローを示している。【０１０９】
ステップ１５００：トランザクションスレッドは、アクセス制御部３８４へ、データのアクセス（リード、ライト等）を依頼する。アクセス制御部３８４は、依頼に基づきアクセスすべきデータの特定を開始する。【０１１０】
ステップ１５０５：アクセス制御部３８４は、要求されたデータの種類から、データが他のＤＢインスタンスと共有するデータかどうかを確認する。要求されたデータの種類は、データベースの表（テーブル）であれば、ＤＢ情報３６２の占有管理テーブル（１８３６）、共有可能管理テーブル（１８４２、１８４４）、参照テーブル（１８４６）を検索することで判定することができる。【０１１１】
また、表以外のデータでも、領域の管理データとして、他ＤＢインスタンスとの共有の可否を示す情報を持つことにより判定できる。データが他ＤＢインスタンスと共有していれば、ステップ１５１０へ進む。共有していなければ、管理データおよび実データにアクセスする（１６１０）。【０１１２】
ステップ１５１０：アクセス制御部３８４は、実行しているトランザクションが要求されたデータの所有者であるかどうかを判定する。データの所有者であるかどうかは、例えば要求されたデータが表であれば、ＤＢ情報３６２の占有管理テーブル１８３６または共有可能管理テーブル１８４２に対象となる表の情報があるかどうかで判断することができる。【０１１３】
また、ステップ１５０５と同様に、領域の管理データに所有者のＤＢインスタンスＩＤを登録しておくことで判定できる。データにアクセスするトランザクションが所有者の場合は、管理データおよび実データにアクセスする（１６１０）。所有者でなければ、ステップ１５１５へ進む。【０１１４】
ステップ１５１５：アクセス制御部３８４は、データをアクセスするトランザクションを持つＤＢインスタンスの優先度が、当該データをアクセスする他のＤＢインスタンスの優先度より高いかどうかを判定する。データをアクセスするＤＢインスタンスの優先度は、ＤＢ情報３６２の優先度１８２４、トランザクションスレッド（３０２、３３２）の管理情報またはアクセスデータの管理情報を参照することで知ることができる。また、他ＤＢインスタンスの優先度については、対象とするデータが表であれば、ＤＢ情報３６２から、当該データが存在する表を、参照テーブル１８４６に持つＤＢインスタンスを検索し、該当するＤＢインスタンスの優先度１８２４を参照することで知ることができる。【０１１５】
あるいは、アクセス対象となるデータの管理情報として、利用するＤＢインスタンスのリストと優先度を保持しておき、データをアクセスするトランザクションのＤＢインスタンスの優先度と他のＤＢインスタンスの優先度を比較することでも実現できる。データをアクセスするＤＢインスタンスが、他に参照するＤＢインスタンスより優先度が高ければ、管理データおよび実データにアクセスする（１６１０）。そうでなければ、ステップ１５２０へ進む。【０１１６】
ステップ１５２０：アクセス制御部３８４は、要求されているデータアクセスが、データを新たに書き込む操作または更新する操作であるかを判定する。書込みまたは更新である場合は、ステップ１５２５へ進む。参照のみの操作であれば、ステップ１５４０へ進む。【０１１７】
ステップ１５２５：アクセス制御部３８４は、アクセス制御管理情報１４６０を参照し、トランザクションを実行するＤＢインスタンスが、参照先のＤＢインスタンスへアクセス可能な頻度を確認する。【０１１８】
ステップ１５３０：アクセス制御部３８４は、ステップ１５２５で求めたアクセス可能な頻度と実績を比較し、目標以下となっているかどうかを確認する。目標以下となっている場合は、管理データにアクセスする（１６００）。【０１１９】
ステップ１５３５：アクセス制御部３８４は、当該トランザクションは、参照するデータを保持していないＤＢインスタンスのトランザクションであり、当該ＤＢインスタンスは参照先のＤＢインスタンスへ頻繁にアクセスしているため、アクセスの処理を遅らせるタイミング調整を実行する。【０１２０】
例えば、目標値を満たすように当該トランザクションスレッドでスリープ関数を発行し、ビジーウェイトのループを実行することにより一時的に他のトランザクション処理を実行できるようにする。ウェイト処理後に管理データにアクセスする（１６００）。【０１２１】
ステップ１５４０：アクセス制御部３８４は、当該トランザクションのデータ参照として、データを所有するＤＢインスタンスが管理する最新のオリジナルデータではなく、データの更新履歴などから、参照可能な以前のデータまたはコピーされたデータが参照できるか検索する。具体的には、次の操作のいずれか、または、全てを行い、対象となるデータがあるかどうかを確認し、ステップ１５４５へ進む。【０１２２】
（１）当該トランザクションを実行しているＤＢインスタンスが管理する更新履歴１４５０のエントリとして、アクセスするデータが存在するか検索する。【０１２３】
（２）オリジナルのデータを管理するＤＢインスタンスが保持するログバッファ内に、アクセスするデータの変更記録が存在しているか検索する。【０１２４】
（３）オリジナルのデータを管理するＤＢインスタンスのログが格納されている２次記憶装置にアクセスし、直近のログファイル内にアクセスするデータの更新ログデータが存在するか検索する。【０１２５】
ステップ１５４５：アクセス制御部３８４は、ステップ１５４０でデータが見つかったならば、ステップ１５５０へ進む。見つからなかった場合は、ステップ１５２５へ進む。【０１２６】
ステップ１５５０：アクセス制御部３８４は、現在の時刻と、見つかったデータの更新時刻の差を求める。アクセス制御部３８４は、ＤＢ情報３６２の当該ＤＢインスタンスの参照テーブル／頻度の情報（１８４６など）と、求めた差を比較し、情報の鮮度が範囲内かを判定する。さらに、アクセス制御部３８４は、アクセス制御管理情報１４６０に格納されている前に実行したトランザクションが参照したデータの更新時刻と、見つかったデータの更新時刻を比較し、ＤＢインスタンスが見つかったデータが有効な範囲内のデータか判定する。範囲内であれば古いデータにアクセスする（１６２５）。範囲内でなければ、管理データにアクセスする（１６００）。【０１２７】
なお、本実施例では、時刻を用いた判定方法を示しているが、トランザクションＩＤやプロセッサのタイムスタンプカウンタを用いて判定してもよい。【０１２８】
図１５は、アクセス制御部の処理フローの続きを示している。【０１２９】
ステップ１６１０：アクセス制御部３８４は、要求されたデータのアクセスを、管理データおよび実データへのアクセスに確定する。当該トランザクションが、顧客情報３１８のデータを要求した場合、管理情報１４２０と実データ１４３０にアクセスする。【０１３０】
ステップ１６００：アクセス制御部３８４は、要求された実データにアクセスする。当該トランザクションが、顧客情報３１８のデータを要求した場合、管理情報１４２０を参照するための処理を行う。【０１３１】
ステップ１６０５：アクセス制御部３８４は、管理情報を参照し、要求されたデータを当該トランザクションが現在操作可能か否かを判定する。例えば、ロックフラグが立っていないかどうかを確認する。操作可能な場合、ステップ１６１５へ進む。操作できない場合はステップ１６２０に進む。【０１３２】
ステップ１６１５：アクセス制御部３８４は、当該トランザクションが、要求されたデータの最新の実データにアクセスすることを決定する。当該トランザクションが、顧客情報３１８のデータを要求した場合、実データ１４３０へアクセスする。【０１３３】
ステップ１６２０：アクセス制御部３８４は、当該トランザクションが、要求されたデータの最新の実データにアクセスすることを決定する。ただし、当該データは、他トランザクションが利用しているため、すぐにアクセスはせず、ロックの解放待ちの登録をするなどして、利用可能になるまで待ってからアクセスする。【０１３４】
ステップ１６２５：アクセス制御部３８４は、当該トランザクションは、ステップ１５４０で検索した古いデータにアクセスすることを決定する。当該トランザクションが、顧客情報３１８の行１を要求した場合は、更新履歴１４５０のエントリ１５４２を利用する。当該トランザクションが、顧客情報３１８の行２を要求した場合は、ログバッファ１４４０のエントリ１４４２を利用する。ログファイルに存在した場合は、ログファイルのデータを利用する。【０１３５】
なお、本実施例では、設定ファイル（ＤＢインスタンス定義ファイル）にて、鮮度を指定する例について示している。鮮度を指定する方法としては、データベース管理システム２２０がコマンドインタフェースを利用する、問合せ文（ＳＱＬ）に付加する、ことでも実現できる。
【符号の説明】
【０１３６】
１０１  サーバ、２００  メモリ、２７０  プロセッサ、２２０  データベース管理システム、２６０  オペレーティングシステム、３００  ＤＢインスタンス１、３３０  ＤＢインスタンス２、３６０  データベース管理スレッド、３６２  ＤＢ情報、３６４  割当情報、３７０  トポロジ管理スレッド、３７２  トポロジ情報、３８０  スレッド割当て部、３８２  データ割当て部、３８４  アクセス制御部、３８６  ログ生成部、４００  データベース管理システム構成情報、５００  ＤＢインスタンス定義ファイル、６００  ＤＢインスタンス定義ファイル
【図１】
2015145595.tif 000003
【図２】
2015145595.tif 000004
【図３】
2015145595.tif 000005
【図４】
2015145595.tif 000006
【図５】
2015145595.tif 000007
【図６】
2015145595.tif 000008
【図７】
2015145595.tif 000009
【図８】
2015145595.tif 000010
【図９】
2015145595.tif 000011
【図１０】
2015145595.tif 000012
【図１１】
2015145595.tif 000013
【図１２】
2015145595.tif 000014
【図１３】
2015145595.tif 000015
【図１４】
2015145595.tif 000016
【図１５】
2015145595.tif 000017
【手続補正書】
【提出日】平成28年5月17日(2016.5.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のプロセッサで構成される計算機システムであって、
前記プロセッサは複数のコアとメモリを備え、
アプリケーションプログラムを実行するスレッドを前記コアに割り当てるスレッド割当て部と、
前記アプリケーションプログラムで使用するデータをメモリへ割当てるデータ割当て部とを備え、
前記スレッド割当て部は優先度の高いアプリケーションプログラムを実行するスレッドである高優先度スレッドと優先度の低いアプリケーションプログラムを実行するスレッドである低優先度スレッドを異なるプロセッサのコアに割り当て、
前記データ割当て部は、高優先度スレッドが割り当てられたプロセッサに対応づけられたメモリへ高優先度スレッドと低優先度スレッドの両方でアクセスする共通データを格納するようデータの割り当てを行うことを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムにおいて、
前記スレッド割当て部は単一のアプリケーションプログラムを実行するための高優先度スレッドは可能であれば単一のプロセッサのコアに割り当てることを特徴とする計算機システム。
【請求項３】
請求項１に記載の計算機システムにおいて、
低優先度スレッドが、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするとき、低優先度スレッドが共通データをアクセスする頻度を指定するインタフェースを備えることを特徴とする計算機システム。
【請求項４】
請求項１に記載の計算機システムにおいて、
低優先度スレッドが、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするとき、低優先度スレッドが共通データをアクセスする頻度を制御するアクセス制御部を備えることを特徴とする計算機システム。
【請求項５】
請求項１に記載の計算機システムにおいて、
高優先度スレッドが共通データを更新するとき更新ログを作成し、高優先度スレッドが割り当てられたプロセッサのメモリへ格納するログ作成部を備え、
低優先度スレッドは前記更新ログを参照することを特徴とする計算機システム。
【請求項６】
請求項５に記載の計算機システムにおいて、
前記更新ログはデータベースのログであり、予め定められた規則に基づいてプロセッサのメモリから外部記憶装置へ出力され、
低優先度スレッドは前記出力されたログを参照することを特徴とする計算機システム。
【請求項７】
請求項５に記載の計算機システムにおいて、
低優先度スレッドが、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするとき、低優先度スレッドが共通データをアクセスする頻度を制御するアクセス制御部を備え、
前記アクセス制御部は低優先度スレッドがアクセスする共通データが更新された時刻に基づいて、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするか、更新ログをアクセスするかを制御することを特徴とする計算機システム。
【請求項８】
請求項７に記載の計算機システムにおいて、
前記優先度の高いアプリケーションプログラムはオンライントランザクションプログラムであり、前記優先度の低いアプリケーションプログラムはカスタマーリレーションシップマネージメントプログラムであることを特徴とする計算機システム。
【請求項９】
スレッド割当て部がアプリケーションプログラムを実行するスレッドを複数のコアを持つプロセッサのコアに割り当てるとき、優先度の高いアプリケーションプログラムを実行するスレッドである高優先度スレッドと優先度の低いアプリケーションプログラムを実行するスレッドである低優先度スレッドを異なるプロセッサのコアに割り当て、
データ割当て部が前記アプリケーションプログラムで使用するデータをメモリへ割当てるとき、高優先度スレッドが割り当てられたプロセッサのメモリへ高優先度スレッドと低優先度スレッドの両方でアクセスする共通データを格納するようデータの割り当てことを特徴とする計算機システム管理方法。
【請求項１０】
請求項９に記載の計算機システム管理方法において、
前記スレッド割当て部は単一のアプリケーションプログラムを実行するための高優先度スレッドは可能であれば単一のプロセッサのコアに割り当てることを特徴とする計算機システム管理方法。
【請求項１１】
請求項９に記載の計算機システム管理方法において、
低優先度スレッドが、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするとき、低優先度スレッドが共通データをアクセスする頻度を指定することを特徴とする計算機管理方法。
【請求項１２】
請求項９に記載の計算機システム管理方法において、
低優先度スレッドが、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするとき、アクセス制御部が低優先度スレッドが共通データをアクセスする頻度を制御することを特徴とする計算機管理方法。
【請求項１３】
請求項９に記載の計算機システム管理方法において、
ログ作成部が高優先度スレッドが共通データを更新するとき更新ログを作成し、高優先度スレッドが割り当てられたプロセッサのメモリへ格納し、
低優先度スレッドは前記更新ログを参照することを特徴とする計算機管理方法。
【請求項１４】
請求項１３に記載の計算機管理方法において、
前記更新ログはデータベースのログであり、予め定められた規則に基づいてプロセッサのメモリから外部記憶装置へ出力され、
低優先度スレッドは前記出力されたログを参照することを特徴とする計算機管理方法。
【請求項１５】
請求項１３に記載の計算機管理方法において、
低優先度スレッドが、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするとき、アクセス制御部が低優先度スレッドが共通データをアクセスする頻度を制御し、
前記アクセス制御部は低優先度スレッドがアクセスする共通データが更新された時刻に基づいて、高優先度スレッドが割り当てられたプロセッサのメモリへ格納された共通データをアクセスするか、更新ログをアクセスするかを制御することを特徴とする計算機管理方法。
【国際調査報告】
2015145595.tif 000018
2015145595.tif 000019