スケーラブルデータベースサーバ HiRDB Version 8 システム運用ガイド(UNIX(R)用)
ここでは,実行時間が長いSQL,又は入出力処理が多いSQLのチューニング方法について説明します。
SQLのチューニングの流れを次の図に示します。
図22-2 SQLのチューニングの流れ
チューニング目標と監視項目の警告値を決定します。システム全体のパフォーマンス(アプリケーションの処理時間,トランザクションコミット数など)を決めて,それに対するチューニング目標を決定してください。また,次に示す監視項目の警告値を決定してください。
サーバマシンのプロセッサやディスクなどのハードウェアリソースの利用率が高くなったことをチューニングの起点とします。ハードウェアリソースの利用率が高くなると,システムのスループットが低下すると考えられます。そのため,ハードウェアリソースの利用率を監視します。
OSのsarコマンドなど(Linuxの場合にはvmstatコマンドなど)を使用すると,サーバマシンのプロセッサやディスクなどのハードウェアリソースの利用率が高いハードウェアを特定できます。
グローバルバッファプールのヒット率が低下したことをチューニングの起点とします。pdbuflsコマンドを実行すると,グローバルバッファプールのヒット率を確認できます。
アプリケーションのスループットが低下したことをチューニングの起点とします。統計解析ユティリティ(pdsteditコマンド)のシステムの稼働に関する統計情報を取得すると,アプリケーションのスループットを確認できます。
また,SQL実行時間警告出力機能を使用して,SQLの実行時間を監視してください。SQL実行時間警告出力機能については,「8.9 SQL実行時間についての警告情報の出力(SQL実行時間警告出力機能)」を参照してください。
表のデータ配置に乱れが生じていることをチューニングの起点とします。データの検索効率や格納効率が低下した表については,KFPH00212-I又はKFPH22017-Iメッセージが出力されるため,これらのメッセージを監視してください。
(2)〜(4)で監視していた監視項目が警告値を超えた場合,チューニングを行います。OS又はHiRDBのコマンドで監視項目のデータを取得した場合は,以前に取得したデータと現在取得したデータを比較して,警告値を超えたかどうか判断してください。
警告値を超えたハードウェアリソースがプロセッサの場合,OSのコマンドを使用して,HiRDBのプロセスがプロセッサを多く使用しているかどうかを確認してください。
SQL実行時間警告出力機能の警告が出力された場合,(8)に進みチューニングを行ってください。
(5)で監視していた表のデータ配置に乱れが生じてメッセージが出力された場合,(17)に進みチューニングを行ってください。
(6)でハードウェアリソースや,グローバルバッファプールのヒット率が,警告値を超えた場合,そのハードウェアリソースがどのHiRDBファイルシステム領域に関係するかを特定します。警告値を超えたハードウェアリソースや,グローバルバッファプールとHiRDBファイルシステム領域の種類との関係情報を取得するには,各レイヤ間の情報をまとめる必要があります。
ディスクボリュームとHiRDBファイルシステム領域間,HiRDBファイルシステム領域とHiRDBファイル間,及びHiRDBファイルとRDエリア間の関係は,ディクショナリ表のSQL_PHYSICAL_FILESを調べると特定できます。また,インナレプリカ機能を使用している場合は,SQL_IOS_GENERATIONS表を調べてください。
作業表用ファイル用のHiRDBファイルシステム領域の場合は,pdworkオペランドの指定値を調べるとHiRDBファイルシステム領域名が分かります。さらに,ディクショナリ表のSQL_TABLES表又はSQL_INDEXES表を調べると,RDエリアと表(又はインデクス)の関係を特定できます。
図22-3 HiRDB CMによる関係情報の取得例
グローバルバッファプールのバッファ面数が小さいため,システムのスループットが低下したり,ハードウェアリソースの利用率が高くなったりしている可能性があります。
(7)で特定したHiRDBファイルシステム領域と関係のあるグローバルバッファプールのバッファ面数のチューニングを行ってください。グローバルバッファプールのヒット率が低下したことがチューニングの起点の場合は,該当するグローバルバッファプールのバッファ面数をチューニングしてください。アプリケーションのスループット及びSQLの実行時間がチューニングの起点の場合は,すべてのグローバルバッファプールのバッファ面数をチューニングしてください。
グローバルバッファプールのバッファ面数については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。グローバルバッファプールのチューニングについては,「22.1 グローバルバッファプールのチューニング」を参照してください。
(8)で行ったチューニングによって,チューニング目標を達成した場合は,チューニングを終了します。達成できていない場合は,次の手順に進んでチューニングを続けてください。
チューニング対象のSQLを特定します。また,そのSQLのチューニング目標を設定してください。
pdobilsコマンドでSQLオブジェクト用バッファの統計情報を取得し,次に示す状況のSQLをチューニング対象とします。SQLオブジェクト用バッファの統計情報を取得すると,各SQLの実行時間,実行回数,及び入出力回数が確認できます。
また,各SQLの目標実行時間,目標実行回数,及び目標入出力回数をチューニング目標として決めてください。
統計解析ユティリティ(pdsteditコマンド)のシステムの稼働に関する統計情報を取得して,排他待ちが発生しているか確認してください。排他待ちが発生している場合,サーバの排他制御の状態を定期的に取得し,排他待ちが発生しているか確認します。また,排他待ちが発生している資源を該当するSQLが使用している場合は,チューニング対象のSQLに排他待ちが発生していると判断できます。
排他待ちが発生している場合は,(12)でアプリケーションのチューニング(排他制御のチューニング)を行って排他待ちを解消してください。排他待ちが発生していない場合は,(14)でSQLのチューニングを行ってください。
チューニング対象のSQLに排他待ちが発生している場合,アプリケーションのチューニング(排他制御のチューニング)を行います。アプリケーションのチューニング(排他制御のチューニング)については,マニュアル「HiRDB Version 8 UAP開発ガイド」の排他制御を参照してください。
アプリケーションのチューニングによって,チューニング対象のSQLに発生していた排他待ちが解消したか確認してください。確認方法については,(11)を参照してください。
排他待ちが解消した場合は,(16)に進みチューニングの目標を達成したか確認してください。排他待ちが解消しない場合は,(14)に進みSQLのチューニングを行ってください。
SQLのチューニング方法を次の表に示します。
表22-1 SQLのチューニング方法
SQLの特性 | 想定要因 | 詳細 | 対策 |
---|---|---|---|
データページ,インデクスページ,ディレクトリページの実READ回数,又は参照回数の合計回数が多い(設計時よりも入出力回数が多い,又は設計時よりも実行時間が長い) | 表へのアクセスパスが不適切 | 表の検索範囲が広いのにテーブルスキャンを実施している | マニュアル「HiRDB Version 8 コマンドリファレンス」のアクセスパス表示ユティリティのチューニングの考え方を参照してください。 |
絞り込める条件を指定している検索で,テーブルスキャンを実施している(利用されるインデクスが適切でない) | |||
インデクスの検索範囲が広い(必要以上の範囲検索を実施している) | |||
サーチ条件がない,又はサーチ条件が有効でないためインデクスのサーチ範囲が絞り込めていない | |||
ANDを使用して複数の述語を指定した検索を実施している | |||
結合処理方法が不適切 | ネストループジョイン時の内表の結合キーのインデクスが適切でない | ||
外結合するときの利用されるインデクスが適切でない | |||
ネストループジョイン時の転送方法がBROADCAST転送又はKEY RANGE PARTIAL BROAD CAST転送になっている(HiRDB/パラレルサーバの場合) | |||
作業表用ファイルへのREAD回数,又はWRITE回数がある(設計時よりも実行時間が長い) | 結合処理方法が不適切 | ハッシュジョインの内表件数や副問合せの検索件数が多いため,バケット分割が複数回実行されている | マニュアル「HiRDB Version 8 UAP開発ガイド」のハッシュジョイン,副問合せのハッシュ実行を適用する場合の準備を参照してください。 |
ソートマージジョインの実施で,大量のデータをソートしている | マニュアル「HiRDB Version 8 コマンドリファレンス」のアクセスパス表示ユティリティのチューニングの考え方を参照してください。 | ||
クロスジョインを実施している | |||
ソート処理実施 | ORDER BY処理のためにソート処理を実施している |
チューニング対象のSQLがチューニング目標を達成したか確認してください。SQLオブジェクト用バッファの統計情報を取得し,各SQLの実行時間,実行回数,入出力回数が目標以内であるか確認してください。目標を達成できない場合は,(14)に戻って再度SQLのチューニングを行ってください。
チューニング目標を達成したか確認してください。目標を達成した場合はチューニングを終了します。目標を達成できない場合は,(10)の手順に戻ってチューニング対象のSQLを再度特定し,チューニングを行ってください。
SQLのチューニング,又はアプリケーションのチューニングで効果が出ない場合は,(17)に進みデータベースのチューニングを行ってください。
SQLのチューニング,又はアプリケーションのチューニングで効果が出ない場合は,データベースのチューニングを実施します。次に示すチューニングを行ってください。
データベースのチューニングによって,チューニングの目標を達成したか確認してください。目標を達成した場合はチューニングを終了します。目標を達成できない場合は,(10)に戻ってチューニング対象のSQLを再度特定し,チューニングを行ってください。
データベースのチューニングで効果が出ない場合は,次に進みハードウェアリソースのチューニングを行ってください。
ハードウェアリソースを追加又は増強します。OSのsarコマンドなど(Linuxの場合にはvmstatコマンドなど)を使用して,プロセッサの利用率,及びディスクの利用率を取得し,利用率が最も高いハードウェアリソースを追加するか,又は増強してください。
利用率が最も高いハードウェアリソースがプロセッサの場合は,より高性能なプロセッサに変更すると処理時間を短縮できます。また,利用率が最も高いハードウェアリソースがディスクの場合は,より高性能なディスクに変更するか,又はディスクアレイ装置を使用しているときはディスクを追加(スピンドル数を増加)すると,入出力時間を短縮できます。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.