ablog

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

AWS

Redshift で分散スタイル変更時の VACUUM 要否

AWS

Redshift で分散スタイル変更時の VACUUM 要否を確認してみた。 EVEN分散->KEY分散に変更した場合 テーブル作成 dev=# drop table public.customer cascade; dev=# create table public.customer ( c_custkey integer not null, c_name varchar(25) not null…

Redshift で SPLIT_TO_ARRAY 関数でデリミタ区切りのリストを横縦変換する

AWS

テーブルのフィールドにカンマ区切りのデータを登録する。 dev=# create table pivot_test (id int, txt varchar); CREATE TABLE dev=# insert into pivot_test values (1,'AZ, Sidmar,1'),(2,'Kaihatsu,Suarez,9'),(3,'Azuma,Neymar,11'),(4,'OZ,Iniesta,8'…

Redsfhit でどのグループにユーザーが所属しているか確認する

AWS

クエリ select pg_user.usename, pg_user.usesysid, pg_group.groname, pg_group.grolist from pg_user,pg_group; 実行結果 usename | usesysid | groname | grolist ------------------------------+----------+----------------------------+--------- rds…

AWS CLI v2 のページャーを無効化する

AWS

Config で設定 恒久的にページ分割を無効化したい場合は、~/.aws/config ファイルに以下のように書きます。 ~/.aws/config [default] cli_pager= export コマンドで設定 一時的にページ分割を無効化したい場合は、export や setx コマンドで以下のように設定…

Redshift のパラメータグループを AWS CLI で設定する

AWS

