ablog

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

AWS

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 のリストア時間を計測してみた

AWS

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

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メタコマンドまで読み取…

Redshift のDATE型の暗黙的キャストについて

AWS

テーブル作成 create table public.test1( date_col date ); データ挿入 insert into test1(date_col) values('2022-01-01'); insert into test1(date_col) values('2022-02-01'); insert into test1(date_col) values('2022-03-01'); insert into test1(dat…

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

AWS

Redshift で TEMP TABLE を作成して、中間結果をディスクに書き出す。 dev=# CREATE TEMP TABLE TEST1 DISTSTYLE EVEN SORTKEY(lo_orderkey) AS SELECT * FROM lineorder; 実行中のクエリのクエリIDを調べる dev=# select trim(u.usename) as user, s.pid, q…

Redshift で列長に合わせて文字列を切詰める

AWS

You can't use SUBSTRING to predictably extract the prefix of a string that might contain multi-byte characters because you need to specify the length of a multi-byte string based on the number of bytes, not the number of characters. To ext…

Redshift でセッションレベルで変更可能なパラメータ

AWS

SET サーバー設定パラメータの値を設定します。SET コマンドを使用して、現在のセッションまたはトランザクションのみの期間の設定をオーバーライドします。 SET - Amazon Redshift SET コマンドを使用して、現在のセッションの期間だけ設定をオーバーライド…

Redshift における aws_teradata_ext の挙動を確認したメモ

AWS

Redshift における AWS Schema Conversion Tool(SCT) の extension pack の aws_teradata_ext の挙動を確認したメモ。 sample=# select aws_teradata_ext.TRUNC('20220818', 'RM'); trunc ------------ 2022-08-01 (1 row) sample=# select aws_teradata_ext…

Redshift でオブジェクト権限を持つグループ・ユーザーを確認する

AWS

select a.relname, b.nspname, a.relacl from pg_class a, pg_namespace b where a.relnamespace = b.oid and a.relacl is not null and b.nspname not like 'pg_%';

Redsfhit でユーザーとグループの一覧を確認する

AWS

select usename, usesysid, usesuper, useconfig, groname, grosysid, grolist from pg_user, pg_group where pg_user.usesysid = any(pg_group.grolist); 参考 amazon web services - Redshift: How to list all users in a group - Stack Overflow

Redshift クラスターに awslabs - amazon-redshift-utils の AdminViews を作成する

AWS

Redshift クラスターに awslabs - amazon-redshift-utils の AdminViews を作成する。 % git clone https://github.com/awslabs/amazon-redshift-utils.git % cd amazon-redshift-utils/src/AdminViews % ls -1 *.sql > run_all.sql % perl -i -pe 's/^/\\i …

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

AWS

Amazon Managed Grafana(AMG) で Redshift のクエリをモニタリングしてみた。ダッシュボードの定義(JSON)をインポートすると以下のようなダッシュボードを作成できる。 ダッシュボードの見た目 Redshift の設定 Redshift クラスターを選択し、[Actions]-[M…

SCT で Teradata の拡張パックを Redshift にインストールする

AWS

SCTインストール SCT 1.0 Build 655 をダウンロードして、インストールする。 AWS SCT のインストール、検証、更新 - AWS Schema Conversion Tool JDBC 4.2–compatible driver version 2.1 (without the AWS SDK) をダウンロードする。 Amazon Redshift JDBC…

SCT on EC2 Windows から Redshift に接続する

AWS

macOS版 SCT がなくなったので、SCT on EC2 Windows で使う手順。 macOS へアプリケーションインストール AWS CLI v2 Session Manager Plugin Microsoft Remote Desktop EC2インスタンス作成 EC2(Windows)インスタンス作成 AMI: Microsoft Windows Server …

Redshift に import した UDF を確認する

AWS

Redshift に import した UDF を確認する。 sample=# select * from pg_library a, pg_language b where a.language_oid = b.oid; name | language_oid | file_store_id | owner | lanname | lanispl | lanpltrusted | lanplcallfoid | lanvalidator | lanacl…

Redshift で特定スキーマの持つファンクションを調べる

AWS

SQL select a.proname, a.proacl, a.pronamespace, b.nspname from pg_proc a, pg_namespace b where b.nspname = 'aws_teradata_ext' and a.pronamespace = b.oid order by a.proname; 実行結果 proname | proacl | pronamespace | nspname ---------------…

Redshift で毎日決まった時間に一時停止する

AWS

IAMロールを作成する IAMロール RedshiftPauseResumeRole を作成 Permissions policies IAMポリシー RedshiftPauseResumeRolePolicy を作成してアタッチ { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action":…

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

AWS

Redshift で COPY コマンド実行時に query_temp_blocks_to_disk が使われることがあることを確認した。 QMR(Query Monitoring Rule) で query_temp_blocks_to_disk > 1MB のクエリを中止するよう設定した上で、分散キー・ソートキーが指定されたテーブルに非…

Redshift のデータシェアリング設定手順

AWS

producer 側 create datashare test_db; alter datashare test_db set publicaccessible = true; alter datashare test_db add schema sample1, sample2; -- consumer 側で "select current_namespace;" を実行し、以下のクエリの <name space> に指定する grant usage o</name>…

Redshift で CREATE TEMP TABLE は QMR の Memory to disk (1 MB blocks) にひっかかる

AWS

Redshift で CREATE TEMP TABLE は QMR(Query Monitoring Rule) の Memory to disk (1 MB blocks) の制限にひっかかることを確認した。 準備 QMR の設定 テーブルを作成する CREATE TABLE lineorder ( lo_orderkey INTEGER NOT NULL, lo_linenumber INTEGE…

Redshift を時限で一時停止・起動する設定

AWS

Redshift クラスターを土日&夜間に一時停止しコストを削減する - サーバーワークスエンジニアブログ