ablog

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

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

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

  • XID が2億(200M)に達すると回収されて下がっている。
  • Statistics は Maximum を選択する(Sum にすると5分間の合計値になるため)


CloudWatch アラームで監視する場合は 3 億くらいにしておくとちょうどえぇかと思う。

環境

  • Aurora PostgreSQL 4 (PostgreSQL 12.6)
  • パラメータグループで autovacuum_freeze_max_age はデフォルトのまま

参考

autovacuumの強制実行
データベース内で一番古いトランザクションIDと現在のトランザクションIDとの差(ageと言います)が2億個(autovacuum_freeze_max_ageパラメーターのデフォルト値)を超えるとautovacuumが強制的に実行され、想定外にデータベースの負荷が高くなることがあります。なお、利用できる残りのトランザクションIDの数が少なくなると、新たなトランザクションIDの割り振りが抑止され、インスタンスがエラーで操作できなくなることもあります。

パフォーマンスチューニング9つの技 ~「基盤」について~|PostgreSQLインサイド : 富士通

autovacuum_freeze_max_age (integer)
Specifies the maximum age (in transactions) that a table's pg_class.relfrozenxid field can attain before a VACUUM operation is forced to prevent transaction ID wraparound within the table. Note that the system will launch autovacuum processes to prevent wraparound even when autovacuum is otherwise disabled.

Vacuum also allows removal of old files from the pg_xact subdirectory, which is why the default is a relatively low 200 million transactions. This parameter can only be set at server start, but the setting can be reduced for individual tables by changing table storage parameters. For more information see Section 24.1.5.

PostgreSQL: Documentation: 12: 19.10. Automatic Vacuuming

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

Amazon Aurora の CloudWach メトリクス VolumeReadIOPs/VolumeWriteIOPs は5分間の合計、IOPS(秒間IO回数)は300秒(5分)で割って算出する必要がある。

  • メトリクス:VolumeReadIOPs
  • コンソール名:ボリューム読み取りの IOPS (カウント)
  • Applies to:Aurora MySQL および Aurora PostgreSQL
  • 単位:5 分あたりのカウント
  • 説明:
    • 5 分以内の、クラスターボリュームからの課金読み取り I/O オペレーションの回数。
    • 課金読み取りオペレーションはクラスターボリュームレベルで計算され、Aurora DB クラスター内のすべてのインスタンスから集計された後、5 分おきに報告されます。この値は、5 分間にわたる読み取りオペレーションメトリクスの値を受け取ることによって計算されます。課金読み取りオペレーションメトリクスの値を受け取って 300 秒で割ることで、1 秒あたりの課金読み取りオペレーションの回数を決定できます。例えば、課金読み取りオペレーションが 13,686 を返す場合、1 秒あたりの課金読み取りオペレーションは 45 (13,686 / 300 = 45.62) です。
    • バッファキャッシュにないデータベースのページをリクエストするクエリの課金読み取りオペレーションが発生します。これはストレージからロードする必要があります。課金読み取りオペレーションはストレージからクエリの結果が読み取られるのと同様に急増することがありますが、その後バッファキャッシュにロードされます。
    • ヒント Aurora MySQL クラスターがパラレルクエリを使用している場合、VolumeReadIOPS 値が増加することがあります。パラレルクエリでは、バッファプールは使用されません。したがって、クエリは高速ですが、この最適化された処理により、読み取り操作とそれに関連する料金が増加する可能性があります。
Amazon Aurora の Amazon CloudWatch メトリクス - Amazon Aurora

固定長ファイルの改行を fold コマンドで補正したメモ

Redshift のシステムビュー svv_table_info の情報を取得してもらったら、変なところで改行されてたので、補正したメモ。

  • 各行の行長(文字数)を調べる。
% perl -nle 'print length($_)' svv_table_info.txt
271
95
271
95
271
95

...
  • svv_table_info.txt から行長が異なるヘッダとフッタを削除する。
  • 改行を削除する
% perl -pe 's/\n//g' svv_table_info.txt >svv_table_info_nobr.txt
  • 366 文字目に改行を入れる
% fold -b366 svv_table_info_nobr.txt > svv_table_info_br.txt 

povo で機種変更する方法

  • au Online Shop から機種を選択し、商品詳細ページ内にある“スマホ単体購入の場合はこちら”をクリック
    • 例:iPhone 13 スターライト 128GB
  • 支払い方法を選択する:一括支払い
  • 機種購入サポート:au で購入した現行 iPhone を買い取ってもらう場合は入力する
  • 契約者情報を入力:氏名/メールアドレス/生年月日/性別/住所/電話番号
  • 受取方法:郵送先住所を指定
  • 注文内容の確認用パスワードの登録: 申し込み完了後、注文内容の確認や商品出荷状況を確認する際に必要となるパスワード
  • 2日後に届いた
  • 電源を入れてウイザードに従ってセットアップを進める
    • 途中で iCloud からのリストアを選択する
  • Apple Watch のペアリングを変更する
    • 元のiPhoneがないと初期化しないといけない
  • 下取りプログラムの郵便物が届いたら、旧iPhoneを初期化して返送する

csplit で 99 ファイル以上に分割する

csplit コマンドは正規表現で特定の文字列が出現したらファイルを分割することができる。
デフォルトで分割数は最大で 99 ファイルまでだが、分割数の上限を増やしたい場合は -n オプションで桁数を指定すればよい。

  • ".sql" という文字列が出現した行でファイルを分割する
  • n: プリフィックスの後につける連番の桁数
  • f: 分割後のファイルのプレフィックス
  • k: エラーが発生しても分割したファイルを削除しない
% csplit -k -n 3 -f prefix_ query_perf.log '/.*\.sql/' {999}

環境