PostgreSQL で,ランダムデータのテーブルを作る

概要

約 500M バイトの CSV ファイルを生成し,PostgreSQL のデータベースにインポートする方法を解説する.

目次

関連する外部ページ

【サイト内の関連ページ】

PostgreSQL 活用ガイド

1. 前準備

PostgreSQL のインストール

ランダムデータ(CSV 形式)の準備

  1. ランダムデータ(CSV 形式)の生成プログラム

    生成プログラムの詳細は,別ページ »を参照

  2. ランダムデータ(CSV 形式)の準備

    次のコマンドで,約 500M バイトのランダムデータ(CSV 形式)を生成する.

    ./populate.out 7300000 > 500m.csv

2. postgresql.conf の設定

設定ファイルの場所は,「sudo find / -name "postgresql.conf" -print」コマンドで検索できる.
  1. 次の設定パラメータを調整する(値は搭載メモリに応じて調整する).
    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
  2. 設定ファイルの変更を反映するため,PostgreSQL サーバを再起動する.エラーメッセージが表示されなければ正常に動作している(<バージョン>には,導入した PostgreSQL のメジャーバージョンを指定する).
    sudo pg_ctlcluster <バージョン> main restart
    sudo pg_ctlcluster <バージョン> main status

3. CSV ファイルのインポート

  1. 性能測定を行う場合は,OS のディスクキャッシュのクリア,新規データベースの作成,vacuum を実行する.次のコマンドを順に実行する.
    sudo pg_ctlcluster <バージョン> main stop
    sudo sync
    sudo sysctl -w vm.drop_caches=3
    sudo pg_ctlcluster <バージョン> main start
    sudo pg_ctlcluster <バージョン> 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
  2. テーブルの定義,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