ablog

不器用で落着きのない技術者のメモ

クエリ の検索結果:

Redshift でクエリテキストが 4000 文字を超える場合にクエリ全文を取得する

AWS

…ext) END, '') within group (order by sequence) AS text from stl_querytext where query=pg_last_query_id(); STL_QUERYTEXT - Amazon Redshift select text from STL_QUERYTEXT where query = 'クエリID' order by sequence よく使うRedshift運用系SQL #AWS - Qiita

Redshift Serveless でモニタリングする項目

… の場合、キュー待ちクエリ数が10を超えたらワークロードに異常がなければ最大RPU(設定している場合)の増加などを検討する。 DatabaseConnections(最大接続数: 2,000) 正常時のワークロードの最大接続数の50%を超えた場合、ワークロードに異常がないか確認する。 例)正常時のワークロードで最大接続数が 20 の場合、30 を超えたらワークロードに異常がないか確認する。 参考 Amazon Redshift Serverless の監査ログ記録 - Ama…

Redshift のオブジェクト名の大文字小文字の区別について

AWS

…ue で、DDL やクエリでダブルクオートで囲むと大文字小文字を区別する。 enable_case_sensitive_identifier が false だと大文字小文字を区別しない(デフォルトは false)。 ダブルクオートで囲まないと小文字として扱われる。 検証ログ $ psql -a "host=redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com user=awsu…

Amazon KeySpaces のパーティションキー

AWS

…ンキーの選択方法が、クエリのパフォーマンスに大きな影響を与える可能性があります。通常は、ディスク上のすべてのパーティション全体でアクティビティが均一になるようにアプリケーションを設計する必要があります。 Amazon Keyspaces でパーティションキーを効果的に使用する方法 - Amazon Keyspaces (Apache Cassandra 向け) パーティション全体に均等にロードを分散させるための戦略として、乱数を書き込んだパーティションキー列を追加する方法があ…

Amazon Redshift の SYS_QUERY_HISTORY の planning_time と compile_time は execution_time に含まれるぽい

…パイルに時間がかかるクエリを実行する。 SYS_QUERY_HISTORY を確認する。 execution_time、compile_time、planning_time を足すと elapsed_time を超えてしまうので、 compile_time、planning_time は execution_time に含まれると考えられる。 dev awsuser 20230606_21:56:40 =# select start_time, end_time, end_t…

Amazon Redshift の SYS_QUERY_HISTORY の elapsed_time は queue_time を含む

…H の 3TB 用のクエリをシリアル実行する。 $ nohup ./exec_all.sh & 別セッションで以下のクエリを実行する(同時実行数が1なのでキュー待ちになる) dev awsuser 20230606_21:00:16 =# UPDATE testtab1 SET name='fff' WHERE id=1; UPDATE 2 Time: 392967.335 ms (06:32.967) SYS_QUERY_HISTORY を確認する。 elapsed_tim…

Amazon Redshift の SYS_QUERY_HISTORY の elapsed_time は lock_wait_time を含む

…RE id=2" のクエリを参照) elapsed_time = end_time - start_time となる elapsed_time と lock_wait_time + execution_time がほぼ近い値になり、elapsed_time は lock_wait_time を含む。 dev awsuser 20230606_16:01:17 =# select start_time, end_time, end_time-start_time end_min…

Glue カタログでテーブルのカラムを追加・削除すると、Redshift Spectrum でも追加・削除される

…pectrum からクエリすると col1 は表示される。 dev awsuser 20230602_18:39:37 =# select * from spectrum_schema.nation_tbl; col0 | col1 | col2 | col3 --------+----------------+------+----------------------------------------------------------------------------…

Redshift Spectrum から Glue カタログのVARCHARにクエリすると "Invalid column type" エラーが発生する

…VARCHAR 列をクエリすると、"Invalid column type" エラーが発生する。 Redshift Spectrum を使用して、AWS Glue データカタログテーブルから、データ 型が VARCHAR である列をクエリすると、次のようなエラーが表示されることがあります。 <column_name> - Invalid column type for column <column_name>. Type: varchar" AWS Glue と Redshi…

Amazon Redshift でテーブルの列のデフォルト値を指定する

AWS

…必要があります。サブクエリ、現在のテーブルに含まれる他の列の相互参照、およびユーザー定義の関数は使用できません。 default_expr 式は、列の値を指定しないすべての INSERT 操作で使用されます。デフォルト値を指定しなかった場合、列のデフォルト値は null です。 定義済み列リストの COPY 操作で、DEFAULT 値が含まれている列を省略すると、COPY コマンドで default_expr の値が挿入されます。 CREATE TABLE - Amazon …

