最先端科学技術探査のAI機能:遅いSQL発見

SQLdiag: 遅い SQL が見つかりました

SQLdiag は、openGauss で SQL ステートメントの実行時間を予測するツールです。既存の予測テクノロジは主に実行計画の予測方法に基づいていますが、これらの予測スキームは OLAP シナリオにのみ適用でき、実行計画タスクを取得でき、OLTP や HTAP などの高速で単純なクエリにはほとんど役に立ちません。上記のソリューションとは異なり、SQLdiag はデータベースの履歴 SQL ステートメントに焦点を当て、履歴 SQL ステートメントの実行パフォーマンスを要約し、それらを使用して新しい未知のサービスを推測します。データベースSQLステートメントの実行時間は短期間では大きな差がないため、SQLdiagは履歴データから実行されたSQLステートメントに類似したステートメント結果セットを検出し、SQLベクトル化技術とテンプレート手法に基づいてSQLステートメントの実行を予測します。間隔。このツールには次の利点があります。

SQL ステートメントの実行計画は必要なく、データベースのパフォーマンスに影響を与えません。
現在、業界の多くのアルゴリズムには、OLTP または OLAP にのみ適用できるなど、比較的高い制限がありますが、SQLdiag には幅広い使用シナリオがあります。
フレームワークがわかりやすく、簡単な操作で独自の予測モデルを学習させることができます。
このツールの典型的なアプリケーション シナリオは、間もなく起動される SQL ステートメントのバッチに対してパースペクティブを実行し、事前にリスクを特定することです。

概要

SQLdiagは、SQL文の実行時間を予測するツールであり、テンプレート手法やディープラーニング手法により、SQL文の実行計画を取得することなく、文のロジックの類似性や実行履歴に基づいてSQL文の実行時間を予測することができます。異常なSQLが見つかりました。

ユーザーガイド

前提条件

  • ユーザーがトレーニング データを提供するようにする必要があります。
  • ユーザーが提供されたツールを通じてトレーニング データを収集する場合、WDR 機能を有効にする必要があります。関連するパラメーターは track_stmt_stat_level と log_min_duration_statement です。詳細については、以下の概要を参照してください。
  • 予測の精度を確保するには、ユーザーが提供する過去のステートメント ログは可能な限り包括的で代表的なものである必要があります。
  • 必要に応じて、Python 3.6 以降の環境とその依存関係を構成します。

環境構成

この関数の動作環境には、Python バージョン 3.6 以降が必要です。必要なサードパーティの依存関係は、requirements.txt ファイルに記録されており、依存関係は、次のような pip install コマンドを通じてインストールできます。

pip install requirements.txt

SQLパイプラインの収集方法

このツールでは、ユーザーが事前にデータを準備する必要がありますが、学習データの形式は次のとおりであり、各サンプルは改行で区切られています。

SQL,EXECUTION_TIME

予測データの形式は次のとおりです。

SQL

SQL は SQL ステートメントのテキストを表し、EXECUTION_TIME は SQL ステートメントの実行時間を表します。サンプル データについては、sample_data の train.csv および detect.csv を参照してください。

ユーザーは、必要な形式に従ってトレーニング データを自分で収集できます。このツールは、自動スクリプト収集 (load_sql_from_rd) も提供します。このスクリプトは、WDR レポートに基づいて SQL 情報を取得します。関連するパラメーターは、log_min_duration_statement と track_stmt_stat_level です。

  • このうち、log_min_duration_statement は低速 SQL のしきい値を示し、0 の場合は完全に収集され、時間単位はミリ秒です。
  • track_stmt_stat_level は情報キャプチャのレベルを示します。track_stmt_stat_level='L0,L0' に設定することをお勧めします。
    パラメーターを有効にすると、一定量のシステム リソースを占有する可能性がありますが、通常はあまり占有しません。高同時実行性のシナリオが継続すると、損失は 5% 未満になる可能性があります。データベースの同時実行性が低いシナリオでは、パフォーマンスの損失は無視できます。
使用脚本获取训练集方式:
load_sql_from_wdr.py [-h] --port PORT --start_time START_TIME
                            --finish_time FINISH_TIME [--save_path SAVE_PATH]
例如:
    python load_sql_from_wdr.py --start_time "2021-04-25 00:00:00" --finish_time "2021-04-26 14:00:00" --port 5432  --save_path ./data.csv

ステップ

  1. モデルトレーニング用の履歴ログを提供する
  2. トレーニングおよび予測操作を実行します。
基于模板法的训练与预测:
    python main.py [train, predict] -f FILE --model template --model-path template_model_path 
