PostgreSQLとパフォーマンス
パフォーマンスはソフトウェアアーキテクチャ設計の重要な要件の1つであり、PostgreSQL開発者は当初から焦点を当ててきました。これは、次のPostgreSQLGitソースコミットにも示されています。
commit d31084e9d1118b25fd16580d9d8c2924b5740dff
Author: Marc G. Fournier <[email protected]>
Date: Tue Jul 9 06:22:35 1996 +0000
Postgres95 1.01 Distribution - Virgin Sources
[...]
diff --git a/src/backend/access/heap/stats.c b/src/backend/access/heap/stats.c
new file mode 100644
index 0000000000..d41d01ac1b
--- /dev/null
+++ b/src/backend/access/heap/stats.c
@@ -0,0 +1,329 @@
+/*-------------------------------------------------------------------------
+ *
+ * stats.c--
+ * heap access method debugging statistic collection routines
+ *
+ * Copyright (c) 1994, Regents of the University of California
[...]
+ * Also note that this routine probably shouldn't have to exist, and does
+ * screw up the call graph rather badly, but we are wasting so much time and
+ * system resources being massively general that we are losing badly in our
+ * performance benchmarks.
+ */
PostgreSQLは、さまざまな機能を実装することでパフォーマンスを実現しています。
- いくつかのインデックスタイプ
- マルチプロセッサシステムを利用できるクエリプランナーとオプティマイザー
- MVCC
- テーブルのパーティション分割
環境の選択
今日利用できる多くのオプションには、多くの質問があります:
- オンプレミスですか、それともクラウドですか?
- ベアメタルまたは仮想化?
- ブランド化されたハードウェアまたは独自のハードウェアを構築しますか?
- PostgreSQLの低レベル関数またはfsyncはハードウェアのパフォーマンスにどのように影響しますか?
- ローカルディスクまたは共有ストレージ?
- どのオペレーティングシステムの調整可能ファイルを設定する必要がありますか?
繰り返しになりますが、PostgreSQLwikiはすべてのパフォーマンスの非常に良い出発点です。
探すべき重要なことは何ですか?
PostgreSQLのパフォーマンスチューニングとシステム設計のさまざまな側面に触れている文献がたくさんあるので(ヒント:ページでxfsを検索してください)、このブログは、すでに説明したトピックのいずれかを深く掘り下げることを目的としていません。主な焦点がリソースの競合を回避することである場合にどこから開始するかに関するsysadminの視点。また、特定の問題に対処する多くの参考資料をより詳細に指摘します。 PostgreSQLのパフォーマンスに不可欠なすべての分野の専門家のアドバイスは、プロフェッショナルサービスを提供する多くの企業を通じて利用できます。
始めましょう!
情報収集
デフォルトのインストールを想定しており、PostgreSQLがすぐに使用できるように調整されておらず、いくつかの癖がある可能性があることを知っている場合、この手順には必要な監視ツールの設定が含まれます。
アプリケーションを理解し、影響を受けるリソースをすばやく追跡できるようにするためには、適切な監視が不可欠です。これは、CPUまたはI/Oのベンチマークを実行するためにデータベースホストにアクセスできない可能性があるクラウドプロバイダーに特に当てはまります。
図1— SlideShare、Jignesh Shah、クラウドでのマネージドPostgreSQLのベストプラクティスシステムパフォーマンスアラートへの対応
監視ツールは、システムパフォーマンス指標をグラフ化して警告します:
CPU:
- アラート—使用率が高い場合は、クエリが長時間実行されていることを示します。
- 影響—アプリケーションの応答時間。
- アクション—データベース統計メトリックメトリックを確認して、調整が必要なクエリを特定します。
I / O:
- アラート—多数または読み取り。
- 影響—アプリケーションの応答時間。
- アクション—別のリードレプリカを追加します。データベース統計メトリックを確認して、実行時間の長いクエリを特定します。
- アラート—書き込みの数が多い。
- 影響—アプリケーションの応答時間。
- アクション— GUCパラメーターshared_buffers、work_mem、およびmaintenance_work_memを調整します。チェックポインターを調整し、自動真空が正しく調整されていることを確認します。 PostgreSQLが独自のハードウェアにインストールされている場合は、テーブルスペースを構成するか、シャーディングを検討しますが、シャーディングの警告を理解してください。
メモリ:
- アラート—メモリ使用量が多い。
- 影響— I/Oパフォーマンス。
- アクション—データベース統計メトリックメトリックを確認して、調整が必要なクエリを特定します。
ネットワーク:
- アラート—高遅延。通常、これはDBaaSの問題です。
- 影響—クライアント、レプリケーション。
- アクション—データベースホストをフロントエンドサーバーの近くに再配置します。
- アラート—接続数が多い。
- 影響—クライアント。
- アクション—接続ポーリングの使用を検討してください。
データベースの内部パフォーマンス指標
pg_ *ビューは、データベースエンジンのパフォーマンスへのウィンドウであり、PostgreSQL管理アプリケーションは、さまざまなSQLクエリを通じて利用できる豊富な情報を相互に関連付けるのに役立つように作成されています。追加の拡張機能が存在し、それらはプラグインとして統合または利用できることがよくあります。
このようなツールを使用すると、DBAタスクが簡素化され、データベースクラスターをセットアップおよび構成する際のベストプラクティスに従うことが保証されます。
データベース統計
ClusterControlなどの監視ツールは、データベースアクティビティ統計を使用して、DBAのパフォーマンス調整を支援します。
図2— PostgreSQLで監視する重要事項のいくつか—ワークロードの分析今日のホワイトペーパーをダウンロードするPostgreSQLの管理と自動化ClusterControlを使用してPostgreSQLをデプロイ、監視、管理、スケーリングするために知っておくべきことについて学ぶホワイトペーパーをダウンロードするクエリチューニング
バージョン9.5以降、PostgreSQLには、BRINインデックスや並列クエリなどのクエリパフォーマンスが大幅に向上しています。
図3— 2ndQuadrant、Thomas Vondra、PostgreSQL 9.5(およびそれ以降)でのパフォーマンスの向上ロック
同時実行制御は、PostgreSQLドキュメントの章全体に当てはまります。監視ツールを使用して、ロックの数またはロック期間がしきい値を超えたときにアラートを受け取り、不足しているインデックスを探すか、アプリケーションコードを確認するか、接続ポーリングに切り替えることで問題を解決します。
バルクロード
大量のデータのインポート中は、synchronous_commitをオフにすることができます。その他のオプションについては、PostgreSQLのドキュメントセクション「データベースへの入力」で説明しています。
結論
PostgreSQLのパフォーマンス調整は複雑な作業です。複雑さは、利用可能になった多くの調整可能要素に起因します。これは、PostgreSQLを支持する強力な議論です。パフォーマンスの問題を解決する特効薬はありません。むしろ、最終的にチューニング要件を決定するのはアプリケーションの詳細です。したがって、監視ツールは、システムパフォーマンスに関連するパフォーマンスの洞察を得るのに役立ち、さらに、最適化が必要なSQLクエリだけでなくチューニングが必要なPostgreSQL固有の領域を特定することもできます。さらに、データベース管理システムは、ベストプラクティスに確実に従うために、PostgreSQLのセットアップと管理を支援できます。