Amazon Redshift でクエリテキストから SVL_QUERY_METRICS_SUMMARY を取得する

AWS

SQL elect b.database, substring(b.querytxt,1,30) sql, a.* from svl_query_metrics_summary a, stl_query b where a. query = b.query and b.querytxt like '%/* TPC-H Q%' order by substring(b.querytxt,1,30); 結果 database | sql | userid | query | se…

Amazon Redshift でゾーンマップがあってもソートキーが必要な理由

AWS

…を保持しているので、クエリのフィルタ条件などに合致しないブロックを読み飛ばすことができる。ソートキーでソートされていないと同じ値のデータがあちこちのブロックに散らばるため、ソートされてない場合より読取りブロックが増える。 Will sorting improve zone maps? A zone map exists for each 1 MB block, and consists of in-memory metadata that tracks the minimum…

Amazon Redshift で結合キーでKEY分散 vs EVEN 分散

AWS

…2:30.000) クエリID取得 =# select pg_last_query_id(); =# \gset =# select * from svl_query_summary where query = :pg_last_query_id order by stm, seg, step; userid | query | stm | seg | step | maxtime | avgtime | rows | bytes | rate_row | rate_byte…

Amazon Redshift で2列で内部結合しているクエリで分散キー指定列の違いによる比較

AWS

…列で内部結合しているクエリで、分散キーが2列のうち偏りのある列にした場合と偏りのない列にした場合の比較。 検証結果 偏りのある列(l_shipdate)が分散キー select sum(a.l_quantity), count(a.l_orderkey), min(a.l_shipdate), max(a.l_shipdate) from lineitem_dk_shipdate1 a join lineitem_dk_shipdate2 b on a.l_orderkey …

Amazon Redshift で結合キーに関数を使うとソートマージ結合にならないパターン

AWS

…5:47.123) クエリIDを取得する select pg_last_query_id(); \gset SVL_QUERY_SUMMARY でボトルネックを確認 maxtime より Segment 0 で約9分(538秒)、Segment 1で約9分(552秒)、Segment 3-4 で約17分(100秒)要している。 Segment 1 で、ハッシュ結合でワークメモリを約24GB(workmem=26,732,396,544 byte)使ってソートし、メモリ上だけで…

Amazon Redshift のソートマージ結合とハッシュ結合を比較する

AWS

…tity > 1; クエリIDを取得する =# select pg_last_query_id(); =# \gset pg_last_query_id ------------------ 26539 SVL_QUERY_SUMMARY でボトルネックを確認 Segment 0 で64秒要しており、ここで最も時間を使っている。 ソートマージ結合で結合されている(mjoin tbl=1043) =# select * from svl_query_summary where …

Amazon Redshift でソートキーの順番による IO 量の差を見る

AWS

…0:02.857) クエリIDを取得 =# select pg_last_query_id(); =# \gset SVL_QUERY_SUMMARY でボトルネックを確認 Segment 0 で2.6秒要しており、ここで最も時間を使っている。 rows_pre_filter(5,473,383,140)- rows(5,468,882,659) = 4,500,481、ストレージから不要な行の読み込みは少ない =# select * from svl_query_summa…

Amazon Redshift でクエリを実行しても SVL_QUERY_METRICS に記録されない場合

AWS

