sql >> データベース >  >> RDS >> PostgreSQL

Herokuの5MBのPostgreSQLにいくつのレコードを保存できますか?

    占有されているディスク容量

    ディスク上のスペースの計算は簡単ではありません。考慮に入れる必要があります:

    • テーブルごとのオーバーヘッド(小さい、基本的にシステムカタログのエントリは、Herokuでは影響しない場合があります)。

    • オーバーヘッド 行ごと(HeapTupleHeader)およびデータページごと(PageHeaderData)。マニュアルのページレイアウトの詳細。

    • データ型の配置でスペースが失われました 。

    • NULLビットマップ用のスペース 。 8列以下のテーブルでは事実上無料で、ケースには関係ありません。

    • デッドロー UPDATEの後 / DELETE

    • インデックスのサイズ 。主キーがありますよね?インデックスのサイズは、インデックス付きの列だけでオーバーヘッドが少ないテーブルのサイズと似ています。

    • それぞれのデータ型に応じた、データの実際のスペース要件 。マニュアルの文字タイプ(固定長タイプを含む)の詳細:

      短い文字列(最大126バイト)のストレージ要件は、1バイトに実際の文字列を加えたものです。これには、characterの場合のスペースパディングが含まれます。 。長い文字列には、1ではなく4バイトのオーバーヘッドがあります

      システムカタログpg_typeのすべてのタイプの詳細 。

    • データベースのエンコーディング 特に文字タイプの場合。 UTF-8は最大4バイトを使用して1文字を格納します(ただし、UTF-8でも、7ビットASCII文字は常に1バイトしか占有しません)。

    • TOAST など、ケースに影響を与える可能性のあるその他の小さなもの --64文字の文字列では影響しません。

    テストケースで計算

    見積もりを見つける簡単な方法は、テストテーブルを作成し、ダミーデータを入力して、データベースオブジェクトサイズ関数で測定することです::

    SELECT pg_size_pretty(pg_relation_size('tbl'));
    

    インデックスを含む:

    SELECT pg_size_pretty(pg_total_relation_size('tbl'));
    

    簡単なテストでは、次の結果が示されます。

    CREATE TABLE test(a text, b text);
    INSERT INTO test -- quick fake of matching rows
    SELECT chr((g/1000 +32)) || to_char(g%1000, 'FM000')
         , repeat (chr(g%120 + 32), 64)
    FROM   generate_series(1,50000) g;
    
    SELECT pg_size_pretty(pg_relation_size('test'));       -- 5640 kB
    SELECT pg_size_pretty(pg_total_relation_size('test')); -- 5648 kB
    

    主キーを追加した後:

    ALTER TABLE test ADD CONSTRAINT test_pkey PRIMARY KEY(a);
    
    SELECT pg_size_pretty(pg_total_relation_size('test')); -- 6760 kB
    

    したがって、最大で約 44k になると思います 36kのない行とその周辺 主キーのある行。




    1. ASP.NETはSqlConnectionを使用してMySQLを接続します

    2. これらのテーブル値パラメーターを強く入力する

    3. 初心者のためのデータベースのヒント

    4. MySQLで月末を取得する方法