ablog

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

2022-01-01から1年間の記事一覧

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

AWS

AWS Analytics Advent Calendar 2022 の 20 日目のエントリーです。 Amazon Redshift のシステムテーブル・ビューからデータドリブンで遅いクエリのボトルネック(どこに時間がかかっているか)を分析する方法を紹介します。 クエリを実行して情報を収集する…

RDS Oracle の Performance Insights は AWR や ASH を使っていない

AWS

RDS Oracle の Performance Insights(PIs) は AWR や ASH を使っていない。なぜなら、AWR や ASH のない SE2 でも使える This post discusses the Oracle performance analysis offerings available within Oracle SE. We can use Oracle Statspack, an opti…

Presto のクエリチューニング

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

Mac でテキスト中の複数語を一括置換する

Mac

Mac でテキスト中の複数語を一括置換したい場合、CotEditor でできる。 検索語と置換語のマッピングを JSON で定義して読み込んだり、逆に JSON で出力できたりする。 https://kunipon.com/2578

Redshift の Snapshot Isolation の挙動

AWS

Delete + Insertをトランザクション(begin/end)で囲んで実行中に他セッションからの Insert はブロックされ(待たされ)る。 Delete + Insertするセッション % psql -a "host=redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.co…

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

AWS

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

tdbench を利用する

Teradata のサイトでユーザー登録する。 ログインして、https://downloads.teradata.com/ から tdbench をダウンロードする。 解凍する。 $ unzip TdBenchV8.00.16.06.zip JDK をインストールする。 $ sudo yum install -y java-11-amazon-corretto SQL スク…

Logicool MX ERGO(MXTB1s) で MacBook Pro でスクロールできない