… 秒未満で実行されるクエリセグメントは記録されない場合があるためと思われる。 STL_QUERY_METRICS Contains metrics information, such as the number of rows processed, CPU usage, input/output, and disk use, for queries that have completed running in user-defined query queues (servic…

Amazon Redshift でソートキーによる IO 削減ができているかどうかを確認する

AWS

…teast-1'; クエリを実行する select count(*) from lineorder where lo_shipmode = 'AIR' or lo_shipmode = 'SHIP'; count ----------- 171447349 (1 row) クエリIDを取得する SELECT PG_LAST_QUERY_ID(); \gset pg_last_query_id ------------------ 15084118 (1 row) svl_qu…

シンプルでシステマチックな Amazon Redshift クエリチューニング

AWS

…データドリブンで遅いクエリのボトルネック(どこに時間がかかっているか)を分析する方法を紹介します。 クエリを実行して情報を収集する yoheia/aws/redshift/redshift_measuring_query_exec_time at master · yoheia/yoheia · GitHub psql での実行を想定 -- 現在時刻を取得する select getdate(); -- 実行時間の計測を有効にする \timing on -- pager を O…

Presto のクエリチューニング

SQLパフォーマンスチューニングのいろは - PLAZMA by Treasure Data EXPLAIN ANALYZE — Presto 0.278 Documentation

シンプルでシステマチックな Amazon Redshift クエリチューニング

AWS

クエリのボトルネック分析の流れ STL_WLM_QUERY でクエリのキュー待ち時間と実行時間を確認する。 子クエリに分割されている場合は子クエリ別に確認できる。 SVL_QUERY_METRICS でクエリの実行時間の内訳と仕事量(CPU時間、IO量、中間結果の書出しサイズ)を確認する。 SVL_QUERY_SUMMARY でクエリのボトルネックを大枠で分析する。 SVL_QUERY_REPORT でクエリのボトルネックの詳細を分析する。 その他 SVV_TABLE_INF…

Redshift で WLM キュー待ち時間に上限があるか

AWS

…out が 0 だとクエリはタイムアウトしない。statement_timeout はWLMでのキュー待ち時間と実行時間の両方を含む。キュー待ち時間に上限を設定したい場合は QMR で query_queue_time を使用する。 The statement_timeout value is the maximum amount of time a query can run before Amazon Redshift terminates it. This time i…

Redshift の QMR の設定は動的に適用される

AWS

…0800(3時間)でクエリを実行すると中断されない。 $ psql "host=redshift-cluster-poc-ads.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=dev port=5439" psql (13.7, server 8.0.2) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA…

Redshift で中間結果をディスクに書き出しているクエリを調べる

AWS

…間結果書き出しが多いクエリを調べる(実行中のクエリ) クエリ select query, sum(blocks_to_disk) as mbytes, max(max_blocks_to_disk) as max_mbytes, min(starttime) as query_start_time from STV_QUERY_METRICS where segment = -1 -- セグメントレベルの行を除外 and step_type = -1 -- ステップレベルの行…

Redshift で ISOLATION LEVEL を SERIALIZABLE から SNAPSHOT に変更する

AWS

…FO ビューに対してクエリを実行します。 SELECT datname, datconfig FROM pg_database_info; データベースごとの分離レベルは、concurrency_model キーの隣に表示されます。1 の値は、SNAPSHOT を表します。2 の値は、SERIALIZABLE を表します。 CREATE DATABASE - Amazon Redshift 直列化可能分離エラーを修正する方法 エラー: 1023 詳細: Redshift テー…

psql で標準入力で渡されたクエリを実行する

AWS

…で標準入力で渡されたクエリを実行したい場合、-f オプションに - を指定すればよい。 ドキュメント -f filename --file=filename(中略)filenameに-(ハイフン)を指定すると、標準入力からEOFを示すもの、または\qメタコマンドまで読み取られます。 これは対話的入力をファイルからの入力と混在させるために使うことができます。 ただし、この場合、Readlineは使われないことに注意してください(-nが指定された場合と同様です)。 psql 使用…

Redshiftでクエリの中間結果が書き出された箇所を調べる

AWS

…rder; 実行中のクエリのクエリIDを調べる dev=# select trim(u.usename) as user, s.pid, q.xid,q.query,q.service_class as "q", q.slot_count as slt, date_trunc('second',q.wlm_start_time) as start,decode(trim(q.state), 'Running','Run','QueuedWaiting','Queue','Re…

Amazon Managed Grafana で Redshift のクエリをモニタリングする

AWS

…Redshift のクエリをモニタリングしてみた。ダッシュボードの定義(JSON)をインポートすると以下のようなダッシュボードを作成できる。 ダッシュボードの見た目 Redshift の設定 Redshift クラスターを選択し、[Actions]-[Manage tags] を選択する。 Key: GrafanaDataSource Value: true AMG から Redshift に接続するための DB ユーザーを作成する。 Query editor か psql …

Redshift で COPY コマンド実行時の query_temp_blocks_to_disk を調べる

AWS

…sk > 1MB のクエリを中止するよう設定した上で、分散キー・ソートキーが指定されたテーブルに非圧縮で100GB超のファイルを COPY コマンドでロードしたところ、ディスクベースのソートが発生して、クエリが中止された。 エラーメッセージ dev# copy lineorder from 's3://awssampledb-yoheia/large_file/lineorder' iam_role 'arn:aws:iam::123456789012:role/redshi…