基于DNN的训练与预测:
    python main.py [train, predict] -f FILE --model dnn --model-path dnn_model_path

使用例

本ツールのルートディレクトリで以下のステートメントを実行することで対応する機能を実現します。

提供されたテスト データをテンプレート化されたトレーニングに使用します。

python main.py train -f ./sample_data/train.csv --model template --model-path ./template 

提供されたテスト データを使用して、テンプレート化された予測を行います。

python main.py predict -f ./sample_data/predict.csv --model template --model-path ./template --predicted-file ./result/t_result

テンプレート化されたモデルの更新には、提供されたテスト データを使用します。

python main.py finetune -f ./sample_data/train.csv --model template --model-path ./template 

提供されたテスト データを使用した DNN トレーニング:

python main.py train -f ./sample_data/train.csv --model dnn --model-path ./dnn_model 

提供されたテスト データを使用した DNN 予測:

python main.py predict -f ./sample_data/predict.csv --model dnn --model-path ./dnn_model --predicted-file 

提供されたテスト データを使用した DNN モデルの更新:

python main.py finetune -f ./sample_data/train.csv --model dnn --model-path ./dnn_model

助けを得ます

SQLdiag ツールを使用する前に、次のコマンドを使用してヘルプを表示できます。

python main.py --help 

次のヘルプ情報が表示されます。

usage: main.py [-h] [-f CSV_FILE] [--predicted-file PREDICTED_FILE]
               [--model {template,dnn}] --model-path MODEL_PATH
               [--config-file CONFIG_FILE]
               {train,predict,finetune}

SQLdiag integrated by openGauss.

positional arguments:
  {train,predict,finetune}
                        The training mode is to perform feature extraction and
                        model training based on historical SQL statements. The
                        prediction mode is to predict the execution time of a
                        new SQL statement through the trained model.

optional arguments:
  -h, --help            show this help message and exit
  -f CSV_FILE, --csv-file CSV_FILE
                        The data set for training or prediction. The file
                        format is CSV. If it is two columns, the format is
                        (SQL statement, duration time). If it is three
                        columns, the format is (timestamp of SQL statement
                        execution time, SQL statement, duration time).
  --predicted-file PREDICTED_FILE
                        The file path to save the predicted result.
  --model {template,dnn}
                        Choose the model model to use.
  --model-path MODEL_PATH
                        The storage path of the model file, used to read or
                        save the model file.
  --config-file CONFIG_FILE

コマンドリファレンス

表 1 コマンドラインパラメータの説明

パラメータ パラメータの説明 範囲
-f トレーニングまたは予測ファイルの場所
–予測ファイル 予測結果の保存場所
-モデル モデルの選択 テンプレート、dnn
–モデルパス トレーニング モデルの保存場所

よくある質問

データベースインスタンスへの接続に失敗しました。データベースインスタンスに問題があるか、セキュリティ権限の設定(pg_hba.confファイルの設定項目)が間違っているか、データベースインスタンスの状況を確認してください。
再起動に失敗しました: データベース インスタンスの正常性ステータスをチェックして、データベース インスタンスが適切に動作していることを確認してください。
依存関係のインストールに失敗しました: まず、コマンド python -m pip install –upgrade pip を使用して pip パッケージ管理ツールをアップグレードすることをお勧めします。
TPC-C ジョブを実行すると、パフォーマンスがどんどん遅くなっていることがわかります。TPC-C などの同時実行性の高いシナリオでのストレス テストには、多くの場合、大量のデータ変更が伴います。各テストは冪等ではないため (TPC-C データベースのデータ量の増加、無効なタプルをクリーンアップするためのバキュームフルが実行されない、データベースがチェックポイントをトリガーしない、キャッシュの削除が実行されないなど)、一般的にはTPC-C には、大量のデータが書き込まれたベンチマークを伴うことを推奨しており、(特定の同時実行性と実行時間に応じて) 時々データを再インポートする必要があります。より簡単な方法は、$PGDATA ディレクトリをバックアップすることです。
TPC-C がジョブを実行すると、TPC-C ドライバー スクリプトは例外「TypeError: float() argument should be a string or a数値, not 'NoneType'」を報告します (None を float 型に変換できません)。 TPC-C 圧力テストは結果を返します。この問題にはさまざまな理由が考えられます。TPC-C が実行でき、返された結果を取得できるかどうかを手動で確認してください。上記問題がない場合は、TPC-Cドライバスクリプト内のコマンドリストにある「sleep」コマンドの遅延時間を大きく設定することを推奨します。

おすすめ

転載: blog.csdn.net/GaussDB/article/details/123889483