質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

1回答

1679閲覧

PostgreSQL TOASTテーブルの容量見積について

karaage1234

総合スコア6

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2018/06/26 01:43

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文字挿入したところ、試算した結果と一致しました。

チャンクの末尾が小さい場合に、ページの隙間を埋めるようにチャンクを配置する処理があるのでしょうか?行数が少ない場合、影響は軽微ですが行数が多くなると誤差が大きくなってしまいます。

ご教示頂きたくよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

圧縮されたんじゃないでしょうか?

リンク先のさらにリンク先は、リンクが切れていますね。
アーカイブがあったので、貼っておきます。
徒然Postgres散策

投稿2018/06/26 03:03

sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

karaage1234

2018/06/27 10:32

ご回答頂きありがとうございます。 また、リンク先のアーカイブも貼って頂きありがとうございます。参考になります。 圧縮という線も考え再調査してみたのですが、圧縮はされていないようでした。 ToastテーブルのOidと同一のファイル名をバイナリで確認したところ、ランダムな英字3993文字が3つ分そのまま格納されていました。 ただ、格納される順番がチャンクID順ではなく、バラバラになっており また、格納自体も単純にファイルに追加するだけではなく、ページの予備?の0埋めされた部分に格納されている箇所がありました。 やはり何か1ページ内に4チャンク以上入るパターンがあるのではと考えていますが、、、的外れな見当でしたら申し訳ありません。 もう少し調べてみます。
sazi

2018/06/28 05:42

そこまで細かく確認したことはないので、アドバイス出来ずに申し訳ありません。 見積もりより大きくなるなら困りものですが、少ない分には良しとしておくかですね。 それより、vacuumとかclusterとかのほうが大量に資源要求するので、もしまだなら確認されたほうが良いかと思います。
karaage1234

2018/07/04 05:03

返事遅くなり申し訳ありません。 その後いろいろ調べましたが、特に何も分からず。。。 ひとまず、見積よりは大きくなるだろうとのことで現状の計算式を用いることとなりました。 >vacuumとかclusterとかのほうが大量に資源要求 PostgreSQL自体を触るのが初めてですので、分からないことが多く、、、 いろいろと教えて頂きありがとうございました。確認しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問