(57)【要約】【課題】ＤＢに対する検索処理の実行結果に基づいて生成されるデータ群をＤＢに格納する格納処理の高速化を図ること。【解決手段】（１）で示すように、コア＃０は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文１１１を受け付け、（２）で示すように、ＳＥＬＥＣＴ句に従い検索処理１１２を実行し、実行結果に基づいてレコード群ｒｄ１、２を生成する。次に、コア＃０は、（３）で示すように、レコード群ｒｄ１、２のそれぞれを、コア＃１、＃２に割り当てて、（４）で示すように、コア＃１、２に、割り当てたレコードをＤＢ１０２に格納する格納処理１１３を実行する要求を送信する。ここで、コア＃０は、検索処理１１２を同一のトランザクションに含まれる処理として実行するように要求する。コア＃１、２は、（５）で示すように、格納処理１１３を検索処理１１２と同一のトランザクションに含まれる処理として実行する。【選択図】図１
2017126172.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されるデータ群のそれぞれを、前記データベースにアクセス可能な複数のプロセッサのいずれかに割り当て、
前記複数のプロセッサのうちの前記データ群のそれぞれを割り当てた割当先プロセッサに、前記割当先プロセッサに割り当てたデータを前記データベースに格納する格納処理を前記トランザクションに含まれる処理として実行する要求を送信する、
処理を実行させることを特徴とするデータベース制御プログラム。
【請求項２】
前記データベースは、複数の記憶領域に分割されており、
前記割り当てる処理は、
前記複数の記憶領域の数と前記複数のプロセッサの数とのうちの少ない数分のプロセッサに、前記データ群をそれぞれ分散して割り当てる、
ことを特徴とする請求項１に記載のデータベース制御プログラム。
【請求項３】
前記複数のプロセッサのいずれかのプロセッサに、前記割り当てる処理と前記送信する処理とを実行させることを特徴とする請求項１または２に記載のデータベース制御プログラム。
【請求項４】
前記いずれかのプロセッサに、
前記データベースに対する検索処理の実行結果に基づいて生成されるデータ群を前記データベースに格納することを示す命令を受け付けたことに応じて、前記検索処理を前記トランザクションに含まれる処理として実行する、処理を実行させ、
前記割り当てる処理は、
実行した前記検索処理の実行結果に基づいて生成されたデータ群のそれぞれを、前記複数のプロセッサのいずれかに割り当てる、
ことを特徴とする請求項３に記載のデータベース制御プログラム。
【請求項５】
データベースにアクセス可能な複数のプロセッサに含まれるプロセッサに、
前記データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されるデータ群のいずれかのデータが前記プロセッサに割り当てられたことに応じて、前記データを取得し、
取得した前記データを前記データベースに格納する格納処理を、前記トランザクションに含まれる処理として実行する、
処理を実行させることを特徴とするデータベース制御プログラム。
【請求項６】
データベースにアクセス可能な複数のプロセッサを有するデータベース制御装置であって、
前記データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されたデータ群のそれぞれを、前記複数のプロセッサのいずれかに割り当て、
前記複数のプロセッサのうちの前記データ群のそれぞれを割り当てた割当先プロセッサに、前記割当先プロセッサに割り当てたデータを前記データベースに格納する格納処理を前記トランザクションに含まれる処理として実行する要求を送信する、
制御部を特徴とするデータベース制御装置。
【請求項７】
データベースにアクセス可能な複数のプロセッサを有するデータベース制御装置であって、
前記複数のプロセッサに含まれるプロセッサは、
前記データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されたデータ群のいずれかのデータが前記プロセッサに割り当てられたことに応じて、前記データを取得し、
取得した前記データを前記データベースに格納する格納処理を、前記トランザクションに含まれる処理として実行する、
ことを特徴とするデータベース制御装置。
【請求項８】
コンピュータが、
データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されるデータ群のそれぞれを、前記データベースにアクセス可能な複数のプロセッサのいずれかに割り当て、
前記複数のプロセッサのうちの前記データ群のそれぞれを割り当てた割当先プロセッサに、前記割当先プロセッサに割り当てたデータを前記データベースに格納する格納処理を前記トランザクションに含まれる処理として実行する要求を送信する、
処理を実行することを特徴とするデータベース制御方法。
【請求項９】
データベースにアクセス可能な複数のプロセッサに含まれるプロセッサが、
前記データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されるデータ群のいずれかのデータが前記プロセッサに割り当てられたことに応じて、前記データを取得し、
取得した前記データを前記データベースに格納する格納処理を、前記トランザクションに含まれる処理として実行する、
処理を実行することを特徴とするデータベース制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース制御プログラム、データベース制御装置、およびデータベース制御方法に関する。
【背景技術】
【０００２】
従来、データベース（ＤＢ：ＤａｔａＢａｓｅ）に対する検索処理を実行した実行結果に基づいて生成されるデータ群をデータベースに格納することを示す命令がある。関連する先行技術として、例えば、トランザクションがファイル上のＤＢへのレコード追加指示を含む時トランザクションごとに設けるバッファにレコードを追加し、トランザクションの正常終了指示によりバッファ内のレコードをＤＢに追加するものがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平２−１３８６４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術において、ＤＢに対する検索処理を実行した実行結果に基づいて生成されるデータ群をＤＢに格納する格納処理に時間がかかる場合がある。例えば、複数のプロセッサの各プロセッサが格納処理を並列に実行する場合に、複数のプロセッサのそれぞれが独立してＤＢに格納しようとすると、あるプロセッサがデータをＤＢに格納している間は、整合性を保つために排他制御を行うため、他のプロセッサは待機することになり、格納処理が遅延することになる。
【０００５】
１つの側面では、本発明は、ＤＢに対する検索処理を実行した実行結果に基づいて生成されるデータ群をＤＢに格納する格納処理の高速化を図るデータベース制御プログラム、データベース制御装置、およびデータベース制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様によれば、コンピュータが、ＤＢに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されるデータ群のそれぞれを、ＤＢにアクセス可能な複数のプロセッサのいずれかに割り当て、複数のプロセッサのうちのデータ群のそれぞれを割り当てた割当先プロセッサに、割当先プロセッサに割り当てたデータをＤＢに格納する格納処理をトランザクションに含まれる処理として実行する要求を送信するデータベース制御プログラム、データベース制御装置、およびデータベース制御方法が提案される。
【０００７】
本発明の他の態様によれば、ＤＢにアクセス可能な複数のプロセッサに含まれるプロセッサが、ＤＢに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されるデータ群のいずれかのデータがプロセッサに割り当てられたことに応じて、データを取得し、取得したデータを前記データベースに格納する格納処理を、トランザクションに含まれる処理として実行するデータベース制御プログラム、データベース制御装置、およびデータベース制御方法が提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、ＤＢに対する検索処理の実行結果に基づいて生成されるデータ群をＤＢに格納する格納処理の高速化を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態にかかるデータベース制御方法の動作例を示す説明図である。
【図２】図２は、ＤＢ管理システム２００の構成例を示す説明図である。
【図３】図３は、データベース制御装置１０１のハードウェア構成例を示す説明図である。
【図４】図４は、データベース制御装置１０１の機能構成例を示す説明図である。
【図５】図５は、リーダ実行体ｌｄとメンバ実行体ｍｍとの動作例の一例を示す説明図（その１）である。
【図６】図６は、リーダ実行体ｌｄとメンバ実行体ｍｍとの動作例の一例を示す説明図（その２）である。
【図７】図７は、同一のトランザクションにおける格納の詳細例を示す説明図である。
【図８】図８は、異なるトランザクションにおける格納の詳細例を示す説明図である。
【図９】図９は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文受付時処理手順の一例を示すフローチャート（その１）である。
【図１０】図１０は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文受付時処理手順の一例を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、開示のデータベース制御プログラム、データベース制御装置、およびデータベース制御方法の実施の形態を詳細に説明する。
【００１１】
図１は、本実施の形態にかかるデータベース制御方法の動作例を示す説明図である。図１に示すデータベース制御装置１０１は、ＤＢ１０２を制御するコンピュータである。データベース制御装置１０１は、例えば、ＤＢ１０２を有するＤＢサーバでもよいし、ＤＢ１０２を有するコンピュータにアクセス可能なコンピュータでもよい。
【００１２】
ＤＢ１０２は、一定の形式で作成、管理されたデータの集合である。例えば、ＤＢ１０２は、データベース制御装置１０１にアクセスするユーザの顧客データや売上データ等を、一定の形式で管理する。そして、データベース制御装置１０１は、ユーザが操作する端末からの命令に応じて、ＤＢ１０２に対する検索処理を実行したり、ＤＢ１０２に対する格納処理を実行したりする。
【００１３】
また、ＤＢ１０２は、複数の記憶領域に分割されることがある。分割された記憶領域は、「パーティション」と呼ばれる。パーティションに分割することにより、ＤＢ１０２の性能や管理のし易さを向上させることができる。例えば、ＤＢ１０２の管理者は、データの集合を垂直方向のカラムと水平方向のレコードとで表したテーブルを、１つのパーティションに記憶するようにＤＢ１０２を設計してもよい。または、ＤＢ１０２の管理者は、１つのテーブルに含まれる各レコードを、レコードキーの値で分類し、分類した各グループをそれぞれ別のパーティションに記憶するようにＤＢ１０２を設計してもよい。図１の例では、ＤＢ１０２は、パーティションｐｔ１、ｐｔ２に分割されている。
【００１４】
ここで、ユーザが操作する端末からの命令は、データの操作や定義を行う問い合わせ言語の仕様に従ったデータである。問い合わせ言語としては、例えば、ＳＱＬが挙げられる。以下の記載では、ユーザが操作する端末からの命令を、ＳＱＬとして説明する。例えば、検索処理を行うＳＱＬは、ＳＥＬＥＣＴ句から始まる構文となっており、ＳＥＬＥＣＴ文と呼ばれる。また、格納処理を行うＳＱＬは、ＩＮＳＥＲＴ句から始まる構文となっており、ＩＮＳＥＲＴ文と呼ばれる。
【００１５】
ＳＱＬの仕様の中には、ＤＢ１０２に対する検索処理を実行した実行結果に基づいて生成されるデータ群をＤＢ１０２に格納することを示す構文がある。この構文に従ったＳＱＬを実行することにより、ＤＢ１０２に格納されたデータを加工したデータを、ＤＢ１０２に格納することができる。このＳＱＬは、ＩＮＳＥＲＴ句から始まり、途中でＳＥＬＥＣＴ句が含まれる構文となっており、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文と呼ばれる。
【００１６】
ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文を行うと、データベース制御装置１０１は、ＳＥＬＥＣＴ句以降のＦＲＯＭ句で指定されたテーブルからＷＨＥＲＥ句で指定された条件に従ってレコードを検索する。そして、データベース制御装置１０１は、条件を満たしたレコード群に基づいて、ＳＥＬＥＣＴ句で指定された検索元のテーブルの列名や、算術演算子、グループ関数等の指定によって新たなレコード群を生成する。そして、データベース制御装置１０１は、生成されたレコード群を、ＩＮＳＥＲＴ句で指定されたテーブルに格納する。
【００１７】
しかしながら、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文に従った処理を行う場合、生成されたレコード群をＤＢ１０２に格納する格納処理に時間がかかる場合がある。具体的には、ＳＥＬＥＣＴ句によって生成されるレコード群を、１レコードずつパーティションに格納することになるため、生成されるレコード群が多くなると、格納処理にかかる時間が増大することになる。そこで、例えば、複数のプロセッサの各プロセッサが格納処理を並列に実行することにより、格納処理の高速化を図ることが考えられる。しかしながら、複数のプロセッサのそれぞれが独立してあるパーティションに格納しようとすると、あるプロセッサがデータをあるパーティションに格納している間は、整合性を保つために排他制御を行う。従って、他のプロセッサはロックを獲得できるまで待機することになり、格納処理が遅延することになる。
【００１８】
そこで、本実施の形態では、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文について、ＳＥＬＥＣＴ句の処理と同一トランザクションとして各コアがＩＮＳＥＲＴ句を実行する方法について説明する。
【００１９】
図１を用いてデータベース制御装置１０１の動作例について説明する。データベース制御装置１０１は、複数のプロセッサとして、１つのプロセッサ・パッケージ内に複数のプロセッサコアを有する。または、データベース制御装置１０１は、複数のプロセッサコアの代わりに、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を有してもよい。以下の記載では、プロセッサコアを、「コア」と称する。
【００２０】
図１の（１）で示すように、データベース制御装置１０１に含まれる複数のコアのうちのいずれかのコアとして、コア＃０は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文１１１を受け付ける。例えば、コア＃０は、クライアント端末、Ｗｅｂサーバ等からＩＮＳＥＲＴ  ＳＥＬＥＣＴ文１１１を受け付ける。または、コア＃０は、ストアドプロシージャを実行することにより、実行するストアドプロシージャに含まれるＩＮＳＥＲＴ  ＳＥＬＥＣＴ文１１１を取得してもよい。ここで、ストアドプロシージャは、ＤＢ１０２に対する一連の処理手続きを１つのプログラムとして、ＤＢ１０２に保存されたプログラムである。
【００２１】
そして、図１の（２）で示すように、コア＃０は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文１１１のＳＥＬＥＣＴ句に従って検索処理１１２を実行し、検索処理１１２を実行した実行結果に基づいてレコード群ｒｄ１、ｒｄ２を生成する。また、コア＃０は、検索処理１１２を自身で行わず、他のコアが検索処理を実行した実行結果を他のコアから取得して、取得した実行結果に基づいてレコード群ｒｄ１、ｒｄ２を生成してもよい。または、コア＃０は、検索処理１１２および実行結果からのレコード群の生成を自身で行わず、他のコアが生成したレコード群ｒｄ１、ｒｄ２を取得してもよい。
【００２２】
次に、図１の（３）で示すように、コア＃０は、レコード群ｒｄ１、ｒｄ２のそれぞれを、複数のコアのいずれかに割り当てる。図１の例では、コア＃０は、レコードｒｄ１をコア＃１に割り当てるとともに、レコードｒｄ２をコア＃２に割り当てる。また、コア＃０は、自身にレコードを割り当ててもよい。
【００２３】
そして、図１の（４）で示すように、コア＃０は、レコード群ｒｄを割り当てる割当先コアとなるコア＃１、＃２に、割当先コアに割り当てたレコードをＤＢ１０２に格納する格納処理１１３を実行する要求を送信する。ここで、コア＃０は、検索処理１１２を同一のトランザクションに含まれる処理として実行するようにコア＃１、＃２に要求する。トランザクションとは、複数の処理を、一体不可分の処理として扱う方式のことである。図１では、同一のトランザクションとして扱う処理群を、破線で囲ってある。
【００２４】
要求を受信したコア＃１、＃２は、図１の（５）で示すように、受信した要求に従って、格納処理１１３を、検索処理１１２と同一のトランザクションに含まれる処理として実行する。図１の例では、コア＃１は、格納処理１１３として、レコードｒｄ１をパーティションｐｔ１に格納する。また、コア＃２は、格納処理１１３として、レコードｒｄ２をパーティションｐｔ１に格納する。ここで、コア＃１で実行する格納処理１１３と、コア＃２で実行する格納処理１１３とは、同一のトランザクションであるため、２つの格納処理１１３でデッドロックや排他待ちを発生させることがない。従って、データベース制御装置１０１は、並列処理による高速化を得ることができる。次に、データベース制御装置１０１をＤＢ管理システムのＤＢサーバとして適用した例を、図２を用いて説明する。
【００２５】
図２は、ＤＢ管理システム２００の構成例を示す説明図である。ＤＢ管理システム２００は、データベース制御装置１０１と、クライアント端末２０１とを含む。ＤＢ管理システム２００は、ＤＢを管理し、ＤＢに対するアクセスに応答するシステムである。データベース制御装置１０１と、クライアント端末２０１とは、ネットワーク２０２により接続される。
【００２６】
データベース制御装置１０１は、ＤＢ管理システム２００を管理するコンピュータである。クライアント端末２０１は、データベース制御装置１０１にアクセスするコンピュータである。また、ＤＢ管理システム２００は、図２で示した構成に限らない。例えば、ＤＢ管理システム２００は、Ｗｅｂサーバを有し、データベース制御装置１０１は、ＷｅｂサーバからＤＢに対するアクセスを受け付けてもよい。
【００２７】
（データベース制御装置１０１のハードウェア構成）
図３は、データベース制御装置１０１のハードウェア構成例を示す説明図である。図３において、データベース制御装置１０１は、ＣＰＵ３０１と、ＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、を含む。また、データベース制御装置１０１は、ディスクドライブ３０４およびディスク３０５と、通信インターフェース３０６と、を含む。また、ＣＰＵ３０１〜ディスクドライブ３０４、通信インターフェース３０６はバス３０７によってそれぞれ接続される。ここで、ディスク３０５が、図１で示したＤＢ１０２に相当する。また、データベース制御装置１０１は、通信インターフェース３０６を経由して、外部の装置となるＤＢ１０２に接続してもよい。
【００２８】
ＣＰＵ３０１は、データベース制御装置１０１の全体の制御を司る演算処理装置である。そして、ＣＰＵ３０１は、複数のコアを有する。
【００２９】
ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される揮発性メモリである。
【００３０】
ディスクドライブ３０４は、ＣＰＵ３０１の制御に従ってディスク３０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ３０４には、例えば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク３０５は、ディスクドライブ３０４の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ３０４が磁気ディスクドライブである場合、ディスク３０５には、磁気ディスクを採用することができる。また、ディスクドライブ３０４が光ディスクドライブである場合、ディスク３０５には、光ディスクを採用することができる。また、ディスクドライブ３０４がソリッドステートドライブである場合、ディスク３０５には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
【００３１】
通信インターフェース３０６は、ネットワーク２０３と内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース３０６は、通信回線を通じてネットワーク２０３を介して他の装置に接続される。通信インターフェース３０６には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００３２】
また、ＤＢ管理システム２００の管理者が、データベース制御装置１０１を直接操作する場合、データベース制御装置１０１は、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。また、図示していないが、クライアント端末２０１も、データベース制御装置１０１が有するハードウェアと、ディスプレイ、キーボード、マウスといったハードウェアとを有する。
【００３３】
（データベース制御装置１０１の機能構成例）
図４は、データベース制御装置１０１の機能構成例を示す説明図である。データベース制御装置１０１は、検索処理実行部４０１と、割当部４０２と、送信部４０３と、取得部４０４と、格納処理実行部４０５とを含む。制御部となる検索処理実行部４０１〜格納処理実行部４０５は、記憶装置に記憶されたプログラムをＣＰＵ３０１の各コアが実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、ディスク３０５などである。また、各部の処理結果は、ＣＰＵ３０１の各コアのレジスタや、ＣＰＵ３０１各コアのキャッシュメモリ、ＲＡＭ３０３等に格納される。
【００３４】
また、検索処理実行部４０１〜送信部４０３は、リーダ実行体ｌｄに含まれる。これに対し、取得部４０４、格納処理実行部４０５は、メンバ実行体ｍｍに含まれる。リーダ実行体ｌｄは、ＳＥＬＥＣＴ句の指定による検索処理を行い、パーティションに格納するレコードを分配する。また、メンバ実行体ｍｍは、分配されたレコードをパーティションに格納する。検索処理実行部４０１〜格納処理実行部４０５は、データベース制御装置１０１の各コアが有しており、どのコアがリーダ実行体ｌｄを実行してもよいし、どのコアがメンバ実行体ｍｍを実行してもよい。また、リーダ実行体ｌｄを実行するコアが、メンバ実行体ｍｍを実行してもよい。図４の例では、コア＃０がリーダ実行体ｌｄを実行し、コア＃１、＃２がメンバ実行体ｍｍを実行する例を示す。
【００３５】
検索処理実行部４０１は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文１１１を受け付けたことに応じて、ＳＥＬＥＣＴ句に対応する検索処理１１２をトランザクションに含まれる処理として実行する。または、検索処理実行部４０１は、ＤＢ１０２に記憶されたストアドプロシージャが実行されたことにより、ストアドプロシージャに含まれるＩＮＳＥＲＴ  ＳＥＬＥＣＴ文を取得した際に、検索処理１１２をトランザクションに含まれる処理として実行してもよい。
【００３６】
割当部４０２は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文１１１内のＳＥＬＥＣＴ句の実行結果となるレコード群のそれぞれを、複数のコアのいずれかに割り当てる。具体的には、割当部４０２は、割当先コアに対応するバッファを確保し、バッファにレコードを分散して格納していくことにより、レコード群のそれぞれを、複数のコアのいずれかに割り当てる。図４の例では、割当部４０２は、コア＃１に割り当てるレコードをバッファｂ１に格納し、コア＃２に割り当てるレコードを、バッファｂ２に格納する。
【００３７】
また、割当部４０２は、パーティションの数と複数のコアの数とのうちの少ない数分のコアに、データ群をそれぞれ分散して割り当ててもよい。
【００３８】
送信部４０３は、複数のコアのうちのレコード群のそれぞれを割り当てた割当先コアに、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文１１１内のＩＮＳＥＲＴ句に対応する格納処理１１３を、検索処理１１２のトランザクションに含まれる処理として実行する要求を送信する。
【００３９】
取得部４０４は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文１１１内のＳＥＬＥＣＴ句の実行結果となるレコード群のそれぞれが複数のコアのいずれかに割り当てられたことに応じて、各コアに割り当てられたレコードを取得する。具体的には、取得部４０４は、各コアに対応するバッファから、各コアに割り当てられたレコードを取得する。図４の例では、コア＃１の取得部４０４は、バッファｂ１からレコードを取得し、コア＃２の取得部４０４は、バッファｂ２からレコードを取得する。
【００４０】
格納処理実行部４０５は、格納処理１１３を、検索処理１１２のトランザクションに含まれる処理として実行する。図４の例では、コア＃１の格納処理実行部４０５は、格納処理１１３として、取得したレコードをパーティションｐｔ１に格納したり、パーティションｐｔ２に格納したりする。取得したレコードをどのパーティションに格納するかについての一例は、図６で説明する。
【００４１】
次に、リーダ実行体ｌｄとメンバ実行体ｍｍとの動作例を、図５、図６を用いて説明する。
【００４２】
図５は、リーダ実行体ｌｄとメンバ実行体ｍｍとの動作例の一例を示す説明図（その１）である。また、図６は、リーダ実行体ｌｄとメンバ実行体ｍｍとの動作例の一例を示す説明図（その２）である。図５、図６では、パーティションの数が３であり、ＣＰＵ３０１のコアの数が３以上あるものとし、メンバ実行体ｍｍを３つ生成するものとする。
【００４３】
図５、図６では、図５で示すＳＱＬ１をデータベース制御装置１０１がクライアント端末２０１から受け付けたとする。ＳＱＬ１の内容は、「ＩＮＳＥＲＴ  ＩＮＴＯ  Ｔ４  〜  ＳＥＬＥＣＴ  〜  ＦＲＯＭ  （ＳＥＬＥＣＴ  〜  ＦＲＯＭ  Ｔ１，Ｔ２）  Ａ  ＬＥＦＴ  ＯＵＴＥＲ  ＪＯＩＮ  〜  Ｔ３  〜」である。ここで、ＳＱＬ１は、テーブルＴ１、Ｔ２に対して図５のＳＥＬＥＣＴ句５０２を行った結果を軸にして、テーブルＴ３を外部結合し、結合して得られたデータに対してＳＥＬＥＣＴ句５０１を行った結果を、テーブルＴ４に格納することを示すＳＱＬである。
【００４４】
リーダ実行体ｌｄは、図５に示す（ｌｄ−１）のＳＥＬＥＣＴの処理として、テーブルＴ１のデータを記憶するパーティションｐｔ１＿１、１＿２、１＿３からスキャンして、条件に一致するレコードを生成する。このとき、リーダ実行体ｌｄは、パーティションｐｔ１＿１、１＿２、１＿３から並列にスキャンする。リーダ実行体ｌｄは、生成したデータを、ソートし、ソート結果ｓｔ１に格納する。リーダ実行体ｌｄは、図５に示す（ｌｄ−２）のＳＥＬＥＣＴの処理についても図５に示す（ｌｄ−１）のＳＥＬＥＣＴの処理と同様に処理を行い、実行結果を、ソート結果ｓｔ２に格納する。
【００４５】
次に、リーダ実行体ｌｄは、図５に示す（ｌｄ−３）の処理として、Ｔ１の結果とＴ２の結果とをＪＯＩＮする。リーダ実行体ｌｄは、ＪＯＩＮした結果を、ソート結果ｓｔ３に格納する。そして、リーダ実行体ｌｄは、図５に示す（ｌｄ−４）のＳＥＬＥＣＴの処理についても図５に示す（ｌｄ−１）のＳＥＬＥＣＴの処理と同様に処理を行い、実行結果を、ソート結果ｓｔ４に格納する。
【００４６】
そして、リーダ実行体ｌｄは、図５に示す（ｌｄ−５）の処理として、（ｌｄ−３）、（ｌｄ−４）の実行結果をＪＯＩＮしながら、Ｔ４に並列にＩＮＳＥＲＴを行う。具体的には、リーダ実行体ｌｄは、ＪＯＩＮしたレコードを、作業域ｗａ＿ｌｄに格納する。格納後の処理は、図６で示す。
【００４７】
図６において、リーダ実行体ｌｄは、３つのメンバ実行体ｍｍ１、ｍｍ２、ｍｍ３用のバッファｂ１、ｂ２、ｂ３に、作業域ｗａ＿ｌｄに格納されたレコードを蓄積し、メンバ実行体ｍｍ１〜３からの要求を待ち受ける。バッファｂ１、ｂ２、ｂ３は、リーダ実行体ｌｄによって、メンバ実行体ｍｍの数分用意されたものである。
【００４８】
具体的には、リーダ実行体ｌｄは、まず、バッファｂ１にレコードを蓄積する。そして、リーダ実行体ｌｄは、バッファｂ１に空き領域がなくなったら、バッファｂ２にレコードを蓄積する。さらに、リーダ実行体ｌｄは、バッファｂ２に空き領域がなくなったら、バッファｂ３にレコードを蓄積し、バッファｂ３に空き領域がなくなったら、バッファｂ１にレコードを蓄積する。リーダ実行体ｌｄは、これらの処理を、作業域ｗａ＿ｌｄに格納されたレコードがなくなるまで繰り返す。図６の例では、リーダ実行体ｌｄは、バッファｂ１にレコードｒｄ１、２を格納し、バッファｂ２にレコードｒｄ３、４を格納し、バッファｂ３にレコードｒｄ５、６を格納する。
【００４９】
次に、各メンバ実行体ｍｍの動作を説明する。メンバ実行体ｍｍ１〜ｍｍ３の動作は同一であるため、メンバ実行体ｍｍ１の動作を用いて説明する。メンバ実行体ｍｍ１は、図６に示す（ｍｍ−１）の処理として、リーダ実行体ｌｄに対してレコードが蓄積されたバッファを要求し、図６の例では、バッファｂ１からレコードを取得する。レコードの取得が終わると、メンバ実行体ｍｍ１は、リーダ実行体ｌｄに対して、バッファｂ１の解放を通知する。メンバ実行体ｍｍ１は、取得したレコードを、作業域ｗａ＿ｍｍ１に格納する。図６の例では、メンバ実行体ｍｍ１は、バッファｂ１から取得したレコードｒｄ１、２を、作業域ｗａ＿ｍｍ１に格納する。
【００５０】
そして、メンバ実行体ｍｍ１は、図６に示す（ｍｍ−２）の処理として、作業域ｗａ＿ｍｍ１に格納したレコードを、テーブルＴ４のデータを記憶するパーティションｐｔ４＿１、４＿２、４＿３のいずれかに格納する。例えば、メンバ実行体ｍｍ１は、レコードｒｄ１をパーティションｐｔ４＿１に格納するとともに、レコードｒｄ２をパーティションｐｔ４＿２に格納する。
【００５１】
ここで、どのパーティションに格納するかについて、各パーティションは、格納するレコードのキーに基づいて、記憶するレコードを分散させている。例えば、パーティションｐｔ４＿１はキーの値が「１」から「３」までのレコードを記憶し、パーティションｐｔ４＿２はキーの値が「４」から「６」までのレコードを記憶し、パーティションｐｔ４＿３はキーの値が「７」から「９」までのレコードを記憶する。メンバ実行体ｍｍ１は、格納しようとするキーの値を参照して、パーティションｐｔ４＿１、４＿２、４＿３の中から格納先のパーティションを決定する。
【００５２】
次に、本実施の形態におけるパーティションにおける格納例について、図７を用いて説明する。
【００５３】
図７は、同一のトランザクションにおける格納の詳細例を示す説明図である。複数のメンバ実行体ｍｍは、リーダ実行体ｌｄと同一のトランザクションとして動作させることで、複数のメンバ実行体ｍｍが、平行にレコードを格納しても、メンバ実行体ｍｍの間でデッドロックや排他待ちになることが抑制される。
【００５４】
例えば、図７で示すように、メンバ実行体ｍｍ１は、図７に示す（１）、（３）、（５）の処理として、それぞれ、ページｐｇ１、ｐｇ３、ｐｇ２にレコードｒｄ１、ｒｄ３、ｒｄ５を格納する。また、メンバ実行体ｍｍ２は、図７に示す（２）、（４）の処理として、それぞれ、ページｐｇ２、ｐｇ１にレコードｒｄ２、ｒｄ４を格納する。ここで、メンバ実行体ｍｍ１、２は、同一のトランザクションに含まれるため、排他制御を行わず、同一ページに並列に格納することができる。
【００５５】
また、メンバ実行体ｍｍ１、２が同一のトランザクションに含まれるため、ＤＢへの操作履歴を記憶するログファイルｌｇにも、１つのトランザクションとして記憶される。図７の例では、ログファイルｌｇには、ログ情報ｌｇ１〜ｌｇ５が記憶されている。例えば、ログ情報ｌｇ１は、レコードｒｄ１をページｐｇ１に格納したことを示す。そして、ログ情報ｌｇ１〜ｌｇ５は、１つのトランザクションとして記憶される。データベース制御装置１０１は、ロールバックする際も並列に格納しない場合と同じように、ログファイルｌｇを参照して、１つのトランザクションをロールバックするだけでよい。
【００５６】
次に、仮に、異なるトランザクションで格納を行う場合の例について、図８を用いて説明する。
【００５７】
図８は、異なるトランザクションにおける格納の詳細例を示す説明図である。図８では、データベース制御装置に含まれるメンバ実行体ｍｍ１、ｍｍ２を、リーダ実行体ｌｄのトランザクションとは別のトランザクションとして動作させたものであるとする。この場合、ページ排他を行うと、メンバ実行体ｍｍの間で排他を取り合うことになり、デッドロック状態が発生する場合がある。また、メンバ実行体ｍｍごとの複数のトランザクションを１つにまとめることになる。
【００５８】
例えば、図８で示すように、メンバ実行体ｍｍ１は、図８に示す（１）、（３）、（５）の処理として、それぞれ、ページｐｇ１、ｐｇ３、ｐｇ２にレコードｒｄ１、ｒｄ３、ｒｄ５を格納する。また、メンバ実行体ｍｍ２は、図８に示す（２）、（４）の処理として、それぞれ、ページｐｇ２、ｐｇ１にレコードｒｄ４、ｒｄ２を格納しようとする。しかしながら、メンバ実行体ｍｍ１、２がそれぞれ別のトランザクションに含まれるため、メンバ実行体ｍｍ２は、メンバ実行体ｍｍ１がレコードｒｄ１、ｒｄ３、ｒｄ５を格納したページｐｇ１〜３にレコードｒｄ２、ｒｄ４を格納することができない。
【００５９】
また、メンバ実行体ｍｍ１、２がそれぞれ異なるトランザクションに含まれるため、ログファイルｌｇにも、メンバ実行体ｍｍ１、２が行った結果を示すログ情報ｌｇ１〜ｌｇ５が、異なるトランザクションとして記憶される。例えば、図８の例では、ログ情報ｌｇ１、ｌｇ３、ｌｇ５と、ログ情報ｌｇ２、ｌｇ４とが異なるトランザクションとして記憶される。従って、メンバ実行体ｍｍ間の関連性が不明となる。また、コミットログもトランザクションごとに別々に出力される。従って、この場合、データベース制御装置は、トランザクションを１つにまとめる処理を行うことになる。
【００６０】
次に、図５〜図７で説明したＩＮＳＥＲＴ  ＳＥＬＥＣＴ文を受け付けた際に行う処理を示すフローチャートを、図９、図１０を用いて説明する。
【００６１】
図９は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文受付時処理手順の一例を示すフローチャート（その１）である。また、図１０は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文受付時処理手順の一例を示すフローチャート（その２）である。ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文処理は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文となるＳＱＬを受け付けた際にデータベース制御装置１０１が実行する処理である。ここで、図１０の説明において、メンバ実行体ｍｍの処理内容は各メンバ実行体ｍｍで同一であるため、メンバ実行体ｍｍ１を用いて説明を行い、他のメンバ実行体ｍｍの動作の説明を省略する。
【００６２】
リーダ実行体ｌｄは、トランザクションを開始する（ステップＳ９０１）。トランザクションを開始した後、リーダ実行体ｌｄは、図５の（ｌｄ−１）〜（ｌｄ−４）で示したＳＥＬＥＣＴ句の処理を開始する。
【００６３】
次に、リーダ実行体ｌｄは、メンバ実行体ｍｍを作成する（ステップＳ９０２）。また、リーダ実行体ｌｄは、作成したメンバ実行体用のバッファｂを獲得する（ステップＳ９０３）。次に、リーダ実行体ｌｄは、パーティション数またはＣＰＵ３０１のコア数の少ない数分メンバ実行体ｍｍを作成したか否かを判断する（ステップＳ９０４）。パーティション数またはＣＰＵ３０１のコア数の少ない数分メンバ実行体ｍｍを作成していない場合（ステップＳ９０４：Ｎｏ）、リーダ実行体ｌｄは、ステップＳ９０２の処理に移行する。
【００６４】
一方、パーティション数またはＣＰＵ３０１のコア数の少ない数分メンバ実行体ｍｍを作成した場合（ステップＳ９０４：Ｙｅｓ）、リーダ実行体ｌｄは、図５の（ｌｄ−１）の実行結果として作業域ｗａ＿ｌｄに格納されたレコードを、メンバ実行体用のバッファｂに蓄積する（ステップＳ１００１）。次に、リーダ実行体ｌｄは、各メンバ実行体ｍｍに処理要求を送信する（ステップＳ１００２）。
【００６５】
メンバ実行体ｍｍ１は、リーダ実行体ｌｄからの通知を待ち受ける（ステップＳ１００３）。次に、メンバ実行体ｍｍ１は、リーダ実行体ｌｄからの通知内容を確認する（ステップＳ１００４）。リーダ実行体ｌｄからの通知内容として処理終了を受信した場合（ステップＳ１００４：処理終了）、メンバ実行体ｍｍ１は、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文受付時処理を終了する。
【００６６】
リーダ実行体ｌｄからの通知内容として処理要求を受信した場合（ステップＳ１００４：処理要求）、メンバ実行体ｍｍ１は、メンバ実行体用のバッファｂ１から、レコードを取得する（ステップＳ１００５）。次に、メンバ実行体ｍｍ１は、取得したレコードを、該当するパーティションに格納する（ステップＳ１００６）。そして、メンバ実行体ｍｍ１は、メンバ実行体のバッファｂ１にレコードがあるか否かを判断する（ステップＳ１００７）。メンバ実行体のバッファｂ１にレコードがある場合（ステップＳ１００７：Ｙｅｓ）、メンバ実行体ｍｍ１は、ステップＳ１００５の処理に移行する。
【００６７】
一方、メンバ実行体のバッファにレコードがない場合（ステップＳ１００７：Ｎｏ）、メンバ実行体ｍｍ１は、リーダ実行体に処理完了を通知する（ステップＳ１００８）。そして、メンバ実行体ｍｍ１は、ステップＳ１００３の処理に移行する。
【００６８】
処理完了を受信したリーダ実行体ｌｄは、作業域ｗａ＿ｌｄにレコードがあるか否かを判断する（ステップＳ１００９）。作業域ｗａ＿ｌｄにレコードがある場合（ステップＳ１００９：Ｙｅｓ）、リーダ実行体ｌｄは、ステップＳ１００１の処理に移行する。一方、作業域ｗａ＿ｌｄにレコードがない場合（ステップＳ１００９：Ｎｏ）、リーダ実行体ｌｄは、トランザクションを終了する（ステップＳ１０１０）。次に、リーダ実行体ｌｄは、全メンバ実行体に処理終了を通知する（ステップＳ１０１１）。そして、リーダ実行体ｌｄは、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文受付時処理を終了する。
【００６９】
ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文受付時処理を実行することにより、データベース制御装置１０１は、各メンバ実行体ｍｍを、同一トランザクションに含めて実行することができるので、排他による待ち等を抑制して効率的に格納処理を行うことができる。
【００７０】
以上説明したように、ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文について、リーダ実行体ｌｄは、ＳＥＬＥＣＴ句の処理と同一トランザクションとしてメンバ実行体ｍｍにＩＮＳＥＲＴ句を実行させる。これにより、メンバ実行体ｍｍは、同一のトランザクションなので排他が発生せず、並列実行による高速化を得ることができる。
【００７１】
また、リーダ実行体ｌｄは、パーティションの数と複数のコアの数とのうちの少ない数分のコアに、データ群をそれぞれ分散して割り当ててもよい。これにより、データベース制御装置１０１は、並列可能な最大数でＩＮＳＥＲＴ  ＳＥＬＥＣＴ文を実行することができる。
【００７２】
また、リーダ実行体ｌｄは、いずれかのコアがＩＮＳＥＲＴ  ＳＥＬＥＣＴ文を受け付けたことに応じて、ＳＥＬＥＣＴ句に対応する検索処理を、ＩＮＳＥＲＴ句に対応する格納処理と同一のトランザクションに含まれる処理として実行してもよい。このように動作させることにより、データベース制御装置１０１は、ＳＥＬＥＣＴ句に対応する検索処理と、ＩＮＳＥＲＴ句に対応する格納処理とが同一のトランザクションとなることを担保することができる。
【００７３】
また、リーダ実行体ｌｄを、複数のコアのうちのどのコアが行ってもよい。例えば、データベース制御装置１０１は、複数のコアのうちの負荷が最も少ないコアがリーダ実行体ｌｄを実行してもよい。これにより、データベース制御装置１０１は、例えば、負荷が少ないコアがリーダ実行体ｌｄを実行することにより、負荷分散を図ることができる。
【００７４】
また、メンバ実行体ｍｍは、複数のコアの各コアに、ＩＮＳＥＲＴ句に対応する格納処理を、ＳＥＬＥＣＴ句に対応する検索処理と同一のトランザクションとして実行させてもよい。これにより、メンバ実行体ｍｍではデッドロックや排他待ちを発生することがないため、データベース制御装置１０１は、高速化を図ることができる。
【００７５】
なお、本実施の形態で説明したデータベース制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本データベース制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本データベース制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【００７６】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００７７】
（付記１）コンピュータに、
データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されるデータ群のそれぞれを、前記データベースにアクセス可能な複数のプロセッサのいずれかに割り当て、
前記複数のプロセッサのうちの前記データ群のそれぞれを割り当てた割当先プロセッサに、前記割当先プロセッサに割り当てたデータを前記データベースに格納する格納処理を前記トランザクションに含まれる処理として実行する要求を送信する、
処理を実行させることを特徴とするデータベース制御プログラム。
【００７８】
（付記２）前記データベースは、複数の記憶領域に分割されており、
前記割り当てる処理は、
前記複数の記憶領域の数と前記複数のプロセッサの数とのうちの少ない数分のプロセッサに、前記データ群をそれぞれ分散して割り当てる、
ことを特徴とする付記１に記載のデータベース制御プログラム。
【００７９】
（付記３）前記複数のプロセッサのいずれかのプロセッサに、前記割り当てる処理と前記送信する処理とを実行させることを特徴とする付記１または２に記載のデータベース制御プログラム。
【００８０】
（付記４）前記いずれかのプロセッサに、
前記データベースに対する検索処理の実行結果に基づいて生成されるデータ群を前記データベースに格納することを示す命令を受け付けたことに応じて、前記検索処理を前記トランザクションに含まれる処理として実行する、処理を実行させ、
前記割り当てる処理は、
実行した前記検索処理の実行結果に基づいて生成されたデータ群のそれぞれを、前記複数のプロセッサのいずれかに割り当てる、
ことを特徴とする付記３に記載のデータベース制御プログラム。
【００８１】
（付記５）データベースにアクセス可能な複数のプロセッサに含まれるプロセッサに、
前記データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されるデータ群のいずれかのデータが前記プロセッサに割り当てられたことに応じて、前記データを取得し、
取得した前記データを前記データベースに格納する格納処理を、前記トランザクションに含まれる処理として実行する、
処理を実行させることを特徴とするデータベース制御プログラム。
【００８２】
（付記６）データベースにアクセス可能な複数のプロセッサを有するデータベース制御装置であって、
前記データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されたデータ群のそれぞれを、前記複数のプロセッサのいずれかに割り当て、
前記複数のプロセッサのうちの前記データ群のそれぞれを割り当てた割当先プロセッサに、前記割当先プロセッサに割り当てたデータを前記データベースに格納する格納処理を前記トランザクションに含まれる処理として実行する要求を送信する、
制御部を特徴とするデータベース制御装置。
【００８３】
（付記７）データベースにアクセス可能な複数のプロセッサを有するデータベース制御装置であって、
前記複数のプロセッサに含まれるプロセッサは、
前記データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されたデータ群のいずれかのデータが前記プロセッサに割り当てられたことに応じて、前記データを取得し、
取得した前記データを前記データベースに格納する格納処理を、前記トランザクションに含まれる処理として実行する、
ことを特徴とするデータベース制御装置。
【００８４】
（付記８）データベースにアクセス可能な複数のプロセッサを有するデータベース制御装置であって、
前記複数のプロセッサのいずれかのプロセッサは、
前記データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されたデータ群のそれぞれを、前記複数のプロセッサのいずれかに割り当て、
前記複数のプロセッサのうちの前記データ群のそれぞれを割り当てた割当先プロセッサに、前記割当先プロセッサに割り当てたデータを前記データベースに格納する格納処理を前記トランザクションに含まれる処理として実行する要求を送信し、
前記複数のプロセッサに含まれるプロセッサは、
前記要求を前記いずれかのプロセッサから受信したことに応じて、前記プロセッサに割り当てられたデータを取得し、
取得した前記データを前記データベースに格納する格納処理を、前記トランザクションに含まれる処理として実行する、
ことを特徴とするデータベース制御装置。
【００８５】
（付記９）コンピュータが、
データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されるデータ群のそれぞれを、データベースにアクセス可能な複数のプロセッサのいずれかに割り当て、
前記複数のプロセッサのうちの前記データ群のそれぞれを割り当てた割当先プロセッサに、前記割当先プロセッサに割り当てたデータを前記データベースに格納する格納処理を前記トランザクションに含まれる処理として実行する要求を送信する、
処理を実行することを特徴とするデータベース制御方法。
【００８６】
（付記１０）データベースにアクセス可能な複数のプロセッサに含まれるプロセッサが、
前記データベースに対する検索処理をトランザクションに含まれる処理として実行した実行結果に基づいて生成されるデータ群のいずれかのデータが前記プロセッサに割り当てられたことに応じて、前記データを取得し、
取得した前記データを前記データベースに格納する格納処理を、前記トランザクションに含まれる処理として実行する、
処理を実行することを特徴とするデータベース制御方法。
【符号の説明】
【００８７】
＃０〜＃２  コア
１０１  データベース制御装置
１０２  ＤＢ
１１１  ＩＮＳＥＲＴ  ＳＥＬＥＣＴ文
４０１  検索処理実行部
４０２  割当部
４０３  送信部
４０４  取得部
４０５  格納処理実行部
【図１】
2017126172.tif 000003
【図２】
2017126172.tif 000004
【図３】
2017126172.tif 000005
【図４】
2017126172.tif 000006
【図５】
2017126172.tif 000007
【図６】
2017126172.tif 000008
【図７】
2017126172.tif 000009
【図８】
2017126172.tif 000010
【図９】
2017126172.tif 000011
【図１０】
2017126172.tif 000012