15

私は sql/databases の世界では新人であることを覚えておいてください。

毎秒何千ものオブジェクトを挿入/更新しています。これらのオブジェクトは、数秒間隔でアクティブにクエリされています。

(postgres) データベースのパフォーマンスを調整するために行うべき基本的なことは何ですか?

4

6 に答える 6

16

これは幅広いトピックなので、ここにたくさんの内容があります。

  • EXPLAIN と EXPLAIN ANALYZEは、db エンジンで何が起こっているかを理解するのに非常に役立ちます。
  • 関連する列がインデックス化されていることを確認してください
  • 無関係な列がインデックス化されていないことを確認してください(更新する必要があるインデックスが多すぎると、挿入/更新のパフォーマンスが低下する可能性があります)
  • postgres.conf が適切に調整されていることを確認してください
  • work_mem とは何か、およびそれがクエリにどのように影響するかを理解する (大規模なクエリで最も役立ちます)
  • データベースが適切に正規化されていることを確認してください
  • 古いデータを消去するためのVACUUM
  • 統計を更新するためのANALYZE (統計量の統計ターゲット)
  • 永続的な接続 (pgpool や pgbouncer などの接続マネージャーを使用できます)
  • クエリがどのように構築されるかを理解する (結合、副選択、カーソル)
  • データのキャッシング (つまり memcached) はオプションです

そして、これらのオプションを使い果たしたら、メモリを追加したり、ディスクサブシステムを高速化したりします。ハードウェアは、特に大規模なデータセットでは重要です。

そしてもちろん、postgres/databases の他のすべてのスレッドを読んでください。:)

于 2009-04-22T23:23:14.570 に答える
7

何よりもまず、公式マニュアルのPerformance Tipsを読んでください。

すべてのクエリでEXPLAINを実行し、その出力を理解すると、クエリが可能な限り高速であるかどうか、およびインデックスを追加する必要があるかどうかがわかります。

それが完了したら、マニュアルのサーバー構成の部分を読むことをお勧めします。パフォーマンスをさらに向上させるために微調整できる多くのオプションがあります。ただし、設定するオプションを理解するようにしてください。誤って設定すると、パフォーマンスが簡単に低下する可能性があるためです。

クエリまたはオプションを変更するたびに、テストベンチマーク行って、各変更の影響を確認してください。

于 2009-04-22T21:42:21.240 に答える
3

実際には、ほとんどの場合に十分なパフォーマンスを得るための簡単なルールがいくつかあります。

  1. インデックスは最初の部分です。主キーは自動的に索引付けされます。すべての外部キーにインデックスを付けることをお勧めします。さらに、頻繁にクエリされるすべての列にインデックスを付けます。複数の列がクエリされるテーブルに頻繁に使用されるクエリがある場合は、それらの列にまとめてインデックスを付けます。

  2. postgresql インストールのメモリ設定。次のパラメータを高く設定します。

.

shared_buffers, work_mem, maintenance_work_mem, temp_buffers

専用のデータベース マシンの場合は、これらの最初の 3 つを RAM の半分に簡単に設定できます (共有バッファーを使用する Linux では注意してください。shmmax パラメーターを調整する必要があるかもしれません)。それ以外の場合は、RAM の量に依存します。あなたはpostgresqlに渡したいです。

http://www.postgresql.org/docs/8.3/interactive/runtime-config-resource.html

于 2009-04-23T10:30:08.587 に答える
1

私が推奨する絶対的な最小値は、EXPLAIN ANALYZEコマンドです。サブクエリ、結合などの内訳が常に表示され、操作で消費された実際の時間が示されます。また、シーケンシャル スキャンやその他の厄介な問題についても警告します。

始めるのに最適な方法です。

于 2009-04-22T21:42:08.043 に答える
-2

ファイルシステムを信頼する場合は、posgresql.confでfsync = offを設定します。そうでない場合、各postgresql操作は(fsyncシステムコールを使用して)すぐにディスクに書き込まれます。このオプションは、かなり10年前から多くの本番サーバーでオフになっており、データが破損することはありませんでした。

于 2009-04-23T09:50:51.287 に答える