PostgreSQLのテーブル容量見積をしています。
テーブル本体とIndexテーブルの容量については、試算の結果と実際のテーブル容量がほぼ一致することが確認できました。
ただ、TOASTテーブルについては、特定のパターンで一致しなくなります。その条件が分からず難航しています。
計算式については以下を参考にしています。
https://teratail.com/questions/91217
その条件というのが、以下のテーブルを作成し、
create table test ( a char(3993) );
圧縮されないランダムな英字文字列を3993文字、3行分挿入します。
3993バイトですので1行が3チャンク、3行で9チャンクになります。1996,1996,1の組み合わせが3つです。
(以下のSQLで確認しました。)
SELECT chunk_id, chunk_seq, length(chunk_data) FROM pg_toast.pg_toast_●●●;
1ページに4チャンク収まるということですので、3ページになると考え、容量は3*8192=24576バイトになると考えたのですが、実際の容量は、16384バイトでした。
テーブルの型をa char(5988)とし、同様に英字文字列を5988文字挿入したところ、試算した結果と一致しました。
チャンクの末尾が小さい場合に、ページの隙間を埋めるようにチャンクを配置する処理があるのでしょうか?行数が少ない場合、影響は軽微ですが行数が多くなると誤差が大きくなってしまいます。
ご教示頂きたくよろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/27 10:32
2018/06/28 05:42
2018/07/04 05:03