PostgreSQLでは、クエリ実行時に使用する作業用メモリの量を調整するために、設定パラメータwork_memを利用できます。これにより、ソートやハッシュ操作のパフォーマンスを改善できます。本記事では、work_memの基本概念と適切な設定方法を解説します。
work_memとは
work_memは、PostgreSQLがソートやハッシュテーブル作成時に各操作で使用するメモリ量を指定するパラメータです。
例えば、大規模なORDER BYやJOIN処理の際に十分なwork_memを確保しておくと、ディスクスワップを避けて高速に処理できます。
work_memの設定方法
work_memはセッション単位でも設定可能です。以下の例では1MBに設定しています。
SET work_mem = '1MB';
また、postgresql.confでグローバルに設定することも可能です。
work_mem = 4MB
設定後、サーバ再起動で反映されます。
調整のポイント
1. クエリごとに異なる設定も可能:大きなJOINやソートの前に一時的にwork_memを増やすことで効率化できます。
2. 過剰設定に注意:work_memは各並列実行やソート操作ごとに割り当てられるため、大きく設定しすぎるとメモリ不足を招く可能性があります。
実際の効果の確認方法
EXPLAIN ANALYZEを用いると、実際のクエリでどの程度work_memが使用されたか確認できます。
例えば:
EXPLAIN ANALYZE SELECT * FROM orders ORDER BY order_date;
これにより、ソートがメモリ内で行われたか、ディスクにスワップされたかを確認できます。
まとめ
PostgreSQLのwork_mem設定を調整することで、ソートやハッシュ操作のパフォーマンスを最適化できます。セッション単位で一時的に増やしたり、グローバル設定を適切に調整することで、効率的なクエリ実行が可能です。
設定値の過不足に注意しながら、EXPLAIN ANALYZEで実際の効果を確認することが重要です。


コメント