タイプ: | integer |
デフォルト: | 150000 |
分: | 0 |
最大: | 2147483647 |
コンテキスト: | user |
再起動: | false |
以来: | 9.6 |
廃止予定: | 10 |
ソート対象のタプル数がこの指定値よりも小さい場合、クイックソートではなく、置換選択法を使ってソート処理の最初のラン出力を作ります。メモリが限られた環境で、物理から論理への強い相関性を持つタプルが大量のソート処理に投入される場合に有用かもしれません。なお、入力タプルが逆相関性を示す場合にはこの限りではありません。デフォルトの戦略が多数のランを実行してしまい、その結果を最後にマージしなければならないのと違って、置換選択アルゴリズムにおいては、マージを必要としない一つの長いランを実行できる可能性があります。このことにより、ソート処理を素早く完了できるかもしれません。
デフォルト値は150,000タプルです。多くの場合、より高い設定値がより良い効率をもたらすどころか、むしろ非生産的かもしれません。なぜなら、優先度キューは、利用可能なCPUキャッシュの大きさに敏感な一方、デフォルトのソート戦略はキャッシュに縛られない(cache-oblivious)アルゴリズムを使用して実行されるからです。この性質により、デフォルトのソート戦略では自動的かつ透過的に利用可能なCPUキャッシュを有効に利用できます。
maintenance_work_memをデフォルト値に設定すると、入力タプルの幅が非常に大きい場合を除き、通常ユーティリティコマンドが外部ソート(たとえば、CREATE INDEXがB-Treeインデックスを作成するために行うソート)が置換選択アルゴリズムを使うことはなくなります。
推奨事項 [EN]
Disable, this setting will be removed from Postgres 11.