私は幸運なことに、Ubuntu 64ビットを実行する20GB Linodeインスタンスを使用できました。このサービスのPostGresを最適化したいのですが、変更を何を優先するべきかわかりません。
20,000行程度のデータセットがいくつかあり、実行されている計算はメモリを集中的に使用するクエリ(空間分析)であり、各要求の後に少数の行が書き込まれます。ユーザーの総数は非常に少ない(10-50)。
私はPostgresqlサイトでこれを読みました article ですが、これがどのように機能するかについては、私が何を優先すべきかを知るには十分ではありません。ここで、地理タイプの作業で何を変更するかについて advice も確認しました。
たとえば、shared_buffers
から200MB
(20GBの75%よりはるかに少ない)。その結果、次のエラーメッセージが表示されました。
- PostgreSQL 9.1データベースサーバーの再起動
- PostgreSQLサーバーの起動に失敗しました。ログ出力を確認してください:2013-03-10 12:21:58 EDT致命的エラー:共有メモリセグメントを作成できませんでした:無効な引数2013-03-10 12:21:58 EDT詳細:失敗したシステムコールはshmget(key = 5432001 、size = 47742976、03600)。 2013-03-10 12:21:58 EDTヒント:このエラーは通常、共有メモリセグメントに対するPostgreSQLの要求がカーネルのSHMMAXパラメータを超えたことを意味します。要求サイズを小さくするか、SHMMAXを大きくしてカーネルを再構成できます。要求サイズ(現在は47742976バイト)を減らすには、おそらくshared_buffersまたはmax_connectionsを減らすことによって、PostgreSQLの共有メモリ使用量を減らします。要求サイズがすでに小さい場合は、カーネルのSHMMINパラメータよりも小さい可能性があります。その場合、要求サイズを大きくするか、SHMMINを再構成する必要があります。 PostgreSQLのドキュメントには、共有メモリ構成に関する詳細情報が含まれています。
私はこれを元の値に戻し、変更しようとしました:
work_mem = 50MB
maintenance_work_mem = 256MB
私の問題は、どの値を変更するか、またはどの値を優先して優先順位を付けて実験およびテストするかがわからないことです。このデータベースを最適化するにはどうすればよいですか?
グレッグ・スミスによって書かれた pgtune
の使用をお勧めします。
次のようにサーバーで実行するだけです。
pgtune -i postgresql.conf -o postgresql-tuned.conf
それにはいくつかのオプションがありますが、それを実行して生成されたpostgresql.conf
を使用するだけでサーバーのパフォーマンスが向上します。
PostgreSQLはこれを標準インストールに含め、デフォルトで実行する必要があると思います-PostgreSQLのパフォーマンスの低下について不平を言うことはできません。
サーバーのshmmax、shmall、msgmax、およびmsgmnb設定を増やす必要があります。 PGTUNEは、他の回答で述べたように、何に設定するかを指示する必要があります。
あなたはこのようにそれを行うことができます:
sysctl -w kernel.shmmax={{value}}
sysctl -w kernel.shmall={{value}}
sysctl -w kernel.msgmax={{value}}
sysctl -w kernel.msgmnb={{value}}
あなたはすでにこのような値が何であるかを確認することができます:
cat /proc/sys/kernel/shmmax
cat /proc/sys/kernel/shmmall
cat /proc/sys/kernel/msgmax
cat /proc/sys/kernel/msgmnb