PostgreSQL で,ランダムデータのテーブルを作る
約 500M バイトのCSVファイルを生成し,PostgreSQLのデータベースにインポートする方法について説明する.
前準備
PostgreSQLのインストール
- Windowsにおける,PostgreSQL 14.5,pgAdmin 4,PostGIS 3のインストール,psqlによるテーブル定義とレコード挿入については,別ページ »を参照
- Ubuntuにおける,PostgreSQL 14,pgAdmin 4,PostGIS 3のインストール手順は,別ページ »を参照
ランダムデータ(CSV形式)の準備
- ランダムデータ(CSV形式)の生成プログラム
ランダムデータ(CSV形式)の生成プログラムの詳細は,別ページ »を参照
- ランダムデータ(CSV形式)の準備
以下のコマンドにより,約 500M バイトのランダムデータ(CSV形式)を生成する
./populate.out 7300000 > 500m.csv
postgresql.confの設定
設定ファイルは,「sudo find -name "postgresql.conf" -print」コマンドで検索できる.
- 以下の設定パラメータを調整する.
shared_buffers = 1GB work_mem = 1GB max_files_per_process = 1000 effective_cache_size = 4GB
個人利用環境では,オンライントランザクション処理が不要な場合,WAL機能を実質的に無効化して運用することができる.
wal_level = minimal archive_mode = off max_wal_senders = 0
- 設定ファイルの変更を反映するため,PostgreSQLサーバを再起動する
エラーメッセージが表示されなければ正常に動作している.
sudo pg_ctlcluster 14 main restart sudo pg_ctlcluster 14 main status
CSVファイルのインポート
- 性能測定を行う場合は,データベースキャッシュのクリア,新規データベースの作成,データベースのvacuumを実行する.
以下のコマンドを順次実行する.
sudo pg_ctlcluster 14 main stop sudo sync sudo sync sudo sync sudo sync sudo sync sudo sysctl -w vm.drop_caches=3 sudo pg_ctlcluster 14 main start sudo pg_ctlcluster 14 main status echo "drop database if exists testdb;" | sudo -u postgres psql echo "create database testdb;" | sudo -u postgres psql echo "vacuum full;" | sudo -u postgres psql -d testdb
- テーブルの定義,CSVファイルのインポート,データ確認を実施する.
「select count(*) from T500m;」を実行してレコード数を確認し,dateコマンドで処理時間を計測する.
echo "create table T500m(num integer, name text, lat real, lon real, at timestamp);" | sudo -u postgres psql -d testdb date +%H:%M:%S.%3N echo "\copy T500m from '500m.csv' delimiter ','" | sudo -u postgres psql -d testdb date +%H:%M:%S.%3N echo "select count(*) from T500m;" | sudo -u postgres psql -d testdb