生成 AI (Generative AI) を使用した SQL Server の最適化としては次のような機能があります。
これらの機能は DB から情報を直接取得して解析を行う方法となります。
SQL Server 以外の環境も含まれますが、これ以外の方法としては次のような記事の活用があります。
DBA に関しての作業についても今後は生成 AI を使用して、専門的なスキルが無くても一定のレベルで自動化 / 効率化を行う必要が出てくるのではないでしょうか。
スロークエリの原因を見つけて対処する方法の記事で、SQL Server ベースの環境のクエリチューニングについて触れられていますが、ChatGPT を使用して、実行プランをベースとして、どのようなプロンプトを記載すればクエリチューニングの一助となる提案を得ることができるかを自分なりに考えてみました。
ChatGPT への実行プランの連携方法
ChatGPT への実行プランの連携方法ですが、GPT-4o であれば、実行プランを保存した .sqlplan ファイルを直接アップロードすることができます。
プロンプトの内容によっては、Code Interpreter によって、XML の解析を実行しようとしてエラーとなるケースがあるため、それについてプロンプトの命令で制御をすることでエラーの発生を回避 (または頻度を緩和) させることができます。
プロジェクトを使用する場合は、プロジェクトファイルとして実行プランをアップロードすることでも対応することが可能です。
アップロードした実行プランのクエリチューニングを生成 AI で実行
それでは、アップロードした実行プランのクエリチューニングを生成 AI を使用して実行してみたいと思います。
使用したプロンプトは次のような内容です。今回アップロードした実行プランは TPC-H の Q2 を実行した際のプランとなります。
=== 解析対象のファイル: - アップロードしたファイル === あなたの役割: - あなたは SQL Server の専門家です。クエリの実行効率の向上のために詳細な調査を実施してください。 === 分析方法: - 対象のファイルは SQL Server の実行プランの XML ファイル - このファイルの内容は Code Interpreter で解析をするのではなく、プロンプト内に内容を展開して回答を生成 - ファイル内に複数のステートメントが含まれている場合、各ステートメントごとに分析 === 回答内容: - クエリチューニングの提案 - 冒頭にチューニング対象となるクエリの SQL と内容の要約を回答 - 使用しているテーブルの情報/統計情報の情報/結合条件/述語を表形式で記載 - クエリチューニングにはインデックス / JOIN 方法の変更 / 検索条件の見直し / クエリヒント、テーブルヒント句の追加 / サブクエリの見直しについての情報を含める - クエリのリライトにより効率が向上する場合には、リライト後のクエリの提案 - コストが高い操作の情報を表形式でまとめる - 実行プランの XML 内にMissing Index / Missing Stats / Warning がある場合は、抽出した情報を回答 - 回答の最後にこのクエリの問題点を要約した内容を表示
実行すると次のような回答を得ることができました。
使用したプロンプトと得られた回答は こちら からも確認することができます。
実行のたびに結果のブレが多少でますので、一定の精度にするためにはもう少しプロンプトの内容を見直す必要がありますが、初期のチューニング案の提示として活用することができる内容となっているのではないでしょうか。