事象 MacBook Pro で Logicool MX ERGO(MXTB1s) でスクロールできない。 解決策 [システム環境設定]-[セキュリティとプライバシー]-[アクセシビリティ]で、Logi Options と Logi Options Daemon をチェックする。 環境 Logicool Wireless Trackball MX ERGO(…

FreeStyleWiki のインストール

Apache をインストールする インストールする。 $ sudo yum -y install httpd 自動起動するよう設定する。 $ sudo systemctl enable httpd.service 自動起動が有効化されていることを確認する。 $ sudo systemctl is-enabled httpd.service enabled 起動する…

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

AWS

Redshift のパラメータ statement_timeout が 0 だとクエリはタイムアウトしない。statement_timeout はWLMでのキュー待ち時間と実行時間の両方を含む。キュー待ち時間に上限を設定したい場合は QMR で query_queue_time を使用する。 The statement_timeout…

Redshift の Concurrency Scaling の料金を計算する

AWS

マネジメントコンソールから [Amazon Redshift]-[Clusters]-[クラスターを選択]-[Query Monitoring]-[Workload concurrency]-[Concurrency scaling usage] で確認できる。 sampledb=# select * from SVCS_CONCURRENCY_SCALING_USAGE limit 10; start_time | …

Redshift でユーザーが使用可能なストレージ容量を制限する

AWS

容量制限つきのスキーマを作成して、ユーザーが利用できるようにする。 superuser でスキーマ作成権限を持つユーザーを作成する。 $ psql -a "host=redshift-cluster-poc-ads.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=sampledb …

Redshift でユーザーに CREATE SCEMA 権限を付与する

AWS

Redshift でユーザーに CREATE SCEMA 権限を付与するには、CREATE SCEMA 権限を持つ Role を作成して、ユーザーに Role を付与する。 $ psql -a "host=redshift-cluster-poc-ads.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=sample…

Redshift でテーブルの制約を調べる

AWS

SELECT con.* FROM pg_catalog.pg_constraint con INNER JOIN pg_catalog.pg_class rel ON rel.oid = con.conrelid INNER JOIN pg_catalog.pg_namespace nsp ON nsp.oid = connamespace WHERE nsp.nspname = '<schema name>' AND rel.relname = '<table name>'; ... # \d+ observation</table></schema>…

Redshift の svv_table_info の skew_sortkey1

AWS

svv_table_info の skew_sortkey1 の値は小さいほどよい。仮に skew_sortkey1 が 5 の場合、where句の条件でフィルタする前に他のカラムのデータを5ブロック読込む。 Ratio of the size of the largest non-sort key column to the size of the first column…

Redshift のデフォルトタイムゾーンを変更する

AWS

Redshift のユーザーレベルかセッションレベルでデフォルトタイムゾーンをUTCからJSTなどに設定するととができる。 クラスターレベルでは設定できない(2022/9/20時点で)。 参考 https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_timezone_config.h…

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

AWS

Redshift の QMR の変更が動的に適用される(再起動不要)ことを確認した。 QMR で Query execution time (seconds) > 10800(3時間)でクエリを実行すると中断されない。 $ psql "host=redshift-cluster-poc-ads.********.ap-northeast-1.redshift.amazonaw…

Redshift のパラメータグループを変更すると再起動が必要

AWS

マネジメントコンソールで [Amazon Redshift]-[Clusters]でクラスターを選択し、[Properties]-[Database configurations]-[Edit]-[Edit parameter group]でパラーメータグループを変更すると、 再起動するまで適用されないパラメータがある。例えば、WLM は…

Redshift はデータが変更されると自動的にスナップショットが取得される

Redshift の自動スナップショットは8時間ごとか5GBのデータが変更されると取得する。 自動スナップショットがクラスターに対して有効になると、Amazon Redshift は定期的にそのクラスターのスナップショットが作成されます。デフォルトでは、Amazon Redshif…

Redshift のリストア時間を計測してみた

AWS

11.1TBのスナップショットを ra3.4xlarge 2node にリストアしたところ、約3分で終了した。 手順 [Amazon Redshift]-[Clusters]-[Snapshots] で、リストアするスナップショットを選択、[Restore snapshot]-[Restore to provisioned cluster] を選択。 環境 ra…

GitHub の MarkDown の記法

https://docs.github.com/ja/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax

こんな Wiki がほしい

FreeStyleWiki のようなデザイン MarkDown で記述できる(MarkDownにこだわりはない) git でリビジョン管理できる 静的 HTML を生成できる 画像を表示できる

Redshift で VACUUM の状況を確認するシステムテーブル・システムビュー

AWS

Amazon Redshift での VACUUM のパフォーマンスに関する問題のトラブルシューティング STL_VACUUM - Amazon Redshift SVV_VACUUM_SUMMARY - Amazon Redshift SVV_VACUUM_PROGRESS - Amazon Redshift

Redshift の SVV_TABE_INFO の UNSORTED と VACUUM_SORT_BENEFIT が NULL になるとき

AWS

Redshift の SVV_TABE_INFO の UNSORTED と VACUUM_SORT_BENEFIT が NULL になっているテーブルは ソートキーを指定していない説。 SVV_TABLE_INFO - Amazon Redshift

Redshift のスナップショット取得時間

AWS

ほとんどデータを変更していないクラスターで数分程度。 ra3.4xlarge x 2ノード で、 データサイズは8TB程度。増分スナップショットなので速い模様。 参考 Amazon Redshift は、前回のスナップショット以降にクラスターに加えられた増分変更を追跡する、増分…

Redshift で Query cancelled on user's request の原因調査方法

AWS

Redshift で Query cancelled on user's request が発生した場合の原因調査方法 Amazon Redshift でクエリが中止されました

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 -- セグメントレ…

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

AWS

書式 ISOLATION LEVEL を SNAPSHOT に変更する ALTER DATABASE database_name ISOLATION LEVEL SNAPSHOT 現在の ISOLATION LEVEL を確認する concurrency_model が 1 なら SNAPSHOT、2 なら SERIALIZABLE SELECT datname, datconfig FROM pg_database_info; …

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

AWS

psql で標準入力で標準入力で渡されたクエリを実行したい場合、-f オプションに - を指定すればよい。 ドキュメント -f filename --file=filename(中略)filenameに-(ハイフン)を指定すると、標準入力からEOFを示すもの、または\qメタコマンドまで読み取…

date_add で "TypeError: Column is not iterable" が発生する

事象 PySpark で、下記のようなカラムがあったとして | date: Date | days: Int | |------------|-----------| | 2022-08-25 | 3 | | 2022-08-26 | 2 | | ... | ... | date 列の days 後の日付を出したいが、 df.withColumn( 'duedate', F.date_add(F.col('d…