PostgreSQLでデータの一括インポートのパフォーマンスを向上させるn個の方法を説明します。
キーワード:バルクデータインポート、データロード、バルクインサート、高速化、スピードアップ
選択肢が多様化した時代、人生の多くのことがそうであるように、何事も決まった方法、やり方があるわけではありません。白猫、黒猫にかかわらず、ネズミを捕まえられる方がいい猫であり、自分に合ったものが一番いいのです。
ここでは、データの一括インポートのパフォーマンスを向上させるための正式な方法を紹介します。
方法1:自動コミットを無効にする。
psql
\set AUTOCOMMIT off
Other
BEGIN;
Execute bulk data import
COMMIT;
方法2:テーブルをUNLOGGEDに設定する。
データをインポートする前にテーブルをUNLOGGEDモードに変更し、インポートが完了したらLOGGEDモードに戻す。
ALTER TABLE tablename SET UNLOGGED;
Perform a bulk data import
ALTER TABLE tablename LOGGED;
長所
インポート情報をWALログに記録しないため、ioを大幅に削減し、インポート速度を向上させることができます。
デメリット
1. REPLICATION 環境では、テーブルを UNLOGGED モードに設定することはできません。
2. 停電などでインポート処理が正常に終了せず、データベース内のUNLOGGEDテーブルのデータがすべて失われます。
方法3:インデックスを再構築する。
データをインポートする前に当該テーブルのインデックスを削除し、インポート完了後にインデックスを再作成する。
DROP INDEX indexname;
Execute a bulk data import
CREATE INDEX ... ;
テーブルのインデックス定義を問い合わせるためのメソッド
select * from pg_indexes where tablename = 'tablename' and schemaname = 'schemaname';
方法4.外部キーを再構築する。
データをインポートする前に当該テーブルの外部キーを削除し、インポート完了後に再作成してください。
ALTER TABLE ...
DROP CONSTRAINT ... ;
Perform a bulk data import
ALTER TABLE ...
ADD CONSTRAINT ...
FOREIGN KEY ...
REFERENCES ... ;
関連する情報はpg_constraintにあります。
方法5:トリガーを無効にする
データをインポートする前に、当該テーブルのトリガーを無効にし、インポート完了後に再度有効にする。
ALTER TABLE tablename DISABLE TRIGGER ALL;
Perform a bulk data import
ALTER TABLE tablename ENABLE TRIGGER ALL;
関連する情報はpg_triggerにあります。
方法6:挿入してコピーする
COPYは、データの一括読み込みに最適化されています。
COPY ... FROM 'xxx';
方法7:1値挿入から多値挿入へ
sqlのパース時間を短縮する。
方法8:INSERTからPREPAREにする
PREPARE prep文を使って構文解析の消費量を削減する。
PREPARE fooplan (int, text, bool, numeric) AS
INSERT INTO foo VALUES($1, $2, $3, $4);
EXECUTE fooplan(1, 'Hunter Valley', 't', 200.00);
方法9:パラメータを変更する
maintenance_work_memを増やし、max_wal_sizeを増やします。
方法10:アーカイブモードをオフにし、walログレベルを下げます。
archive_mode パラメータを変更し、アーカイブのオン/オフを制御します。wal_levelの値をminimalに下げて、ロギングを削減します。
この方法は、データベースの再起動が必要なため、ダウンタイムの計画が必要です。また、レプリケーションバックアップがある場合は、その影響も考慮してください。
PostgreSQLのバルクデータインポートのパフォーマンスを向上させるn個の方法についてのこの記事は終わりです。PostgreSQLのバルクデータインポートに関する詳細については、スクリプトハウスの過去の記事を検索するか、以下の関連記事を引き続きご覧ください。
関連
-
PostgreSQLのJSONBのマッチングと交差の問題について
-
postgresql 重複データ削除 ケーススタディ
-
Postgresql データベース timescaledb timescaledb 問題 大容量データテーブルをスーパーテーブルに変換すること
-
postgresql いくつかのメソッドは、要約の重複するデータを削除する
-
Postgresqlのデータマージ、複数のデータを1つの操作にマージする。
-
Postgresqlのデータは、2つのフィールドを追加し、一意の操作を統合する
-
pgAdmin for postgreSQLでサーバーのデータをバックアップする方法
-
PostgreSQLの自己インクリメント構文使用上の注意点
-
PostgreSQLのデータベースでLIKE文の効率を確保する方法(推奨)
-
PostgreSQLにおけるVACUUMコマンドの使用方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PostgreSQLのURL解決方法
-
PostgreSQLのテーブルをパーティション分割する3つの方法
-
PostgreSQLでバッファキャッシュにデータを読み込む方法
-
PostgreSQLのユーザーログイン失敗時の自動ロック解決策
-
エクセルテーブルのデータをpostgresqlのデータベースにインポートする方法
-
PostgreSQLで文字列が対象の文字列を含むかどうかを判断する様々な方法
-
どのように定期的にLinux上でpostgresqlのデータベースをバックアップする
-
GROUP BY句での定数使用に関するPostgreSQLの特別な制限について説明します。
-
PostgreSQLにおけるsequence、serial、identityの使い方の違いについて
-
Postgresqlのセルフインクリメントidをキーにした場合の重複問題の解決