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

PKであるシーケンシャルインデックスの曲線因子

    FILLFACTOR

    INSERTのみ およびSELECT FILLFACTORを使用する必要があります 100の どこでも。

    UPDATEで「ウィグル」しない場合は、メモリブロックごとにウィグルルームを残しても意味がありません。 s。

    FILLFACTORの背後にあるメカニズム とてもシンプルです。 INSERTFILLFACTORによって宣言されたパーセンテージまで、各データページ(通常は8 kbブロック)のみを埋めます。 設定。また、VACUUM FULLを実行するたびに またはCLUSTER テーブルの上で、ブロックごとに同じ小刻みに動く部屋が再確立されます。理想的には、これによりUPDATEが可能になります ■新しい行バージョンを同じデータページに保存します。これにより、大量のUPDATEを処理するときにパフォーマンスが大幅に向上します。 s。 H.O.T。との組み合わせでも有益です更新

    ない場合 更新、これのためにスペースを無駄にしないで、FILLFACTOR = 100を設定してください 。

    基本的な情報源: CREATE TABLE またはCREATE INDEX

    その他の最適化

    ただし、他のことを行うことはできます -あなたは最適化の吸血鬼のようですので...:)

    CREATE TABLE dev_transactions
    ( transaction_id serial PRIMARY KEY,
      gateway integer NOT NULL,
      moment timestamp NOT NULL,
      transaction_type smallint NOT NULL,
      status smallint NOT NULL,
      device integer NOT NULL,
      controler smallint NOT NULL,
      token integer,
      et_mode character(1));
    

    これにより、データアライメントに関してテーブルが最適化されます パディングを回避します 典型的な64ビットサーバーの場合、数バイト、おそらく平均でわずか8バイトを節約します。通常、「列テトリス:

    」では、多くを絞り出すことはできません。

    また、NOT NULLを維持します 非常に小さなパフォーマンスボーナスのために、テーブルの先頭にある列。

    また、テーブルには9列があります 。これは、余分な8バイトを意味します 拡張されたNULLビットマップの場合 -これは、8列の最初の1バイトのNULLビットマップに収まります。 。
    et_modeを定義する場合 およびtoken NOT NULL 、すべての列はNOT NULL NULLビットマップが使用され、8バイトが解放されます。
    これは、列をNOT NULLと宣言しない場合でも、行ごとに機能します。 。すべての列に値がある場合、この行のNULLビットマップはありません。あなたの場合、これはet_modeの値を入力するというパラドックス効果につながります およびtoken ストレージサイズを小さくすることができます または少なくとも同じまま:

    基本的な情報源:データベースの物理ストレージに関するマニュアル

    行のサイズ(値で埋められている)を元のテーブルと比較して、明確な証拠を取得します。

    SELECT pg_column_size(t) FROM dev_transactions t;
    



    1. SQL-MySQLデータ(タイムスタンプとステータスメッセージを含む行のセット)からすべてのダウンタイムとダウンタイムの長さを検索します

    2. Python Postgrespsycopg2ThreadedConnectionPoolが使い果たされました

    3. 接続プールはODP.NETに必須ですか?

    4. MySQLWorkbenchを使用したMySQLデータベースのリバースエンジニアリング