(57)【特許請求の範囲】
【請求項１】
複数の計算資源にトランザクション処理を振り分ける負荷制御装置であって、
トランザクション処理要求を受信する受信部と、
受信したトランザクションの振分先として、前記トランザクションが処理対象とするデータ領域に基づいて、そのデータ領域に対する処理性能が最も高い振分先を選択し、振分先毎に設けられた送信キューに前記トランザクションを格納する振分制御部と、
前記送信キューに格納されたトランザクションデータを対応する前記振分先に送信する送信部と、
各振分先に対応する前記送信キューに蓄積されているトランザクション量が上限を超えていないか否かを監視する溢れ検知部と、
前記溢れ検知部による監視の結果、前記トランザクション量が上限を超えている場合には、上限を超えて格納されたトランザクションの振分先として、前記トランザクションが処理対象とするデータ領域に基づいて、前記送信キューに蓄積されているトランザクション量が上限を超えていない振分先の中から、そのデータ領域に対する処理性能が最も高い振分先を選択する再振分部と、を備えた負荷制御装置。
【請求項２】
前記振分制御部は、前記データ領域に対する処理性能が最も高く、かつ電力消費量が最小となる振分先を選択することを特徴とする請求項１に記載の負荷制御装置。
【請求項３】
前記振分制御部は、電源がオン状態である振分先の中から、前記データ領域に対する処理性能が最も高い振分先を選択することを特徴とする請求項１に記載の負荷制御装置。
【請求項４】
前記溢れ検知部が各振分先に対応する前記送信キューに蓄積されているトランザクション量を監視するタイミングを決定するタイマーを備え、
前記溢れ検知部は、前記タイミングに従って定期的に前記送信キューに蓄積されているトランザクション量を監視することを特徴とする、請求項１から３のいずれか１項に記載の負荷制御装置。
【請求項５】
複数の計算資源にトランザクション処理を振り分ける負荷制御方法であって、
受信部が、トランザクション処理要求を受信する工程と、
振分制御部が、受信したトランザクションの振分先として、前記トランザクションが処理対象とするデータ領域に基づいて、そのデータ領域に対する処理性能が最も高い振分先を選択し、振分先毎に設けられた送信キューに前記トランザクションを格納する工程と、
送信部が、前記送信キューに格納されたトランザクションデータを対応する前記振分先に送信する工程と、
溢れ検知部が、各振分先に対応する前記送信キューに蓄積されているトランザクション量が上限を超えていないか否かを監視する工程と、
再振分部が、前記監視の結果、前記トランザクション量が上限を超えている場合には、上限を超えて格納されたトランザクションの振分先として、前記トランザクションが処理対象とするデータ領域に基づいて、前記送信キューに蓄積されているトランザクション量が上限を超えていない振分先の中から、そのデータ領域に対する処理性能が最も高い振分先を選択する工程と、を備えた負荷制御方法。
【請求項６】
コンピュータを、
複数の計算資源にトランザクション処理を振り分ける負荷制御装置として機能させるプログラムであって、
トランザクション処理要求を受信する受信部と、
受信したトランザクションの振分先として、前記トランザクションが処理対象とするデータ領域に基づいて、そのデータ領域に対する処理性能が最も高い振分先を選択し、振分先毎に設けられた送信キューに前記トランザクションを格納する振分制御部と、
前記送信キューに格納されたトランザクションデータを対応する前記振分先に送信する送信部と、
各振分先に対応する前記送信キューに蓄積されているトランザクション量が上限を超えていないか否かを監視する溢れ検知部と、
前記溢れ検知部による監視の結果、前記トランザクション量が上限を超えている場合には、上限を超えて格納されたトランザクションの振分先として、前記トランザクションが処理対象とするデータ領域に基づいて、前記送信キューに蓄積されているトランザクション量が上限を超えていない振分先の中から、そのデータ領域に対する処理性能が最も高い振分先を選択する再振分部と、して機能させるプログラム。                                                                        
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、負荷制御装置に関する。
【背景技術】
【０００２】
複数の計算資源から構成されるシステムを用いてトランザクション処理を行う場合、各計算資源間での負荷分散処理が必要となる。
【０００３】
例えば特許文献１には、計算機システムを構成するノードにおいて、タスク又はタスクの実行結果の送受信を行うタスク送受信手段と、前記タスク送受信手段で受信したタスクをキューイングするキューイング手段（「ローカルキューイング手段」という）と、負荷情報を共有する負荷情報共有手段と、前記負荷情報共有手段が提供する他ノードの負荷情報に基づいて、どのタスクをどのノードに移送するかを決定し、前記タスク送受信手段にタスクの移送を依頼する負荷分散手段と、実行を依頼されたタスクを処理し、前記タスクの実行結果を、前記ローカルキューイング手段に返すタスク実行手段と、を含み、前記負荷分散手段は、少なくとも自ノードで実行すべきタスクの量を、動的に計算する均衡度計算手段と、ノードに対して優先度を割り当てるノード優先度割り当て手段と、を含むことが記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４２６５３７７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
業務システムのタスクは様々な粒度のものが存在するが、オンライントランザクション処理であれば、個々の処理の粒度は比較的細かいものになり、個々の処理はターンアラウンドタイムなどのサービスレベル指標により管理することができる。
コスト削減や電力消費量削減の観点からは、刻々と変化する利用可能な計算資源や利用可能な電力を効率よく活用しながらターンアラウンドタイムなどのサービスレベル指標を維持することが望ましいが、そのためには、各々のタスクを適切な計算資源に動的に振り分けるとともに、特定の計算資源に処理が集中して処理溢れが起こるのを防止する必要がある。処理溢れを防止するためには、各計算資源にタスクを送信する前の段階で適正なタスクの量に調整することが望ましいが、特許文献１に記載の方法では計算資源に送信する前の段階での調整は行われていなかった。また、既存のロードバランス手法では、振分ルールが固定的で動的に対応できなかったり、均一な計算資源が前提のために均一でない環境においても最も適切な計算資源を考慮することなく機械的に振り分けたり、ターンアラウンドタイムなどのサービスレベル指標を維持する仕組みがなかったりすることで、刻々と変化する計算資源に追従することが困難で、きめ細かい対応を行うことができないという課題があった。
【０００６】
そこで、本発明の目的は、できるだけ少ない計算資源及び電力消費量で、並列オンライントランザクション処理のターンアラウンドタイムに代表されるサービスレベル指標を維持することである。
【課題を解決するための手段】
【０００７】
本発明に係る負荷制御装置は、複数の計算資源にトランザクション処理を振り分ける負荷制御装置であって、トランザクション処理要求を受信する受信部と、受信したトランザクションの振分先を選択し、振分先毎に設けられた送信キューに前記トランザクションを格納する振分制御部と、前記送信キューに格納されたトランザクションデータを対応する前記振分先に送信する送信部と、各振分先に対応する前記送信キューに蓄積されているトランザクション量が上限を超えていないか否かを監視する溢れ検知部と、前記溢れ検知部による監視の結果、前記トランザクション量が上限を超えている場合には、上限を超えて格納されたトランザクションの振分先の選択を再度行う再振分部と、を備えたものである。
【発明の効果】
【０００８】
本発明によれば、できるだけ少ない計算資源及び電力消費量で、並列トランザクション処理のターンアラウンドタイムに代表されるサービスレベル指標を維持することができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態による負荷制御装置を用いた負荷制御システムの構成を示す図である。
【図２】本発明の実施形態による負荷制御装置の構成を示す図である。
【図３】振分テーブルの内容を示す図である。
【図４】可用テーブルの内容を示す図である。
【図５】上限テーブルの内容を示す図である。
【図６】アフィニティテーブルが保有する内容を示す図である。
【図７】処理装置の構成を示す図である。
【図８】本発明の実施形態による負荷制御装置によるトランザクション振り分け処理のフローチャートである。
【図９】トランザクションの処理量溢れが生じた場合の処理のフローチャートである。
【図１０】電力消費量に基づく振分先の決定方法を説明する図である。
【図１１】即時拡張モデルを説明する図である。
【図１２】処理装置の構成の他の例を示す図である。
【発明を実施するための形態】
【００１０】
次に、本発明を実施するための最良の形態について、図面を参照して詳細に説明する。
図１は、本実施形態による負荷制御装置１０を用いた負荷制御システムの構成を示す図である。図に示すように、負荷制御装置１０は複数の処理装置（計算資源）２０と通信回線を介して接続されている。
【００１１】
本実施形態による負荷制御システムは、オンライントランザクションを１件単位で複数の処理装置２０により並列処理するシステムである。
【００１２】
図２は、本実施形態による負荷制御装置１０の構成を示す図である。図に示すように、負荷制御装置１０は、受信部１０１、振分制御部１０２、送信キュー１０３、送信部１０４、溢れ検知部１０５、再振分部１０６、タイマー１０７、受信部１０８を備えている。受信部１０１、振分制御部１０２、送信部１０４、溢れ検知部１０５、再振分部１０６、タイマー１０７、受信部１０８は、プログラムに従ってコンピュータのプロセッサが行う機能に対応する。送信キュー１０３は、メモリ、ハードディスク等の記憶装置を含むものである。
【００１３】
受信部１０１は、通信回線を介して接続された端末等からのトランザクション処理要求を受信する。
【００１４】
振分制御部１０２は、振分テーブルを参照して受信したトランザクションの適切な振分先を選択し、振分先毎に設けられた送信キュー１０３にトランザクションを格納する。なお、振分先には１つまたは複数のプロセッサコア（計算資源）が含まれる。複数のコアが含まれる場合、各々のコアは１つの処理装置２０に実装されていてもよいし、複数の処理装置２０に分散して実装されていてもよい。
【００１５】
図３は、振分テーブルの内容を示す図である。図に示すように、振分テーブルには、予めデータ領域毎の適切な振分先が記憶されている。データ領域は、データベース２０７に格納されたデータのうち、あるトランザクションが処理対象とするデータの集合に相当する。振分制御部１０２は、受信したトランザクションがどのデータ領域のデータを処理対象としているかに基づいて、振分テーブルから適切な振分先を選択する。上述のように、振分先は１つの処理装置２０に対応してもよいし、複数の処理装置２０に対応してもよい。なお、振分テーブルは、振分先の処理装置２０の電源のオンオフ状態や部分要素の電源オフにより生じる性能低下の程度、あるいは、定期保守などの計画停止や故障などにより生じる性能低下の程度を表す可用テーブルを含む。
【００１６】
図４に可用テーブルの例を示す。可用テーブルは、「要素・振分先対応表」に基づいて作成される。図４に示すように、可用テーブルには、各振分先の死活状態が記憶されている。死活状態は、振分先に含まれる要素の電源オフや故障等により生じる性能低下に基づいて決定される。例えば、各振分先に含まれる要素の利用可能状態が「要素・振分先対応表」に示すような状態である場合、振分先１は、要素１が利用可能（○）で、要素２は利用不可の状態（×）であるため、死活状態は５０パーセントとなる。可用テーブルは、処理装置の最新の状態を反映するため、定期的に見直す必要がある。
【００１７】
送信キュー１０３は、振分先毎に設けられており、各振分先に対して振り分けられたトランザクションのデータが順次格納される。
【００１８】
送信部１０４は、送信キュー１０３に格納されたトランザクションデータを対応する振分先の処理装置２０に送信する。なお、１つの振分先に複数のプロセッサコアが含まれる場合、送信部１０４は、例えば、ラウンドロビンなどの方法により、それぞれのプロセッサコアに均等にトランザクションデータを送信する。
【００１９】
溢れ検知部１０５は、上限テーブルを参照し、各振分先に対応する送信キュー１０３に蓄積されているトランザクション量が上限を超えていないか否かを定期的に監視する。
【００２０】
図５は、上限テーブルの内容を示す図である。図に示すように、上限テーブルには、予め各振分先に対応する送信キュー１０３に蓄積可能なトランザクションの上限値が記憶されている。上限値は、例えば、一定時間あたり処理可能なトランザクション件数とすることができる。
【００２１】
再振分部１０６は、溢れ検知部１０５による監視の結果、送信キュー１０３に蓄積されているトランザクション量が上限を超えている場合には、アフィニティテーブルを参照して再度振分先の選択を行う。なお、再振分先が溢れている場合には、順次、次優先度の候補に振り分ける。振分先の候補がなくなった場合には、エラー処理を実行する。
【００２２】
図６は、アフィニティテーブルが保有する内容を示す図である。図に示すように、アフィニティテーブルには、予め各データ領域のデータを対象とする処理の性能値が振分先毎に記憶されている。性能値は、例えば単位時間あたりのトランザクション処理件数や１件あたりの平均ターンアラウンドタイムとすることができる。
【００２３】
特定のデータ領域に対する処理性能は、当該データを含むデータベース２０７へのアクセスしやすさ等によって決定される。一般に、処理対象とするデータを含むデータベース２０７のデータをキャッシュするキャッシュ制御部２０６と、トランザクション処理を実行する処理部２０５が同じ処理装置２０に実装されている場合が最も処理性能が高く、両者間のアクセス経路に他の制御部等が介在するほど処理性能は低くなる。なお、このアフィニティテーブルにおいて各データ領域に対する処理性能が最も高い振分先が、振分テーブルにおける振分先になる。
【００２４】
タイマー１０７は、溢れ検知部１０５が各処理装置２０の処理量を監視するタイミングを決定する。溢れ検知部１０５が処理量を監視する方法としては、常に監視を行い、いずれかの振分先の送信キュー１０３のトランザクション量が上限を超えたら即時に再振分部１０６に通知するという方法もある。しかし、この方法では、トランザクション量が溢れるたびに通知が発生し、処理性能を低下させる要因となる。
受信部１０８は、各処理装置２０から、トランザクションの処理量溢れなどに情報を受信する。
【００２５】
図７は、処理装置２０の構成を示す図である。図に示すように、処理装置２０は、受信部２０１、受信キュー２０２、制御部２０３、送信部２０４、処理部（計算資源、プロセッサコア）２０５、キャッシュ制御部２０６、データベース２０７を備えている。
【００２６】
受信部２０１は、負荷制御装置１０からのトランザクション要求を受信する。
受信キュー２０２は、受信部２０１で受信したトランザクション要求を順次蓄積する記憶部である。
【００２７】
制御部２０３は、受信キュー２０２に蓄積されているトランザクション要求を処理部２０５に供給する。また、トランザクションの処理量溢れを検知したら、送信部２０４を介して負荷制御装置１０に通知する。
【００２８】
送信部２０４は、トランザクションの処理量溢れ等の情報を負荷制御装置１０に送信する。
処理部２０５は、トランザクションを実行してデータベース２０７を更新する。なお、処理装置２０は、処理部２０５を１つ備えるシングルコア構成であってもよいし、処理部２０５を複数備えるマルチコア構成であってもよい。
【００２９】
キャッシュ制御部２０６は、データベース２０７の内容を一時的に記憶する。なお、本実施形態では、少なくとも１つの他の処理装置２０内のキャッシュ制御部２０６にアクセスすることが可能である。
データベース２０７は、トランザクション処理の対象となるデータを保有する。
【００３０】
次に、負荷制御装置１０を備えた負荷制御システムの動作について説明する。
図８は、負荷制御装置１０によるトランザクション振り分け処理のフローチャートである。まず、負荷制御装置１０が受信部１０１においてトランザクション処理要求を受信する（ステップＳ１１）。
【００３１】
次に、振分制御部１０２が振分テーブルを参照して受信したトランザクションの適切な振分先を選択する（ステップＳ１２）。
【００３２】
次に、振分制御部１０２は、ステップＳ２で選択した振分先への送信キュー１０３にトランザクション処理のデータを格納する（ステップＳ１３）。
【００３３】
送信部１０４は、このようにして送信キュー１０３に格納されたトランザクションデータを対応する振分先の処理装置２０に順次送信する。
【００３４】
図９は、トランザクションの処理量溢れが生じた場合の処理のフローチャートである。
まず、溢れ検知部１０５が各振分先に対応する送信キュー１０３に蓄積されているトランザクション量が上限を超えていることを検知すると（ステップＳ２１：ＹＥＳ）、再振分部１０６にトランザクションの再振り分けを指示する（ステップＳ２２）。
【００３５】
再振分部１０６は、アフィニティテーブルを参照して溢れているトランザクションの振分先の選択を再度行う（ステップＳ２３）。
再振分の方法について、図３、５、６を用いて具体的に説明する。例えば、図３の振分テーブルに示すとおり、データ領域Ａを処理対象とするトランザクションは、初めは振分制御部１０２によって振分先１に振り分けられる。しかし、図５の上限テーブルに示すように、振分先１の送信キュー１０３に１６００件以上のトランザクションが蓄積されると、溢れ検知部１０５によって再振分部１０６に再振り分けが指示される。再振分部１０６は図６のアフィニティテーブルを参照し、データ領域Ａを処理対象とするトランザクションの処理性能（ここでは単位時間当たりの処理件数）が振分先１の次に高い振分先を選択する。図６に示す例では、振分先２，３，４が該当するので、再振分部１０６はこれらの中から再振分先を選択する。
【００３６】
再振分部１０６は、再振分先が決定したら、上限を超えて格納されたトランザクションデータを再振分先への送信キュー１０３に移動する（ステップＳ２４）。
【００３７】
送信部１０４は、このようにして送信キュー１０３に格納されたトランザクションデータを対応する振分先の処理装置２０に順次送信する。なお、上述のように、本実施形態では処理装置２０間で他の処理装置２０内のキャッシュ制御部２０６にアクセスすることが可能であるため、振分先の処理装置２０のキャッシュ制御部２０６にトランザクションが処理対象とするデータがキャッシュされていなくても、当該データがキャッシュされている他の処理装置２０のキャッシュ制御部２０６にアクセスして処理を実行することができる。
【００３８】
なお、正常運用時には発生しないことであるが、再振分部１０６は、溢れ検知部１０５からの指示を受信した場合以外に、受信部１０８が各処理装置２０からトランザクションの処理量溢れ情報を受信した場合にも、トランザクションの再振り分けを行う。
【００３９】
以上のように、本実施形態によれば、振分制御部１０２によってトランザクションの適切な振分先を決定し、振分先毎の送信キュー１０３にトランザクションを蓄積するようにしたので、できるだけ少ない計算資源で、並列オンライントランザクション処理のターンアラウンドタイムなどのサービスレベル指標を維持することができる。また、溢れ検知部１０５によって各振分先に対応する送信キュー１０３に蓄積されているトランザクション量が上限を超えていないか否かを定期的に監視し、超えている場合には再振分部１０６によって振分先を再度決定するようにしたので、特定の処理装置２０が処理溢れを起こしてターンアラウンドタイムが長くなる等のサービスレベル指標低下を防ぐことが出来る。
【００４０】
また、負荷制御装置１０においてトランザクションの振分先の決定を行い、さらに処理溢れを防止するための調整を行ってから、各処理装置２０にトランザクションデータを送信しているため、処理装置２０には処理溢れを調整するための機能を設ける必要がなく、計算資源をトランザクション処理に有効利用することができる。
【００４１】
本実施形態による負荷制御装置１０は、大量のデータを保有するデータベースを用いるオンライントランザクションシステムにおける負荷制御を行うのに特に適している。特に、データ競合が起こりにくいようデータベース内のデータがパーティショニングされデータ競合が起こりにくいトランザクション処理の場合、最も処理性能に影響するのは、各々の計算資源のデータに対するアフィニティだからである。
【００４２】
また、このようなデータ競合が起こりにくいトランザクションでは、個々のトランザクションの負荷の大きさが比較的揃っているため、トランザクションの件数から全体の負荷の見積もりを行いやすく、本実施形態のように、上限テーブルを用いてトランザクション溢れを判断するのに適している。
【００４３】
本実施形態による負荷制御システムは、複数の処理装置２０を有しており、キャッシュ制御部２０６は、少なくとも１つの他の処理装置２０内のキャッシュ制御部２０６にアクセスすることが可能である。このようなシステムの構成方式の例として、ＣＣ−ＮＵＭＡ（cache-coherent Non-Uniform Memory Access）の方式がある。ＣＣ−ＮＵＭＡは、すべてのプロセッサで共通のメモリ・アドレス空間を持つマルチプロセッサ構成であるため、各ノードのプロセッサは他のノードのメモリにもアクセス可能である。各プロセッサはローカルで高速なメモリを有しており、他のプロセッサが持つローカルなメモリへのアクセスはそれより遅くなるという特徴がある。従って、本実施形態のように、各々の計算資源のデータに対するアフィニティに基づいて振分先を決定する負荷制御システムに適している。
【００４４】
次に、電力消費量を削減するための振分先の構成方法について説明する。
図１０は、電力消費量に基づく振分先の決定方法を説明する図である。「電力消費モデル」の表は、コア（処理装置２０の処理部２０５に相当）毎の稼動時の電力消費量を示している。「コアＮ」（Ｎ＝１，・・・，９）の行と「コアＮ」の列の交差点の数値はコアＮを単独で稼動させたときの電力消費量を表し、「コアＮ」の行と「コアＭ」（Ｍ＝１，・・・，９）の列の交差点の数値は、コアＮとコアＭを同時に稼動させたときの総電力消費量を表している。例えば、コア１とコア２について見ると、単独で稼動させた場合それぞれの電力消費量は「１５」であるが、コア１とコア２を同時に稼動させた場合の合計の電力消費量は「１７」である。従って、コア１とコア２はそれぞれ単独で稼動させるよりも両方を同時に稼動させたほうが電力消費量を削減することができる。
【００４５】
一方、コア５について見ると、単独で稼動させた場合の電力消費量は「２０」であるが、他のいずれかのコアと共に稼動させることで合計の電力消費量を削減できる組み合わせは無い。
【００４６】
このように、電力消費モデルに基づいて決定した、電力消費量ができる振分先の構成を示したものが「コア・振分先対応表」である。表に示すように、振分先１，２は２つのコアから構成され、振分先３〜７は１つのコアで構成される。
【００４７】
以上のように、処理装置２０を構成するコアの電力消費モデルに基づいて振分先の構成を決定することにより、システムの電力消費量を削減することが可能となる。
【００４８】
また、電力消費モデル以外に、図１１に示すようなシステム内の各々の計算資源（要素）の、電源をオフした場合の電力削減量（削減電力）及びその計算資源の再利用開始までに要する準備時間（復旧時間）の情報に基づいて、振分テーブルを生成する「即時拡張モデル」を用いてもよい。
【００４９】
トランザクションデータ量によっては、システムの全ての計算資源の電源を常にオンにしておく必要はない。従って、通常は、予想されるトランザクション増加量に対して即時に対応できる範囲でいくつかの計算資源の電源をオフしておくことが望ましい。すなわち、Ｎ秒後にＳ件のトランザクション増加が予想される場合、Ｎ秒以内に再利用開始できる計算資源をＳ件に対応できる分だけ確保しておき、その他の計算資源の電源はオフにする。
【００５０】
即時拡張モデルを用いる場合、電源オフの状態であった計算資源が利用可能となった直後に振分先の候補を増やす必要があることから、定期的に各計算資源の電源のオンオフ状態を監視する手段が設けられる。新たに利用可能になった振分先が増えたことが検知されたら、可用テーブルが更新される。
【００５１】
また、即時拡張モデルの変形例として、一部の計算資源の電源をオフしておく代わりに、システムから切り離してリソースプールに戻すようにしてもよい。この場合には、各々の計算資源をリソースプールに戻した場合に削減される利用料及び計算資源の再利用開始までに要する準備時間の情報に基づいて、振分テーブルを生成する
【００５２】
なお、処理装置２０の構成は、図７に示すものに限られず、例えば図１２に示すような構成であってもよい。図１２の例は、処理装置２０内に２つの処理部２０５が含まれるマルチコア構成であり、キャッシュ制御部２０６とデータベース２０７も２つ含まれている。
【符号の説明】
【００５３】
１０  負荷制御装置、２０  処理装置、１０１  受信部、１０２  振分制御部、１０３  送信キュー、１０４  送信部、１０５  溢れ検知部、１０６  再振分部、１０７  タイマー、１０８  受信部、２０１  受信部、２０２  受信キュー、２０３  制御部、２０４  送信部、２０５  処理部、２０６  キャッシュ制御部、２０７  データベース
【図１】
0005515810.tif 000002
【図２】
0005515810.tif 000003
【図３】
0005515810.tif 000004
【図４】
0005515810.tif 000005
【図５】
0005515810.tif 000006
【図６】
0005515810.tif 000007
【図７】
0005515810.tif 000008
【図８】
0005515810.tif 000009
【図９】
0005515810.tif 000010
【図１０】
0005515810.tif 000011
【図１１】
0005515810.tif 000012
【図１２】
0005515810.tif 000013