Redshiftとは
- 列指向ストレージ
- データ圧縮
- ゾーンマップ(各ブロックごとに最大・最小を持っているため高速にアクセス)
MySQLとの違い
MySQLでは、行を全て取ってくる。
その行をupdateするときは、ロックするため他のカラムが別プロセスで変更されない。
Redshiftのような列指向DBでは、別カラムが別プロセスによって変更される可能性がある。
ATOMIC性。
キャッシュ
クエリは、リーダノードでキャッシュしている
ANALYZE
分布状況やサイズによって、SQLのクエリプランを最適化。
テーブル統計を更新。
padb_fetch_sample: select * from テーブル名
が実行される。
VACUUM
データ削除後の解放。SORTKEYによるソート。
行スペースの再利用、再ソート。
vacuumでは、ソートとマージをする。
Vacuum テーブル名 integrity check before vacuum execution
Vacuum テーブル名 integrity check after vacuum execution
テーブルロックはしないので、読み書きと並列実行される。
Vacuum REINDEX
インターリーブソートキーを分析したあと、完全Vacuumを行う。
Vacuumよりも時間がかかる可能性。
Vacuumでディスクが上がる
PostgreSQLでは、追記型アーキテクチャを採用しているため、データを更新すると更新した履歴が追加されていく。
この不要になったものを解放するのが、Vacuum。テーブルを新規にコピーして、Vacuum処理をするため。
sortkeyについて
ソートキーは、where句で指定するものを選ぶ。
また、複数のソートキーを指定することができる。
ソートキーが、-1
インターリーブソートキーインターリーブを使用した場合は、ソートキーが負の値を持つことがある。
その場合、ソートキーの絶対値が列の位置になる。
SELECT * FROM pg_table_def WHERE tablename = 'テーブル名';
参考
PG_TABLE_DEF - Amazon Redshift
【新機能】Amazon Redshift の Interleaved Sorting機能を試してみた | DevelopersIO
Redshift の Interleaved Sort Key について解説してみる - Qiita