PostgreSQLでデータを一括ロードするための7つの実用的なヒント

記事「PostgreSQLバルクデータロードの7つのベストプラクティスのヒント」の無料翻訳



場合によっては、いくつかの簡単な手順で大量のデータをPostgreSQLデータベースにロードする必要があります。この方法は一般に一括インポートと呼ばれ、1つ以上の大きなファイルがデータソースとして機能します。このプロセスは、許容できないほど遅くなる場合があります。このパフォーマンスの低下にはいくつかの理由があります。インデックス、トリガー、外部キーとプライマリキー、またはWALファイルの書き込みでさえ、遅延を引き起こす可能性があります。



この記事では、データをPostgreSQLデータベースに一括インポートするための実用的なヒントをいくつか紹介します。ただし、それらのいずれも問題の効果的な解決策ではない場合があります。適用する前に、どの方法の長所と短所も検討することをお勧めします。



ヒント1.ターゲットテーブルをログなしモードにする



PostgreSQL9.5以降では、ターゲットテーブルを非ログモードに設定し、データのロード後にログモードに戻すことができます。



ALTER TABLE <target table> SET UNLOGGED;
<bulk data insert operations…>
ALTER TABLE <target table> LOGGED;


, PostgreSQL (WAL). . , , PostgreSQL . PostgreSQL .



, – . . , , , .



:



  • c ;
  • ;
  • , , .


2.



. , , .



, -, , . , , , , .



DROP INDEX <index_name1>, <index_name2> … <index_name_n>
<bulk data insert operations…>
CREATE INDEX <index_name> ON <target_table>(column1, …,column n)


maintenance_work_mem. .



, . : . , , .



3.



, , – , . PostgreSQL .



, , . , , , .



ALTER TABLE <target_table> 
    DROP CONSTRAINT <foreign_key_constraint>;
BEGIN TRANSACTION;
    <bulk data insert operations…>
COMMIT;
ALTER TABLE <target_table> 
    ADD CONSTRAINT <foreign key constraint>  
    FOREIGN KEY (<foreign_key_field>) 
    REFERENCES <parent_table>(<primary key field>)...;


, maintenance_work_mem .



4.



INSERT DELETE ( ) . , , , .



, . , .



ALTER TABLE <target table> DISABLE TRIGGER ALL;
<bulk data insert operations…>
ALTER TABLE <target table> ENABLE TRIGGER ALL;


5. COPY



PostgreSQL – COPY . COPY . , INSERT INSERT- VALUE



COPY <target table> [( column1>, … , <column_n>)]
    FROM  '<file_name_and_path>' 
    WITH  (<option1>, <option2>, … , <option_n>)


COPY:



  • , , ;
  • ;
  • ;
  • WHERE.


6. INSERT VALUE



INSERT – . , INSERT , , WAL.



INSERT VALUE .



INSERT INTO <target_table> (<column1>, <column2>, …, <column_n>) 
VALUES 
    (<value a>, <value b>, …, <value x>),
    (<value 1>, <value 2>, …, <value n>),
    (<value A>, <value B>, …, <value Z>),
    (<value i>, <value ii>, …, <value L>),
    ...;


INSERT VALUES . .



, , , PostgreSQL INSERT VALUES. INSERT, RAM , .



effective_cache_size 50%, shared_buffer 25% . , , INSERT VALUES, 1000 .



7. ANALYZE



, ANALYZE . , , . , . ANALYZE .





データベースアプリケーションのデータの一括インポートは毎日行われるわけではありませんが、クエリのパフォーマンスには影響します。そのため、ロード時間を可能な限り短縮することが不可欠です。予期しない事態が発生する可能性を最小限に抑えるためにDBAができることの1つは、同様のサーバーと同様に構成されたPostgreSQLを使用してテスト環境で負荷の最適化を実行することです。データの読み込みにはさまざまなシナリオがあり、それぞれの方法を試して、適切に機能する方法を選択することをお勧めします。




All Articles