本記事では、sql_diagnoserの使用方法について説明します。テナントSQL診断、SQLレビュー、sql_diagnoserの無効化などの操作が含まれます。
テナントSQL診断
sql_diagnoserのホームページでテナントSQL診断機能を使用して、業務クラスタで実行されたSQLを直接分析し、一般的な疑わしいSQLを特定することができます。これにより、ユーザーは隠れたパフォーマンス問題を見つけ出し、最適化の提案を受けることができます。この機能の具体的なフィールドの説明は以下の通りです。
| 入力フィールド | 説明 | 必須 |
|---|---|---|
| Ip Address | IPアドレス。 | はい |
| Port | ポート。 | はい |
| ユーザー名 | テナントのユーザー名 | はい |
| テナントパスワード | テナントログインパスワード。 | はい |
| クラスタ名 | OBProxy経由で接続するクラスタの場合に入力が必要です。入力しないと、クラスタに接続できません。 | いいえ |
| 開始時間 | この時点以降のSQL実行レコードの診断を取得することを示します。 | はい |
| サンプリング数 | sql_auditビューから照会されるレコード数を示します。デフォルト値は10000です | いいえ |
| 終了時間 | この時点までのSQL実行レコードの診断を取得することを示します。診断速度が遅い場合は、照会範囲を狭めて再試行することを推奨します。 | はい |
| レスポンス時間 | レスポンス時間のしきい値を示します。この値を超えるレスポンス時間のSQL実行レコードのみが診断対象となります。単位はusです。デフォルト値は20000usです。診断インターフェースが遅い場合は、このしきい値を引き上げることができます。 | いいえ |
注意
- 診断ルールおよび診断結果における時間関連のプロパティは単位処理がされておらず、実際には
gv$ob_sql_audit(OceanBaseデータベースV4.0およびそれ以前のバージョンではgv$sql_audit) の元の単位と一致します。例えば、elapsed_timeの単位はusであり、CPU時間はexecution_time + get_plan_time - total_wait_time_microから計算され、単位も同じくusです。 - sql_diagnoserが初めて起動されると、現在のユーザーのホームディレクトリにフォルダ
h2および関連データファイルが作成されます。これらのファイルを削除すると、診断ルールがリセットされます。診断ルールの変更を永続化したい場合は、これらのファイルを移動、変更、または削除しないでください。 - 診断では、OceanBaseデータベース(OceanBaseデータベースのデプロイ後にデフォルトで oceanbase という名前のデータベースが作成されます)がデフォルトで除外されます。このため、このデータベースで本ツールの機能をテストしないでください。
- 診断によるシステムテナントへの負荷とツール自体の負荷を軽減するため、各診断では
gv$ob_sql_audit(OceanBaseデータベースV4.0およびそれ以前のバージョンではgv$sql_audit) から最大10000件のデータ(応答時間の降順)のみが抽出されるため、完全な診断はできません。診断データ量を調整するには、インターフェース呼び出し方式で最大返却行数queryLimitを指定するか、本ツール起動時に環境変数sql.diagnose.sql.query-sql-audit-limitを設定することを推奨します。例えば、nohup java -Dsql.diagnose.sql.query-sql-audit-limit=12345 -Dserver.port=9090 -jar sql-diagnoser-4.2.0.0.jar &のように設定します。
SQLレビュー
SQLレビュー機能は、シンプルなウェブ画面操作で利用できます。ユーザーはウェブ画面にレビューしたいSQLテキストを入力すると、ツールが一般的なルール項目に基づいてSQL文の妥当性を分析し、改善提案を行います。項目の入力方法は以下の通りです:
| 入力ボックス | 説明 | 必須 |
|---|---|---|
| 接続先 | IPアドレス。 | はい |
| Port | ポート。 | はい |
| ユーザー名 | テナントのユーザー名 | はい |
| テナントパスワード | テナントログインパスワード。 | はい |
| SQLテキストボックス | 検証したいSQLを入力してください | はい |
SQLテキストボックスに入力されたSQLは、静的ルールおよびOceanBaseデータベースへの接続を通じて内部ビューを照会することで検出されます。そのため、OceanBaseデータベースの接続情報(実際に検出対象となるデータベースを含む)を入力する必要があります。チェック中にこのテキストボックス内のSQLが実際に実行されることはないため、SQLレビュー機能は安心してご利用いただけます。
sql_diagnoserの停止
sql_diagnoserのプロセスを停止することで、sql_diagnoserの実行を停止できます。
ps -ef | grep sql-diagnoserを実行して、sql_diagnoserのプロセス番号を確認します。kill -9 プロセス番号を実行して、プロセスを停止します。