質問: 特定のモデルがどの程度の容量を消費するかを確認するために生成されたインスタンスとそのモデルが`has_many`で持つ関連付けられたものを含めたディスク容量を取得する方法はありますか? 例えば ``` class User < ActiveRecord::Base has_many :posts end ``` とある時に`post`に1万件テストデータを入れて実際にどの程度のバイト数を消費するのかを確認したく思っています。 環境はPostgresqlです。
回答: テーブルの各列のデータサイズ (`INTEGER` なら4バイト、`TEXT` なら4バイト+長さ、など) を合計したものに各種メタ情報の容量を追加することで一応求めることは可能です。実際のディスク容量を計算する場合には、さらにパディング情報も考慮する必要があるかもしれません。 厳密に求めようとするとかなり面倒なので、ある程度割り切って概算してしまうのが良いと思います。 少し情報は古いですが、データファイルの内部構造と容量計算については以下のPDFに詳しいです。(これ以上詳しい情報はソースコードを読むくらいしか無いと思います) 実際には、想定データ (一部圧縮されるデータがあるので、実際に利用されるデータに近いものが望ましい) を大量に突っ込んでサイズを計測するのが楽な気はしますが。