マネコンでパラメータグループやワークロード設定を行う。 設定したパラメータを表示する % aws redshift describe-cluster-parameters --parameter-group-name poc-auto-wlm (中略) { "ParameterName": "max_concurrency_scaling_clusters", "ParameterVa…

Redshift でテーブルにアクセス権があるのに "permission denied for schema ..." と怒られる

事象 ユーザーにテーブルに対する権限を付与しているのに "permission denied for schema ..." と怒られる。 こんな感じでアクセス権を付与しているが、 % psql "host=redshift-cluster-poc.********.ap-northeast-1.redshift.amazonaws.com user=awsuser db…

Redshift でワークロードキュー毎のクエリ同時実行数を確認する

AWS

クラスター全体での実行中とキュー待ちのクエリ数 マネジメントコンソールで[Redshift]-[クラスターを選択]-[クエリのモニタリング]-[ワークロードの同時実行] オレンジ色:実行中のクエリ数 青色:ワークロードキュー待ちのクエリ数 「キューに入れられたク…

psql on EC2 で Redshift のクエリの結果セットが大きい場合のボトルネックを調べる

AWS

サマリー EC2インスタンス(t2.micro)から psql で Redshift に結果セットが100GB以上と大きい select 文を発行すると、CloudWatch メトリクスでネットワーク受信量 (バイト数)が約500MB/分になる。 m5.large では約3.2GB/分のスループットが出た。 t2.micr…

Redshift の superuser のパスワードを変更する

AWS

Redshift の superuser のパスワードはマネコンまたは AWS CLI から変更できる Amazon Redshift コンソールを使用して superuser アカウントのパスワードをリセットする Amazon Redshift コンソールを使用してsuperuser (または adminuser) のパスワードを変…

psql で Redshift から定期的に S3 に UNLOAD する

AWS

psql で Redshift から定期的に S3 に UNLOAD したメモ。 Redshift に接続する。 export LC_ALL=C /usr/pgsql-13/bin/psql "host=redshift-cluster-2.********.ap-northeast-1.redshift.amazonaws.com port=5439 dbname=dev user=awsuser" 10秒間隔で tv_que…

Amazon Redshift の VACUUM について

AWS

実行権限 テーブルの所有者またはスーパーユーザーのみがテーブルにバキューム処理を実行できる。 以下に、VACUUM に必要な権限を示します。 スーパーユーザー VACUUM の権限を持つユーザー テーブルの所有者 テーブルの共有先であるデータベース所有者 VACU…

Redshift で DROP 文を生成する

AWS

Redshift で存在するテーブル、ビュー、スキーマの DROP 文を生成する テーブル select 'drop table '||schemaname||'.'||tablename||' cascade;' from pg_tables where schemaname not in ('public', 'information_schema', 'catalog_history') and scheman…

Redshift で pg_table_def に問い合わせてテーブルのソートキーを調べる

AWS

Redshift で pg_table_def に問い合わせるとテーブルのソートキーを調べることができる。 調べたいスキーマを set search_path to スキーマ名>; で指定してやる必要がある。スキーマ一覧は psql なら \dn でリストを表示できる。 クエリ \pset pager set sea…

Redshift で複数カラムの圧縮エンコードを1つの ALTER 文で変更する

AWS

例 alter table schema1.test1 alter column col1 encode raw, alter column col2 encode raw, alter column col3 encode raw; 書式 ALTER TABLE - Amazon Redshift | ALTER COLUMN column_name ENCODE encode_type, .....;

(Aurora) PostgreSQL の Transaction ID は2億に達するとAUTO VACUUM で自動回収される

(Aurora) PostgreSQL の Transaction ID(XID) は AUTO VACUUM で autovacuum_freeze_max_age (デフォルトは2億)に達すると自動的に回収される。 以下は実際の CloudWatch メトリクスの MaximumUsedTransactionIDs のグラフの推移。 XID が2億(200M)に達…

Amazon Aurora の CloudWatch メトリクス VolumeReadIOPs/VolumeWriteIOPs は5分間の合計

Amazon Aurora の CloudWach メトリクス VolumeReadIOPs/VolumeWriteIOPs は5分間の合計、IOPS(秒間IO回数)は300秒(5分)で割って算出する必要がある。 メトリクス:VolumeReadIOPs コンソール名:ボリューム読み取りの IOPS (カウント) Applies to:Auro…

Amazon RDS のメモリ使用量を確認する

AWS

Amazon RDS のメモリ使用状況を調べる際に確認すべきポイント。以下のスクリーンショットは Aurora MySQL。 CloudWatch メトリクス Freeable Memory (実質メモリ使用量)を確認する。/proc/meminfo に MemAvailable に相当する(参考)。メモリ使用量を監視…

redis-rb の接続モードによる ElastiCache(Redis) フェイルオーバー時の復旧時間を計測してみた

ElastiCache(Redis) に redis-rb からアクセスし、接続モード(cluster or host)によるフェイルオーバー時のリカバリ時間を計測してみた。 検証結果 $ CONN_OPT=host bash exec_redis-rb_sample.sh > redis-rb_sample_cluster_`date '+%Y-%m-%d-%H%M%S'`.lo…

SOSP21 で best paper 賞を受賞した S3 の論文を読んでみる

AWS

SOSP21 で best paper 賞を受賞した S3 の論文 "Using Lightweight Formal Methods to Validate a Key-Value Storage Node in Amazon S3" を読んでみる。 Abstract This paper reports our experience applying lightweight formal methods to validate the …

AWS DMS タスク停止時に PostgreSQL の WAL が溜り続けないようにする

AWS

AWS DMS のソースが PostgreSQL で CDC を使う場合、DMS タスクを停止すると、PostgreSQL の WAL が溜まってストレージ使用量が増える。 レプリケーションスロットを削除すると、WAL が削除されるようになる。 SELECT * FROM pg_replication_slots; SELECT p…

AWS DMS のチューニング

AWS

AWS DMS タスクでターゲットレイテンシーが高い場合のトラブルシューティング Best practices for AWS Database Migration Service - AWS Database Migration Service Debugging Your AWS DMS Migrations: What to Do When Things Go Wrong? (Part 3) | AWS …

CloudWatch アラームを AWS Chatbot 経由で Slack に通知する

AWS

CloudWatch アラームを AWS Chatbot から Slack に連携して通知してみた。 CloudWatch アラームは Redshift への接続数 > 5 というシンプルなものにした SNS トピックは KMS カスタマー管理型キーで暗号化した(マネージドキーは Cloudwatch からアクセスで…

CloudWatch アラームから SNS への通知で KMS から AccessDeniedException と怒られる

AWS

事象 CloudWatch アラームから SNS への通知で KMS から AccessDeniedException と怒られる アクション arn:aws:sns:ap-northeast-1:123456789012:cloudwatch-test-sns の実行に失敗しました。エラーが発生しました: "null (Service: AWSKMS; Status Code: 4…

Amazon Redshift でクエリの単体性能を計測するスクリプト

AWS

yoheia/aws/redshift/redshift_measuring_query_exec_time at master · yoheia/yoheia · GitHub

Amazon Redshift のクエリモニタリングルールで長時間実行クエリーを中止する

Amazon Redshift の WLM クエリモニタリングルールで、一定時間以上実行されているクエリを中止してみた。 以下の例では 10 秒以上要したクエリを中止している。 実行結果 [ec2-user@ip-172-31-0-222 ~]$ export LC_ALL=C [ec2-user@ip-172-31-0-222 ~]$ cat…

Invalid Action: The action s3:CreateMultipartUpload does not exist

AWS

事象 S3 バケットポリシーのアクションで s3:CreateMultipartUpload を許可すると "Invalid Action: The action s3:CreateMultipartUpload does not exist. " というエラーが出る。 原因 Create Multipart Upload に必要な権限は s3:PutObject。 s3:CreateMu…

Laravel からクラスターモード有効な ElastiCache(Redis) へのアクセスでタイムアウトが発生する

AWS

事象 Laravel からクラスターモード有効な ElastiCache(Redis) へのアクセスでタイムアウトが発生する 解決策 Laravel の database.php を以下の通り設定 'redis' => [ 'client' => env('REDIS_CLIENT', 'predis'), 'options' => [ 'cluster' => env('REDIS_…

Aurora PostgreSQL に RDS Proxy 経由で同時多重でクエリを発行中に Reader インスタンスを削除してみる

AWS

Aurora PostgreSQL に RDS Proxy 経由で同時多重でクエリを発行中に Reader インスタンスを削除すると、クエリでエラーが発生するか確認してみた。 To Do pgbench で -d オプション付きで試す。 検証手順 psql で接続する $ psql -h apg117-2-test-read-only…

RDS Proxy 経由で Aurora の Reader エンドポイントに同時多重でクエリを発行して均等分散することを確認した

AWS

Aurora PostgreSQL の Reader エンドポイントでクエリが均等分散しない場合 - ablog について RDS Proxy 経由だとどうだろうと思って検証してみたら、概ね均等分散してくれてた。 検証手順 psql で接続する $ psql -h apg117-2-test-read-only.endpoint.prox…

EC2のネットワーク帯域のベースラインの調べ方

AWS

以下のようにドキュメントに記載されている。 General purpose instances - Amazon Elastic Compute Cloud 参考 † これらのインスタンスでは、ネットワーク I/O クレジットメカニズムを使用しながら、帯域幅の平均使用率に基づき、ネットワーク帯域幅をイン…