Serverless石川覚2024.10.15AWS事業本部コンサルティング部の石川です。従来のSTLテーブルやSVLビューに代わりSYSビューが導入されました。両方で利用できるクエリログを取得する方法をご紹介します。Redshiftが従来のSTLテーブルやSVLビューに代わってSYSビューを導入した背景は以下のとおりです。両方で、クエリとワークロードのリソース使用状況を監視するために使用できるようにするため、再設計されました。従来のシステムテーブルは整合性モデルが通常のテーブルと異なっていましたが、SYSビューではこの問題に対処しています。データの可視性の改善SYSビューでは、ユーザーの権限に基づいてデータの可視性がより明確に制御されています。機能的な整理SYSビューは、クエリの状態、パフォーマンスメトリクス、クエリタイプなどの機能的な観点から分類されています。新しいパフォーマンスメトリクスの導入planning_time、lock_wait_time、remote_read_io、local_read_ioなどの新しいメトリクスが追加され、パフォーマンスのトラブルシューティングに役立ちます。ユーザビリティの向上Redshiftオプティマイザによって書き換えられたクエリではなく、ユーザーが送信したクエリをログに記録することで、モニタリングビューの使いやすさが向上しました。外部オブジェクトのリスティングや分割の時間、外部ファイルの場所、外部テーブル名など、外部クエリに関する詳細な情報が提供されます。ユーザークエリレベルのロギングユーザーが送信したクエリ(親クエリ)と、Redshiftクエリエンジンによって書き換えられたクエリ(子クエリ)を区別して記録できるようになりました。Redshiftのモニタリングとトラブルシューティングがより効率的かつ効果的になり、ユーザーエクスペリエンスが向上しました。過去24時間のクエリを取得するSQLです。SYS_QUERY_HISTORYなら簡単にクエリを取得できるのですが、クエリが4000バイトに切り詰められてしまいます。そこで以下のクエリでは、SYS_QUERY_HISTORYをジョインして、64000バイトまで出力できるように拡張しました。16のように64000バイトまでに限定しています。100のように不要ユーザーのクエリは排除しています。15〜34行目は、お好みでフィルタしてください。私はユーザーが実行していないクエリはいらないので、余計なクエリは排除しています。クエリごとにSQLファイル出力するクエリごとにSQLファイル分割して出力するプログラムが以下になります。両方で、動くようにDataAPIは使わず、psycopg2で接続してクエリを実行しています。クエリの取得する期間(hours_to_fetch)や認証情報はSecretManagerから取得するなどお好みで修正してください。パッケージのインストール上記のプログラムを動かすには、psycopg2の導入が必要です。そのためには、必要なパッケージとpsycopg2のインストールが必要です。-1)のため、最大64000バイトです。SYS_QUERY_HISTORYの4000バイトと比較すると、16倍の64000バイトですがこのサイズを超えることも稀にあります。制限をかけないと、VARCHARの最大長を超えると以下のエラーが起こり、全てのクエリが失敗してしまいます。-----------------------------------------------最後に現状は従来のシステムテーブルを使用したサンプルが多いため、情報が混乱しています。両方でサポートされているため、今後はこちらを使うのが良いでしょう。今回作ったクエリのリストは、負荷試験用に出力したものです。簡易な負荷試験ツールも作る予定なのでまた紹介します。