資源使用狀況/記憶體
autovacuum_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個自動資料清理背景工作處理序所要使用的記憶體上限。 |
資料類型 | 整數 |
預設值 | -1 |
允許的值 | -1-2097151 |
參數類型 | dynamic |
文件集 | autovacuum_work_mem (英文) |
dynamic_shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取所使用的動態共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | posix |
允許的值 | posix |
參數類型 | 唯讀 |
文件集 | dynamic_shared_memory_type (英文) |
hash_mem_multiplier
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 要用於雜湊資表的多個 work_mem。 |
資料類型 | numeric |
預設值 | 2 |
允許的值 | 1-1000 |
參數類型 | dynamic |
文件集 | hash_mem_multiplier (英文) |
huge_pages
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 啟用/停用大型記憶體分頁的使用。 此設定不適用於具有少於 4 個 V 核心的伺服器。 |
資料類型 | 列舉 |
預設值 | try |
允許的值 | on,off,try |
參數類型 | static |
文件集 | huge_pages (英文) |
描述
大型分頁是一項功能,能以較大區塊的形式來管理記憶體。 您通常可以管理最多 2 MB 的區塊,而不是標準的 4 KB 分頁。
使用大型分頁可提供可能有效卸載 CPU 的效能優勢:
- 其可減少與記憶體管理工作相關聯的額外負荷,例如較少的轉譯後備緩衝區 (TLB) 遺漏。
- 其能縮短記憶體管理所需的時間。
具體而言,在 PostgreSQL 中,您只能針對共用記憶體區域使用大型分頁。 共用記憶體區域的絕大部分都會配置給共用緩衝區。
另一個優點是,大型分頁會防止將共用記憶體區域交換到磁碟,其能進一步穩定效能。
建議
- 對於具有重要記憶體資源的伺服器,請避免停用大型分頁。 停用大型分頁可能會危害效能。
- 如果您從不支援大型分頁的較小伺服器開始,但您預期會擴大至支援大型分頁的伺服器,請將
huge_pages
設定保持在TRY
,以獲得順暢的轉換和最佳效能。
Azure 特定注意事項
對於具有四個或多個 V 核心的伺服器,系統會從底層作業系統自動配置大型分頁。 此功能不適用於具有少於四個 V 核心的伺服器。 如果變更任何共用記憶體設定 (包括對 shared_buffers
的變更),系統會自動調整大型分頁數目。
huge_page_size
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 應要求之大型分頁的大小。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0 |
參數類型 | 唯讀 |
文件集 | huge_page_size (英文) |
logical_decoding_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於邏輯解碼的最大記憶體。 |
資料類型 | 整數 |
預設值 | 65536 |
允許的值 | 65536 |
參數類型 | 唯讀 |
文件集 | logical_decoding_work_mem (英文) |
maintenance_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於維護作業 (例如 VACUUM、建立索引) 的最大記憶體。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 1024-2097151 |
參數類型 | dynamic |
文件集 | maintenance_work_mem |
描述
maintenance_work_mem
是 PostgreSQL 中的設定參數。 其會控管配置給如下列維護作業的記憶體數量:VACUUM
、CREATE INDEX
和 ALTER TABLE
。 不同於會影響查詢作業記憶體配置的 work_mem
,maintenance_work_mem
會保留給維護及最佳化資料庫結構的工作。
重點
- Vacuum memory cap (資料清理記憶體上限):如果您想要透過增加
maintenance_work_mem
來加快清除無效 Tuple 的速度,請注意VACUUM
有收集無效 Tuple 識別項的內建限制。 其針對此處理序最多只能使用 1 GB 的記憶體。 - Separation of memory for autovacuum (針對自動資料清理區隔記憶體):您可以使用
autovacuum_work_mem
設定來控制自動資料清理作業獨立使用的記憶體。 此設定可作為maintenance_work_mem
的子集。 您可以決定在不會影響其他維護工作和資料定義作業之記憶體配置的情況下,要讓記憶體自動資料清理使用多少記憶體。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 maintenance_work_mem
伺服器參數的預設值。 對於支援彈性伺服器之計算的任何後續產品選擇變更,對於該執行個體 maintenance_work_mem
伺服器參數的預設值沒有任何影響。
每次變更指派給實例的產品時,也應該根據下列公式中的值來調整參數的值 maintenance_work_mem
。
用來計算 值的 maintenance_work_mem
公式為 (long)(82.5 * ln(memoryGiB) + 40) * 1024
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定同時準備交易的數目上限。 執行複本伺服器時,您必須將此參數設定為與主要伺服器相同的或更高的值。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0-262143 |
參數類型 | static |
文件集 | max_prepared_transactions (英文) |
max_stack_depth
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定最大堆疊深度,以 KB 為單位。 |
資料類型 | 整數 |
預設值 | 2048 |
允許的值 | 2048 |
參數類型 | 唯讀 |
文件集 | max_stack_depth (英文) |
min_dynamic_shared_memory
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 要在啟動時保留的動態共用記憶體數量。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0 |
參數類型 | 唯讀 |
文件集 | min_dynamic_shared_memory (英文) |
shared_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定伺服器所使用的共用記憶體緩衝區數目。 單位為 8kb。 允許的值介於可用記憶體 10% - 75% 的範圍內。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 16-1073741823 |
參數類型 | static |
文件集 | shared_buffers (英文) |
描述
shared_buffers
設定參數會決定配置給 PostgreSQL 資料庫以進行資料緩衝的系統記憶體數量。 其可作為可供所有資料庫處理序存取的集中式記憶體集區。
需要資料時,資料庫處理序會先檢查共用緩衝區。 如果必要資料存在,則會快速加以擷取並略過更耗時的磁碟讀取。 共用緩衝區可作為資料庫進程與磁碟之間的媒介,並有效地減少所需的 I/O 作業數目。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 shared_buffers
伺服器參數的預設值。 對於支援彈性伺服器的計算,任何後續的產品選擇變更,都不會影響該實例之伺服器參數的預設值 shared_buffers
。
每次變更指派給實例的產品時,您也應該根據下列公式中的值來調整參數的值 shared_buffers
。
對於記憶體最多 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 16384
。
對於超過 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 32768
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | shared_buffers (英文) |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取要用於主要共用記憶體區域的共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | mmap |
允許的值 | mmap |
參數類型 | 唯讀 |
文件集 | shared_memory_type (英文) |
temp_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個資料庫工作階段所使用的暫存緩衝區數目上限。 |
資料類型 | 整數 |
預設值 | 1024 |
允許的值 | 100-1073741823 |
參數類型 | dynamic |
文件集 | temp_buffers (英文) |
vacuum_buffer_usage_limit
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定 VACUUM、ANALYZE 和 autovacuum 的緩衝池大小。 |
資料類型 | 整數 |
預設值 | 2048 |
允許的值 | 0-16777216 |
參數類型 | dynamic |
文件集 | vacuum_buffer_usage_limit |
work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 在寫入暫存磁碟檔案之前,設定內部排序作業和雜湊表所使用的記憶體數量。 |
資料類型 | 整數 |
預設值 | 4096 |
允許的值 | 4096-2097151 |
參數類型 | dynamic |
文件集 | work_mem |
描述
PostgreSQL 中的 work_mem
參數會控制針對每個資料庫工作階段私人記憶體區域中特定內部作業所配置的記憶體數量。 這些作業的其中一個範例是排序和雜湊。
不同於位於共用記憶體區域中的共用緩衝區,work_mem
會配置在每個工作階段或每個查詢私人記憶體空間中。 透過設定適當的 work_mem
大小,您可以大幅提升這些作業的效率,並減少將暫存資料寫入磁碟的需求。
重點
- Private connection memory (私人連線記憶體):
work_mem
是每個資料庫工作階段使用之私人記憶體的一部分。 此記憶體與shared_buffers
使用的共用記憶體區域不同。 - Query-specific usage (查詢特定使用方式):並非所有工作階段或查詢都會使用
work_mem
。SELECT 1
之類的簡單查詢不太可能會需要work_mem
。 不過,牽涉到排序或雜湊等作業的複雜查詢可能會取用一或多個work_mem
區塊。 - Parallel operations (平行作業):對於跨越多個平行後端的查詢,每個後端都可能會使用一或多個
work_mem
區塊。
監視和調整 work_mem
請務必持續監視系統的效能,並視需要調整 work_mem
,特別是如果與排序或雜湊作業相關的查詢執行時間緩慢。 以下是使用 Azure 入口網站中提供的工具來監視效能的方法:
- 查詢效能深入解析:檢查 [Top queries by temporary files] \(依暫存檔案排序的前幾名查詢\) 索引標籤來識別產生暫存檔案的查詢。 這種情況表示可能需要增加
work_mem
。 - 疑難排解指南:使用疑難排解指南中的 [高暫存檔案] 索引標籤來識別有問題的查詢。
細微調整
當您管理 work_mem
參數時,採用細微調整的方法,而不是設定全域值通常會更有效率。 此方法可確保您可以根據處理序和使用者的特定需求,明智地配置記憶體。 其也可將發生記憶體不足問題的風險降到最低。 以下是您可以如何進行:
使用者層級:如果特定使用者主要涉及需要大量記憶體的彙總或報告工作,請考慮針對該使用者自訂
work_mem
值。 使用ALTER ROLE
命令來增強該使用者作業的效能。函式/程序層次:如果特定函式或程序會產生大量暫存檔案,增加該特定函式或程序層次的
work_mem
值可能會有幫助。 使用ALTER FUNCTION
或ALTER PROCEDURE
命令來特別配置更多記憶體給這些作業。資料庫層級:如果只有特定資料庫會產生大量暫存檔案,請改變資料庫層級的
work_mem
。全域層級:如果您的系統分析顯示大多數查詢都會產生小型的暫存檔案,而只有少數查詢會建立大型檔案,則以全域方式增加
work_mem
值可能是較為精明的做法。 此動作可促成在記憶體中處理大部分查詢,因此您可以避免磁碟型作業並提高效率。 不過,請務必小心並監視伺服器上的記憶體使用率,以確保其可以處理增加的work_mem
值。
判斷排序作業的最小 work_mem 值
若要尋找特定查詢的最小 work_mem
值,特別是在排序處理序期間會產生暫存磁碟檔案的查詢,請先考慮查詢執行期間所產生的暫存檔案大小。 例如,如果某個查詢會產生 20 MB 的暫存檔案:
- 使用 psql 或您慣用的 PostgreSQL 用戶端連線到您的資料庫。
- 將初始
work_mem
值設定為略高於 20 MB,以將在記憶體內處理時的其他標頭納入考量。 使用如下的命令:SET work_mem TO '25MB'
。 - 在相同工作階段有問題的查詢上執行
EXPLAIN ANALYZE
。 - 檢閱
"Sort Method: quicksort Memory: xkB"
的輸出。 如果其指出"external merge Disk: xkB"
,請以累加方式增加work_mem
值,然後重新測試,直到出現"quicksort Memory"
為止。"quicksort Memory"
的外觀表示查詢現在正在記憶體內運作。 - 透過此方法判斷值之後,您便能以全域或更細微的層級 (如上所述) 套用該值,以符合您的作業需求。
autovacuum_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個自動資料清理背景工作處理序所要使用的記憶體上限。 |
資料類型 | 整數 |
預設值 | -1 |
允許的值 | -1-2097151 |
參數類型 | dynamic |
文件集 | autovacuum_work_mem (英文) |
dynamic_shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取所使用的動態共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | posix |
允許的值 | posix |
參數類型 | 唯讀 |
文件集 | dynamic_shared_memory_type (英文) |
hash_mem_multiplier
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 要用於雜湊資表的多個 work_mem。 |
資料類型 | numeric |
預設值 | 2 |
允許的值 | 1-1000 |
參數類型 | dynamic |
文件集 | hash_mem_multiplier (英文) |
huge_pages
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 啟用/停用大型記憶體分頁的使用。 此設定不適用於具有少於 4 個 V 核心的伺服器。 |
資料類型 | 列舉 |
預設值 | try |
允許的值 | on,off,try |
參數類型 | static |
文件集 | huge_pages (英文) |
描述
大型分頁是一項功能,能以較大區塊的形式來管理記憶體。 您通常可以管理最多 2 MB 的區塊,而不是標準的 4 KB 分頁。
使用大型分頁可提供可能有效卸載 CPU 的效能優勢:
- 其可減少與記憶體管理工作相關聯的額外負荷,例如較少的轉譯後備緩衝區 (TLB) 遺漏。
- 其能縮短記憶體管理所需的時間。
具體而言,在 PostgreSQL 中,您只能針對共用記憶體區域使用大型分頁。 共用記憶體區域的絕大部分都會配置給共用緩衝區。
另一個優點是,大型分頁會防止將共用記憶體區域交換到磁碟,其能進一步穩定效能。
建議
- 對於具有重要記憶體資源的伺服器,請避免停用大型分頁。 停用大型分頁可能會危害效能。
- 如果您從不支援大型分頁的較小伺服器開始,但您預期會擴大至支援大型分頁的伺服器,請將
huge_pages
設定保持在TRY
,以獲得順暢的轉換和最佳效能。
Azure 特定注意事項
對於具有四個或多個 V 核心的伺服器,系統會從底層作業系統自動配置大型分頁。 此功能不適用於具有少於四個 V 核心的伺服器。 如果變更任何共用記憶體設定 (包括對 shared_buffers
的變更),系統會自動調整大型分頁數目。
huge_page_size
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 應要求之大型分頁的大小。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0 |
參數類型 | 唯讀 |
文件集 | huge_page_size (英文) |
logical_decoding_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於邏輯解碼的最大記憶體。 |
資料類型 | 整數 |
預設值 | 65536 |
允許的值 | 64-2147483647 |
參數類型 | dynamic |
文件集 | logical_decoding_work_mem (英文) |
maintenance_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於維護作業 (例如 VACUUM、建立索引) 的最大記憶體。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 1024-2097151 |
參數類型 | dynamic |
文件集 | maintenance_work_mem |
描述
maintenance_work_mem
是 PostgreSQL 中的設定參數。 其會控管配置給如下列維護作業的記憶體數量:VACUUM
、CREATE INDEX
和 ALTER TABLE
。 不同於會影響查詢作業記憶體配置的 work_mem
,maintenance_work_mem
會保留給維護及最佳化資料庫結構的工作。
重點
- Vacuum memory cap (資料清理記憶體上限):如果您想要透過增加
maintenance_work_mem
來加快清除無效 Tuple 的速度,請注意VACUUM
有收集無效 Tuple 識別項的內建限制。 其針對此處理序最多只能使用 1 GB 的記憶體。 - Separation of memory for autovacuum (針對自動資料清理區隔記憶體):您可以使用
autovacuum_work_mem
設定來控制自動資料清理作業獨立使用的記憶體。 此設定可作為maintenance_work_mem
的子集。 您可以決定在不會影響其他維護工作和資料定義作業之記憶體配置的情況下,要讓記憶體自動資料清理使用多少記憶體。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 maintenance_work_mem
伺服器參數的預設值。 對於支援彈性伺服器之計算的任何後續產品選擇變更,對於該執行個體 maintenance_work_mem
伺服器參數的預設值沒有任何影響。
每次變更指派給實例的產品時,也應該根據下列公式中的值來調整參數的值 maintenance_work_mem
。
用來計算 值的 maintenance_work_mem
公式為 (long)(82.5 * ln(memoryGiB) + 40) * 1024
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定同時準備交易的數目上限。 執行複本伺服器時,您必須將此參數設定為與主要伺服器相同的或更高的值。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0-262143 |
參數類型 | static |
文件集 | max_prepared_transactions (英文) |
max_stack_depth
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定最大堆疊深度,以 KB 為單位。 |
資料類型 | 整數 |
預設值 | 2048 |
允許的值 | 2048 |
參數類型 | 唯讀 |
文件集 | max_stack_depth (英文) |
min_dynamic_shared_memory
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 要在啟動時保留的動態共用記憶體數量。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0 |
參數類型 | 唯讀 |
文件集 | min_dynamic_shared_memory (英文) |
shared_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定伺服器所使用的共用記憶體緩衝區數目。 單位為 8kb。 允許的值介於可用記憶體 10% - 75% 的範圍內。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 16-1073741823 |
參數類型 | static |
文件集 | shared_buffers (英文) |
描述
shared_buffers
設定參數會決定配置給 PostgreSQL 資料庫以進行資料緩衝的系統記憶體數量。 其可作為可供所有資料庫處理序存取的集中式記憶體集區。
需要資料時,資料庫處理序會先檢查共用緩衝區。 如果必要資料存在,則會快速加以擷取並略過更耗時的磁碟讀取。 共用緩衝區可作為資料庫進程與磁碟之間的媒介,並有效地減少所需的 I/O 作業數目。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 shared_buffers
伺服器參數的預設值。 對於支援彈性伺服器的計算,任何後續的產品選擇變更,都不會影響該實例之伺服器參數的預設值 shared_buffers
。
每次變更指派給實例的產品時,您也應該根據下列公式中的值來調整參數的值 shared_buffers
。
對於記憶體最多 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 16384
。
對於超過 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 32768
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | shared_buffers (英文) |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取要用於主要共用記憶體區域的共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | mmap |
允許的值 | mmap |
參數類型 | 唯讀 |
文件集 | shared_memory_type (英文) |
temp_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個資料庫工作階段所使用的暫存緩衝區數目上限。 |
資料類型 | 整數 |
預設值 | 1024 |
允許的值 | 100-1073741823 |
參數類型 | dynamic |
文件集 | temp_buffers (英文) |
vacuum_buffer_usage_limit
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定 VACUUM、ANALYZE 和 autovacuum 的緩衝池大小。 |
資料類型 | 整數 |
預設值 | 256 |
允許的值 | 0-16777216 |
參數類型 | dynamic |
文件集 | vacuum_buffer_usage_limit |
work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 在寫入暫存磁碟檔案之前,設定內部排序作業和雜湊表所使用的記憶體數量。 |
資料類型 | 整數 |
預設值 | 4096 |
允許的值 | 4096-2097151 |
參數類型 | dynamic |
文件集 | work_mem |
描述
PostgreSQL 中的 work_mem
參數會控制針對每個資料庫工作階段私人記憶體區域中特定內部作業所配置的記憶體數量。 這些作業的其中一個範例是排序和雜湊。
不同於位於共用記憶體區域中的共用緩衝區,work_mem
會配置在每個工作階段或每個查詢私人記憶體空間中。 透過設定適當的 work_mem
大小,您可以大幅提升這些作業的效率,並減少將暫存資料寫入磁碟的需求。
重點
- Private connection memory (私人連線記憶體):
work_mem
是每個資料庫工作階段使用之私人記憶體的一部分。 此記憶體與shared_buffers
使用的共用記憶體區域不同。 - Query-specific usage (查詢特定使用方式):並非所有工作階段或查詢都會使用
work_mem
。SELECT 1
之類的簡單查詢不太可能會需要work_mem
。 不過,牽涉到排序或雜湊等作業的複雜查詢可能會取用一或多個work_mem
區塊。 - Parallel operations (平行作業):對於跨越多個平行後端的查詢,每個後端都可能會使用一或多個
work_mem
區塊。
監視和調整 work_mem
請務必持續監視系統的效能,並視需要調整 work_mem
,特別是如果與排序或雜湊作業相關的查詢執行時間緩慢。 以下是使用 Azure 入口網站中提供的工具來監視效能的方法:
- 查詢效能深入解析:檢查 [Top queries by temporary files] \(依暫存檔案排序的前幾名查詢\) 索引標籤來識別產生暫存檔案的查詢。 這種情況表示可能需要增加
work_mem
。 - 疑難排解指南:使用疑難排解指南中的 [高暫存檔案] 索引標籤來識別有問題的查詢。
細微調整
當您管理 work_mem
參數時,採用細微調整的方法,而不是設定全域值通常會更有效率。 此方法可確保您可以根據處理序和使用者的特定需求,明智地配置記憶體。 其也可將發生記憶體不足問題的風險降到最低。 以下是您可以如何進行:
使用者層級:如果特定使用者主要涉及需要大量記憶體的彙總或報告工作,請考慮針對該使用者自訂
work_mem
值。 使用ALTER ROLE
命令來增強該使用者作業的效能。函式/程序層次:如果特定函式或程序會產生大量暫存檔案,增加該特定函式或程序層次的
work_mem
值可能會有幫助。 使用ALTER FUNCTION
或ALTER PROCEDURE
命令來特別配置更多記憶體給這些作業。資料庫層級:如果只有特定資料庫會產生大量暫存檔案,請改變資料庫層級的
work_mem
。全域層級:如果您的系統分析顯示大多數查詢都會產生小型的暫存檔案,而只有少數查詢會建立大型檔案,則以全域方式增加
work_mem
值可能是較為精明的做法。 此動作可促成在記憶體中處理大部分查詢,因此您可以避免磁碟型作業並提高效率。 不過,請務必小心並監視伺服器上的記憶體使用率,以確保其可以處理增加的work_mem
值。
判斷排序作業的最小 work_mem 值
若要尋找特定查詢的最小 work_mem
值,特別是在排序處理序期間會產生暫存磁碟檔案的查詢,請先考慮查詢執行期間所產生的暫存檔案大小。 例如,如果某個查詢會產生 20 MB 的暫存檔案:
- 使用 psql 或您慣用的 PostgreSQL 用戶端連線到您的資料庫。
- 將初始
work_mem
值設定為略高於 20 MB,以將在記憶體內處理時的其他標頭納入考量。 使用如下的命令:SET work_mem TO '25MB'
。 - 在相同工作階段有問題的查詢上執行
EXPLAIN ANALYZE
。 - 檢閱
"Sort Method: quicksort Memory: xkB"
的輸出。 如果其指出"external merge Disk: xkB"
,請以累加方式增加work_mem
值,然後重新測試,直到出現"quicksort Memory"
為止。"quicksort Memory"
的外觀表示查詢現在正在記憶體內運作。 - 透過此方法判斷值之後,您便能以全域或更細微的層級 (如上所述) 套用該值,以符合您的作業需求。
autovacuum_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個自動資料清理背景工作處理序所要使用的記憶體上限。 |
資料類型 | 整數 |
預設值 | -1 |
允許的值 | -1-2097151 |
參數類型 | dynamic |
文件集 | autovacuum_work_mem (英文) |
dynamic_shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取所使用的動態共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | posix |
允許的值 | posix |
參數類型 | 唯讀 |
文件集 | dynamic_shared_memory_type (英文) |
hash_mem_multiplier
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 要用於雜湊資表的多個 work_mem。 |
資料類型 | numeric |
預設值 | 2 |
允許的值 | 1-1000 |
參數類型 | dynamic |
文件集 | hash_mem_multiplier (英文) |
huge_pages
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 啟用/停用大型記憶體分頁的使用。 此設定不適用於具有少於 4 個 V 核心的伺服器。 |
資料類型 | 列舉 |
預設值 | try |
允許的值 | on,off,try |
參數類型 | static |
文件集 | huge_pages (英文) |
描述
大型分頁是一項功能,能以較大區塊的形式來管理記憶體。 您通常可以管理最多 2 MB 的區塊,而不是標準的 4 KB 分頁。
使用大型分頁可提供可能有效卸載 CPU 的效能優勢:
- 其可減少與記憶體管理工作相關聯的額外負荷,例如較少的轉譯後備緩衝區 (TLB) 遺漏。
- 其能縮短記憶體管理所需的時間。
具體而言,在 PostgreSQL 中,您只能針對共用記憶體區域使用大型分頁。 共用記憶體區域的絕大部分都會配置給共用緩衝區。
另一個優點是,大型分頁會防止將共用記憶體區域交換到磁碟,其能進一步穩定效能。
建議
- 對於具有重要記憶體資源的伺服器,請避免停用大型分頁。 停用大型分頁可能會危害效能。
- 如果您從不支援大型分頁的較小伺服器開始,但您預期會擴大至支援大型分頁的伺服器,請將
huge_pages
設定保持在TRY
,以獲得順暢的轉換和最佳效能。
Azure 特定注意事項
對於具有四個或多個 V 核心的伺服器,系統會從底層作業系統自動配置大型分頁。 此功能不適用於具有少於四個 V 核心的伺服器。 如果變更任何共用記憶體設定 (包括對 shared_buffers
的變更),系統會自動調整大型分頁數目。
huge_page_size
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 應要求之大型分頁的大小。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0 |
參數類型 | 唯讀 |
文件集 | huge_page_size (英文) |
logical_decoding_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於邏輯解碼的最大記憶體。 |
資料類型 | 整數 |
預設值 | 65536 |
允許的值 | 64-2147483647 |
參數類型 | dynamic |
文件集 | logical_decoding_work_mem (英文) |
maintenance_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於維護作業 (例如 VACUUM、建立索引) 的最大記憶體。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 1024-2097151 |
參數類型 | dynamic |
文件集 | maintenance_work_mem |
描述
maintenance_work_mem
是 PostgreSQL 中的設定參數。 其會控管配置給如下列維護作業的記憶體數量:VACUUM
、CREATE INDEX
和 ALTER TABLE
。 不同於會影響查詢作業記憶體配置的 work_mem
,maintenance_work_mem
會保留給維護及最佳化資料庫結構的工作。
重點
- Vacuum memory cap (資料清理記憶體上限):如果您想要透過增加
maintenance_work_mem
來加快清除無效 Tuple 的速度,請注意VACUUM
有收集無效 Tuple 識別項的內建限制。 其針對此處理序最多只能使用 1 GB 的記憶體。 - Separation of memory for autovacuum (針對自動資料清理區隔記憶體):您可以使用
autovacuum_work_mem
設定來控制自動資料清理作業獨立使用的記憶體。 此設定可作為maintenance_work_mem
的子集。 您可以決定在不會影響其他維護工作和資料定義作業之記憶體配置的情況下,要讓記憶體自動資料清理使用多少記憶體。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 maintenance_work_mem
伺服器參數的預設值。 對於支援彈性伺服器之計算的任何後續產品選擇變更,對於該執行個體 maintenance_work_mem
伺服器參數的預設值沒有任何影響。
每次變更指派給實例的產品時,也應該根據下列公式中的值來調整參數的值 maintenance_work_mem
。
用來計算 值的 maintenance_work_mem
公式為 (long)(82.5 * ln(memoryGiB) + 40) * 1024
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定同時準備交易的數目上限。 執行複本伺服器時,您必須將此參數設定為與主要伺服器相同的或更高的值。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0-262143 |
參數類型 | static |
文件集 | max_prepared_transactions (英文) |
max_stack_depth
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定最大堆疊深度,以 KB 為單位。 |
資料類型 | 整數 |
預設值 | 2048 |
允許的值 | 2048 |
參數類型 | 唯讀 |
文件集 | max_stack_depth (英文) |
min_dynamic_shared_memory
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 要在啟動時保留的動態共用記憶體數量。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0 |
參數類型 | 唯讀 |
文件集 | min_dynamic_shared_memory (英文) |
shared_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定伺服器所使用的共用記憶體緩衝區數目。 單位為 8kb。 允許的值介於可用記憶體 10% - 75% 的範圍內。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 16-1073741823 |
參數類型 | static |
文件集 | shared_buffers (英文) |
描述
shared_buffers
設定參數會決定配置給 PostgreSQL 資料庫以進行資料緩衝的系統記憶體數量。 其可作為可供所有資料庫處理序存取的集中式記憶體集區。
需要資料時,資料庫處理序會先檢查共用緩衝區。 如果必要資料存在,則會快速加以擷取並略過更耗時的磁碟讀取。 共用緩衝區可作為資料庫進程與磁碟之間的媒介,並有效地減少所需的 I/O 作業數目。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 shared_buffers
伺服器參數的預設值。 對於支援彈性伺服器的計算,任何後續的產品選擇變更,都不會影響該實例之伺服器參數的預設值 shared_buffers
。
每次變更指派給實例的產品時,您也應該根據下列公式中的值來調整參數的值 shared_buffers
。
對於記憶體最多 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 16384
。
對於超過 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 32768
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | shared_buffers (英文) |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取要用於主要共用記憶體區域的共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | mmap |
允許的值 | mmap |
參數類型 | 唯讀 |
文件集 | shared_memory_type (英文) |
temp_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個資料庫工作階段所使用的暫存緩衝區數目上限。 |
資料類型 | 整數 |
預設值 | 1024 |
允許的值 | 100-1073741823 |
參數類型 | dynamic |
文件集 | temp_buffers (英文) |
work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 在寫入暫存磁碟檔案之前,設定內部排序作業和雜湊表所使用的記憶體數量。 |
資料類型 | 整數 |
預設值 | 4096 |
允許的值 | 4096-2097151 |
參數類型 | dynamic |
文件集 | work_mem |
描述
PostgreSQL 中的 work_mem
參數會控制針對每個資料庫工作階段私人記憶體區域中特定內部作業所配置的記憶體數量。 這些作業的其中一個範例是排序和雜湊。
不同於位於共用記憶體區域中的共用緩衝區,work_mem
會配置在每個工作階段或每個查詢私人記憶體空間中。 透過設定適當的 work_mem
大小,您可以大幅提升這些作業的效率,並減少將暫存資料寫入磁碟的需求。
重點
- Private connection memory (私人連線記憶體):
work_mem
是每個資料庫工作階段使用之私人記憶體的一部分。 此記憶體與shared_buffers
使用的共用記憶體區域不同。 - Query-specific usage (查詢特定使用方式):並非所有工作階段或查詢都會使用
work_mem
。SELECT 1
之類的簡單查詢不太可能會需要work_mem
。 不過,牽涉到排序或雜湊等作業的複雜查詢可能會取用一或多個work_mem
區塊。 - Parallel operations (平行作業):對於跨越多個平行後端的查詢,每個後端都可能會使用一或多個
work_mem
區塊。
監視和調整 work_mem
請務必持續監視系統的效能,並視需要調整 work_mem
,特別是如果與排序或雜湊作業相關的查詢執行時間緩慢。 以下是使用 Azure 入口網站中提供的工具來監視效能的方法:
- 查詢效能深入解析:檢查 [Top queries by temporary files] \(依暫存檔案排序的前幾名查詢\) 索引標籤來識別產生暫存檔案的查詢。 這種情況表示可能需要增加
work_mem
。 - 疑難排解指南:使用疑難排解指南中的 [高暫存檔案] 索引標籤來識別有問題的查詢。
細微調整
當您管理 work_mem
參數時,採用細微調整的方法,而不是設定全域值通常會更有效率。 此方法可確保您可以根據處理序和使用者的特定需求,明智地配置記憶體。 其也可將發生記憶體不足問題的風險降到最低。 以下是您可以如何進行:
使用者層級:如果特定使用者主要涉及需要大量記憶體的彙總或報告工作,請考慮針對該使用者自訂
work_mem
值。 使用ALTER ROLE
命令來增強該使用者作業的效能。函式/程序層次:如果特定函式或程序會產生大量暫存檔案,增加該特定函式或程序層次的
work_mem
值可能會有幫助。 使用ALTER FUNCTION
或ALTER PROCEDURE
命令來特別配置更多記憶體給這些作業。資料庫層級:如果只有特定資料庫會產生大量暫存檔案,請改變資料庫層級的
work_mem
。全域層級:如果您的系統分析顯示大多數查詢都會產生小型的暫存檔案,而只有少數查詢會建立大型檔案,則以全域方式增加
work_mem
值可能是較為精明的做法。 此動作可促成在記憶體中處理大部分查詢,因此您可以避免磁碟型作業並提高效率。 不過,請務必小心並監視伺服器上的記憶體使用率,以確保其可以處理增加的work_mem
值。
判斷排序作業的最小 work_mem 值
若要尋找特定查詢的最小 work_mem
值,特別是在排序處理序期間會產生暫存磁碟檔案的查詢,請先考慮查詢執行期間所產生的暫存檔案大小。 例如,如果某個查詢會產生 20 MB 的暫存檔案:
- 使用 psql 或您慣用的 PostgreSQL 用戶端連線到您的資料庫。
- 將初始
work_mem
值設定為略高於 20 MB,以將在記憶體內處理時的其他標頭納入考量。 使用如下的命令:SET work_mem TO '25MB'
。 - 在相同工作階段有問題的查詢上執行
EXPLAIN ANALYZE
。 - 檢閱
"Sort Method: quicksort Memory: xkB"
的輸出。 如果其指出"external merge Disk: xkB"
,請以累加方式增加work_mem
值,然後重新測試,直到出現"quicksort Memory"
為止。"quicksort Memory"
的外觀表示查詢現在正在記憶體內運作。 - 透過此方法判斷值之後,您便能以全域或更細微的層級 (如上所述) 套用該值,以符合您的作業需求。
autovacuum_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個自動資料清理背景工作處理序所要使用的記憶體上限。 |
資料類型 | 整數 |
預設值 | -1 |
允許的值 | -1-2097151 |
參數類型 | dynamic |
文件集 | autovacuum_work_mem (英文) |
dynamic_shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取所使用的動態共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | posix |
允許的值 | posix |
參數類型 | 唯讀 |
文件集 | dynamic_shared_memory_type (英文) |
hash_mem_multiplier
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 要用於雜湊資表的多個 work_mem。 |
資料類型 | numeric |
預設值 | 1 |
允許的值 | 1-1000 |
參數類型 | dynamic |
文件集 | hash_mem_multiplier (英文) |
huge_pages
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 啟用/停用大型記憶體分頁的使用。 此設定不適用於具有少於 4 個 V 核心的伺服器。 |
資料類型 | 列舉 |
預設值 | try |
允許的值 | on,off,try |
參數類型 | static |
文件集 | huge_pages (英文) |
描述
大型分頁是一項功能,能以較大區塊的形式來管理記憶體。 您通常可以管理最多 2 MB 的區塊,而不是標準的 4 KB 分頁。
使用大型分頁可提供可能有效卸載 CPU 的效能優勢:
- 其可減少與記憶體管理工作相關聯的額外負荷,例如較少的轉譯後備緩衝區 (TLB) 遺漏。
- 其能縮短記憶體管理所需的時間。
具體而言,在 PostgreSQL 中,您只能針對共用記憶體區域使用大型分頁。 共用記憶體區域的絕大部分都會配置給共用緩衝區。
另一個優點是,大型分頁會防止將共用記憶體區域交換到磁碟,其能進一步穩定效能。
建議
- 對於具有重要記憶體資源的伺服器,請避免停用大型分頁。 停用大型分頁可能會危害效能。
- 如果您從不支援大型分頁的較小伺服器開始,但您預期會擴大至支援大型分頁的伺服器,請將
huge_pages
設定保持在TRY
,以獲得順暢的轉換和最佳效能。
Azure 特定注意事項
對於具有四個或多個 V 核心的伺服器,系統會從底層作業系統自動配置大型分頁。 此功能不適用於具有少於四個 V 核心的伺服器。 如果變更任何共用記憶體設定 (包括對 shared_buffers
的變更),系統會自動調整大型分頁數目。
huge_page_size
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 應要求之大型分頁的大小。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0 |
參數類型 | 唯讀 |
文件集 | huge_page_size (英文) |
logical_decoding_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於邏輯解碼的最大記憶體。 |
資料類型 | 整數 |
預設值 | 65536 |
允許的值 | 64-2147483647 |
參數類型 | dynamic |
文件集 | logical_decoding_work_mem (英文) |
maintenance_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於維護作業 (例如 VACUUM、建立索引) 的最大記憶體。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 1024-2097151 |
參數類型 | dynamic |
文件集 | maintenance_work_mem |
描述
maintenance_work_mem
是 PostgreSQL 中的設定參數。 其會控管配置給如下列維護作業的記憶體數量:VACUUM
、CREATE INDEX
和 ALTER TABLE
。 不同於會影響查詢作業記憶體配置的 work_mem
,maintenance_work_mem
會保留給維護及最佳化資料庫結構的工作。
重點
- Vacuum memory cap (資料清理記憶體上限):如果您想要透過增加
maintenance_work_mem
來加快清除無效 Tuple 的速度,請注意VACUUM
有收集無效 Tuple 識別項的內建限制。 其針對此處理序最多只能使用 1 GB 的記憶體。 - Separation of memory for autovacuum (針對自動資料清理區隔記憶體):您可以使用
autovacuum_work_mem
設定來控制自動資料清理作業獨立使用的記憶體。 此設定可作為maintenance_work_mem
的子集。 您可以決定在不會影響其他維護工作和資料定義作業之記憶體配置的情況下,要讓記憶體自動資料清理使用多少記憶體。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 maintenance_work_mem
伺服器參數的預設值。 對於支援彈性伺服器之計算的任何後續產品選擇變更,對於該執行個體 maintenance_work_mem
伺服器參數的預設值沒有任何影響。
每次變更指派給實例的產品時,也應該根據下列公式中的值來調整參數的值 maintenance_work_mem
。
用來計算 值的 maintenance_work_mem
公式為 (long)(82.5 * ln(memoryGiB) + 40) * 1024
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定同時準備交易的數目上限。 執行複本伺服器時,您必須將此參數設定為與主要伺服器相同的或更高的值。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0-262143 |
參數類型 | static |
文件集 | max_prepared_transactions (英文) |
max_stack_depth
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定最大堆疊深度,以 KB 為單位。 |
資料類型 | 整數 |
預設值 | 2048 |
允許的值 | 2048 |
參數類型 | 唯讀 |
文件集 | max_stack_depth (英文) |
min_dynamic_shared_memory
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 要在啟動時保留的動態共用記憶體數量。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0 |
參數類型 | 唯讀 |
文件集 | min_dynamic_shared_memory (英文) |
shared_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定伺服器所使用的共用記憶體緩衝區數目。 單位為 8kb。 允許的值介於可用記憶體 10% - 75% 的範圍內。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 16-1073741823 |
參數類型 | static |
文件集 | shared_buffers (英文) |
描述
shared_buffers
設定參數會決定配置給 PostgreSQL 資料庫以進行資料緩衝的系統記憶體數量。 其可作為可供所有資料庫處理序存取的集中式記憶體集區。
需要資料時,資料庫處理序會先檢查共用緩衝區。 如果必要資料存在,則會快速加以擷取並略過更耗時的磁碟讀取。 共用緩衝區可作為資料庫進程與磁碟之間的媒介,並有效地減少所需的 I/O 作業數目。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 shared_buffers
伺服器參數的預設值。 對於支援彈性伺服器的計算,任何後續的產品選擇變更,都不會影響該實例之伺服器參數的預設值 shared_buffers
。
每次變更指派給實例的產品時,您也應該根據下列公式中的值來調整參數的值 shared_buffers
。
對於記憶體最多 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 16384
。
對於超過 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 32768
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | shared_buffers (英文) |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取要用於主要共用記憶體區域的共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | mmap |
允許的值 | mmap |
參數類型 | 唯讀 |
文件集 | shared_memory_type (英文) |
temp_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個資料庫工作階段所使用的暫存緩衝區數目上限。 |
資料類型 | 整數 |
預設值 | 1024 |
允許的值 | 100-1073741823 |
參數類型 | dynamic |
文件集 | temp_buffers (英文) |
work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 在寫入暫存磁碟檔案之前,設定內部排序作業和雜湊表所使用的記憶體數量。 |
資料類型 | 整數 |
預設值 | 4096 |
允許的值 | 4096-2097151 |
參數類型 | dynamic |
文件集 | work_mem |
描述
PostgreSQL 中的 work_mem
參數會控制針對每個資料庫工作階段私人記憶體區域中特定內部作業所配置的記憶體數量。 這些作業的其中一個範例是排序和雜湊。
不同於位於共用記憶體區域中的共用緩衝區,work_mem
會配置在每個工作階段或每個查詢私人記憶體空間中。 透過設定適當的 work_mem
大小,您可以大幅提升這些作業的效率,並減少將暫存資料寫入磁碟的需求。
重點
- Private connection memory (私人連線記憶體):
work_mem
是每個資料庫工作階段使用之私人記憶體的一部分。 此記憶體與shared_buffers
使用的共用記憶體區域不同。 - Query-specific usage (查詢特定使用方式):並非所有工作階段或查詢都會使用
work_mem
。SELECT 1
之類的簡單查詢不太可能會需要work_mem
。 不過,牽涉到排序或雜湊等作業的複雜查詢可能會取用一或多個work_mem
區塊。 - Parallel operations (平行作業):對於跨越多個平行後端的查詢,每個後端都可能會使用一或多個
work_mem
區塊。
監視和調整 work_mem
請務必持續監視系統的效能,並視需要調整 work_mem
,特別是如果與排序或雜湊作業相關的查詢執行時間緩慢。 以下是使用 Azure 入口網站中提供的工具來監視效能的方法:
- 查詢效能深入解析:檢查 [Top queries by temporary files] \(依暫存檔案排序的前幾名查詢\) 索引標籤來識別產生暫存檔案的查詢。 這種情況表示可能需要增加
work_mem
。 - 疑難排解指南:使用疑難排解指南中的 [高暫存檔案] 索引標籤來識別有問題的查詢。
細微調整
當您管理 work_mem
參數時,採用細微調整的方法,而不是設定全域值通常會更有效率。 此方法可確保您可以根據處理序和使用者的特定需求,明智地配置記憶體。 其也可將發生記憶體不足問題的風險降到最低。 以下是您可以如何進行:
使用者層級:如果特定使用者主要涉及需要大量記憶體的彙總或報告工作,請考慮針對該使用者自訂
work_mem
值。 使用ALTER ROLE
命令來增強該使用者作業的效能。函式/程序層次:如果特定函式或程序會產生大量暫存檔案,增加該特定函式或程序層次的
work_mem
值可能會有幫助。 使用ALTER FUNCTION
或ALTER PROCEDURE
命令來特別配置更多記憶體給這些作業。資料庫層級:如果只有特定資料庫會產生大量暫存檔案,請改變資料庫層級的
work_mem
。全域層級:如果您的系統分析顯示大多數查詢都會產生小型的暫存檔案,而只有少數查詢會建立大型檔案,則以全域方式增加
work_mem
值可能是較為精明的做法。 此動作可促成在記憶體中處理大部分查詢,因此您可以避免磁碟型作業並提高效率。 不過,請務必小心並監視伺服器上的記憶體使用率,以確保其可以處理增加的work_mem
值。
判斷排序作業的最小 work_mem 值
若要尋找特定查詢的最小 work_mem
值,特別是在排序處理序期間會產生暫存磁碟檔案的查詢,請先考慮查詢執行期間所產生的暫存檔案大小。 例如,如果某個查詢會產生 20 MB 的暫存檔案:
- 使用 psql 或您慣用的 PostgreSQL 用戶端連線到您的資料庫。
- 將初始
work_mem
值設定為略高於 20 MB,以將在記憶體內處理時的其他標頭納入考量。 使用如下的命令:SET work_mem TO '25MB'
。 - 在相同工作階段有問題的查詢上執行
EXPLAIN ANALYZE
。 - 檢閱
"Sort Method: quicksort Memory: xkB"
的輸出。 如果其指出"external merge Disk: xkB"
,請以累加方式增加work_mem
值,然後重新測試,直到出現"quicksort Memory"
為止。"quicksort Memory"
的外觀表示查詢現在正在記憶體內運作。 - 透過此方法判斷值之後,您便能以全域或更細微的層級 (如上所述) 套用該值,以符合您的作業需求。
autovacuum_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個自動資料清理背景工作處理序所要使用的記憶體上限。 |
資料類型 | 整數 |
預設值 | -1 |
允許的值 | -1-2097151 |
參數類型 | dynamic |
文件集 | autovacuum_work_mem (英文) |
dynamic_shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取所使用的動態共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | posix |
允許的值 | posix |
參數類型 | 唯讀 |
文件集 | dynamic_shared_memory_type (英文) |
hash_mem_multiplier
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 要用於雜湊資表的多個 work_mem。 |
資料類型 | numeric |
預設值 | 1 |
允許的值 | 1-1000 |
參數類型 | dynamic |
文件集 | hash_mem_multiplier (英文) |
huge_pages
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 啟用/停用大型記憶體分頁的使用。 此設定不適用於具有少於 4 個 V 核心的伺服器。 |
資料類型 | 列舉 |
預設值 | try |
允許的值 | on,off,try |
參數類型 | static |
文件集 | huge_pages (英文) |
描述
大型分頁是一項功能,能以較大區塊的形式來管理記憶體。 您通常可以管理最多 2 MB 的區塊,而不是標準的 4 KB 分頁。
使用大型分頁可提供可能有效卸載 CPU 的效能優勢:
- 其可減少與記憶體管理工作相關聯的額外負荷,例如較少的轉譯後備緩衝區 (TLB) 遺漏。
- 其能縮短記憶體管理所需的時間。
具體而言,在 PostgreSQL 中,您只能針對共用記憶體區域使用大型分頁。 共用記憶體區域的絕大部分都會配置給共用緩衝區。
另一個優點是,大型分頁會防止將共用記憶體區域交換到磁碟,其能進一步穩定效能。
建議
- 對於具有重要記憶體資源的伺服器,請避免停用大型分頁。 停用大型分頁可能會危害效能。
- 如果您從不支援大型分頁的較小伺服器開始,但您預期會擴大至支援大型分頁的伺服器,請將
huge_pages
設定保持在TRY
,以獲得順暢的轉換和最佳效能。
Azure 特定注意事項
對於具有四個或多個 V 核心的伺服器,系統會從底層作業系統自動配置大型分頁。 此功能不適用於具有少於四個 V 核心的伺服器。 如果變更任何共用記憶體設定 (包括對 shared_buffers
的變更),系統會自動調整大型分頁數目。
logical_decoding_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於邏輯解碼的最大記憶體。 |
資料類型 | 整數 |
預設值 | 65536 |
允許的值 | 64-2147483647 |
參數類型 | dynamic |
文件集 | logical_decoding_work_mem (英文) |
maintenance_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於維護作業 (例如 VACUUM、建立索引) 的最大記憶體。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 1024-2097151 |
參數類型 | dynamic |
文件集 | maintenance_work_mem |
描述
maintenance_work_mem
是 PostgreSQL 中的設定參數。 其會控管配置給如下列維護作業的記憶體數量:VACUUM
、CREATE INDEX
和 ALTER TABLE
。 不同於會影響查詢作業記憶體配置的 work_mem
,maintenance_work_mem
會保留給維護及最佳化資料庫結構的工作。
重點
- Vacuum memory cap (資料清理記憶體上限):如果您想要透過增加
maintenance_work_mem
來加快清除無效 Tuple 的速度,請注意VACUUM
有收集無效 Tuple 識別項的內建限制。 其針對此處理序最多只能使用 1 GB 的記憶體。 - Separation of memory for autovacuum (針對自動資料清理區隔記憶體):您可以使用
autovacuum_work_mem
設定來控制自動資料清理作業獨立使用的記憶體。 此設定可作為maintenance_work_mem
的子集。 您可以決定在不會影響其他維護工作和資料定義作業之記憶體配置的情況下,要讓記憶體自動資料清理使用多少記憶體。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 maintenance_work_mem
伺服器參數的預設值。 對於支援彈性伺服器之計算的任何後續產品選擇變更,對於該執行個體 maintenance_work_mem
伺服器參數的預設值沒有任何影響。
每次變更指派給實例的產品時,也應該根據下列公式中的值來調整參數的值 maintenance_work_mem
。
用來計算 值的 maintenance_work_mem
公式為 (long)(82.5 * ln(memoryGiB) + 40) * 1024
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定同時準備交易的數目上限。 執行複本伺服器時,您必須將此參數設定為與主要伺服器相同的或更高的值。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0-262143 |
參數類型 | static |
文件集 | max_prepared_transactions (英文) |
max_stack_depth
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定最大堆疊深度,以 KB 為單位。 |
資料類型 | 整數 |
預設值 | 2048 |
允許的值 | 2048 |
參數類型 | 唯讀 |
文件集 | max_stack_depth (英文) |
shared_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定伺服器所使用的共用記憶體緩衝區數目。 單位為 8kb。 允許的值介於可用記憶體 10% - 75% 的範圍內。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 16-1073741823 |
參數類型 | static |
文件集 | shared_buffers (英文) |
描述
shared_buffers
設定參數會決定配置給 PostgreSQL 資料庫以進行資料緩衝的系統記憶體數量。 其可作為可供所有資料庫處理序存取的集中式記憶體集區。
需要資料時,資料庫處理序會先檢查共用緩衝區。 如果必要資料存在,則會快速加以擷取並略過更耗時的磁碟讀取。 共用緩衝區可作為資料庫進程與磁碟之間的媒介,並有效地減少所需的 I/O 作業數目。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 shared_buffers
伺服器參數的預設值。 對於支援彈性伺服器的計算,任何後續的產品選擇變更,都不會影響該實例之伺服器參數的預設值 shared_buffers
。
每次變更指派給實例的產品時,您也應該根據下列公式中的值來調整參數的值 shared_buffers
。
對於記憶體最多 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 16384
。
對於超過 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 32768
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | shared_buffers (英文) |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取要用於主要共用記憶體區域的共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | mmap |
允許的值 | mmap |
參數類型 | 唯讀 |
文件集 | shared_memory_type (英文) |
temp_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個資料庫工作階段所使用的暫存緩衝區數目上限。 |
資料類型 | 整數 |
預設值 | 1024 |
允許的值 | 100-1073741823 |
參數類型 | dynamic |
文件集 | temp_buffers (英文) |
work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 在寫入暫存磁碟檔案之前,設定內部排序作業和雜湊表所使用的記憶體數量。 |
資料類型 | 整數 |
預設值 | 4096 |
允許的值 | 4096-2097151 |
參數類型 | dynamic |
文件集 | work_mem |
描述
PostgreSQL 中的 work_mem
參數會控制針對每個資料庫工作階段私人記憶體區域中特定內部作業所配置的記憶體數量。 這些作業的其中一個範例是排序和雜湊。
不同於位於共用記憶體區域中的共用緩衝區,work_mem
會配置在每個工作階段或每個查詢私人記憶體空間中。 透過設定適當的 work_mem
大小,您可以大幅提升這些作業的效率,並減少將暫存資料寫入磁碟的需求。
重點
- Private connection memory (私人連線記憶體):
work_mem
是每個資料庫工作階段使用之私人記憶體的一部分。 此記憶體與shared_buffers
使用的共用記憶體區域不同。 - Query-specific usage (查詢特定使用方式):並非所有工作階段或查詢都會使用
work_mem
。SELECT 1
之類的簡單查詢不太可能會需要work_mem
。 不過,牽涉到排序或雜湊等作業的複雜查詢可能會取用一或多個work_mem
區塊。 - Parallel operations (平行作業):對於跨越多個平行後端的查詢,每個後端都可能會使用一或多個
work_mem
區塊。
監視和調整 work_mem
請務必持續監視系統的效能,並視需要調整 work_mem
,特別是如果與排序或雜湊作業相關的查詢執行時間緩慢。 以下是使用 Azure 入口網站中提供的工具來監視效能的方法:
- 查詢效能深入解析:檢查 [Top queries by temporary files] \(依暫存檔案排序的前幾名查詢\) 索引標籤來識別產生暫存檔案的查詢。 這種情況表示可能需要增加
work_mem
。 - 疑難排解指南:使用疑難排解指南中的 [高暫存檔案] 索引標籤來識別有問題的查詢。
細微調整
當您管理 work_mem
參數時,採用細微調整的方法,而不是設定全域值通常會更有效率。 此方法可確保您可以根據處理序和使用者的特定需求,明智地配置記憶體。 其也可將發生記憶體不足問題的風險降到最低。 以下是您可以如何進行:
使用者層級:如果特定使用者主要涉及需要大量記憶體的彙總或報告工作,請考慮針對該使用者自訂
work_mem
值。 使用ALTER ROLE
命令來增強該使用者作業的效能。函式/程序層次:如果特定函式或程序會產生大量暫存檔案,增加該特定函式或程序層次的
work_mem
值可能會有幫助。 使用ALTER FUNCTION
或ALTER PROCEDURE
命令來特別配置更多記憶體給這些作業。資料庫層級:如果只有特定資料庫會產生大量暫存檔案,請改變資料庫層級的
work_mem
。全域層級:如果您的系統分析顯示大多數查詢都會產生小型的暫存檔案,而只有少數查詢會建立大型檔案,則以全域方式增加
work_mem
值可能是較為精明的做法。 此動作可促成在記憶體中處理大部分查詢,因此您可以避免磁碟型作業並提高效率。 不過,請務必小心並監視伺服器上的記憶體使用率,以確保其可以處理增加的work_mem
值。
判斷排序作業的最小 work_mem 值
若要尋找特定查詢的最小 work_mem
值,特別是在排序處理序期間會產生暫存磁碟檔案的查詢,請先考慮查詢執行期間所產生的暫存檔案大小。 例如,如果某個查詢會產生 20 MB 的暫存檔案:
- 使用 psql 或您慣用的 PostgreSQL 用戶端連線到您的資料庫。
- 將初始
work_mem
值設定為略高於 20 MB,以將在記憶體內處理時的其他標頭納入考量。 使用如下的命令:SET work_mem TO '25MB'
。 - 在相同工作階段有問題的查詢上執行
EXPLAIN ANALYZE
。 - 檢閱
"Sort Method: quicksort Memory: xkB"
的輸出。 如果其指出"external merge Disk: xkB"
,請以累加方式增加work_mem
值,然後重新測試,直到出現"quicksort Memory"
為止。"quicksort Memory"
的外觀表示查詢現在正在記憶體內運作。 - 透過此方法判斷值之後,您便能以全域或更細微的層級 (如上所述) 套用該值,以符合您的作業需求。
autovacuum_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個自動資料清理背景工作處理序所要使用的記憶體上限。 |
資料類型 | 整數 |
預設值 | -1 |
允許的值 | -1-2097151 |
參數類型 | dynamic |
文件集 | autovacuum_work_mem (英文) |
dynamic_shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取所使用的動態共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | posix |
允許的值 | posix |
參數類型 | 唯讀 |
文件集 | dynamic_shared_memory_type (英文) |
hash_mem_multiplier
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 要用於雜湊資表的多個 work_mem。 |
資料類型 | numeric |
預設值 | 1 |
允許的值 | 1-1000 |
參數類型 | dynamic |
文件集 | hash_mem_multiplier (英文) |
huge_pages
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 啟用/停用大型記憶體分頁的使用。 此設定不適用於具有少於 4 個 V 核心的伺服器。 |
資料類型 | 列舉 |
預設值 | try |
允許的值 | on,off,try |
參數類型 | static |
文件集 | huge_pages (英文) |
描述
大型分頁是一項功能,能以較大區塊的形式來管理記憶體。 您通常可以管理最多 2 MB 的區塊,而不是標準的 4 KB 分頁。
使用大型分頁可提供可能有效卸載 CPU 的效能優勢:
- 其可減少與記憶體管理工作相關聯的額外負荷,例如較少的轉譯後備緩衝區 (TLB) 遺漏。
- 其能縮短記憶體管理所需的時間。
具體而言,在 PostgreSQL 中,您只能針對共用記憶體區域使用大型分頁。 共用記憶體區域的絕大部分都會配置給共用緩衝區。
另一個優點是,大型分頁會防止將共用記憶體區域交換到磁碟,其能進一步穩定效能。
建議
- 對於具有重要記憶體資源的伺服器,請避免停用大型分頁。 停用大型分頁可能會危害效能。
- 如果您從不支援大型分頁的較小伺服器開始,但您預期會擴大至支援大型分頁的伺服器,請將
huge_pages
設定保持在TRY
,以獲得順暢的轉換和最佳效能。
Azure 特定注意事項
對於具有四個或多個 V 核心的伺服器,系統會從底層作業系統自動配置大型分頁。 此功能不適用於具有少於四個 V 核心的伺服器。 如果變更任何共用記憶體設定 (包括對 shared_buffers
的變更),系統會自動調整大型分頁數目。
maintenance_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於維護作業 (例如 VACUUM、建立索引) 的最大記憶體。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 1024-2097151 |
參數類型 | dynamic |
文件集 | maintenance_work_mem |
描述
maintenance_work_mem
是 PostgreSQL 中的設定參數。 其會控管配置給如下列維護作業的記憶體數量:VACUUM
、CREATE INDEX
和 ALTER TABLE
。 不同於會影響查詢作業記憶體配置的 work_mem
,maintenance_work_mem
會保留給維護及最佳化資料庫結構的工作。
重點
- Vacuum memory cap (資料清理記憶體上限):如果您想要透過增加
maintenance_work_mem
來加快清除無效 Tuple 的速度,請注意VACUUM
有收集無效 Tuple 識別項的內建限制。 其針對此處理序最多只能使用 1 GB 的記憶體。 - Separation of memory for autovacuum (針對自動資料清理區隔記憶體):您可以使用
autovacuum_work_mem
設定來控制自動資料清理作業獨立使用的記憶體。 此設定可作為maintenance_work_mem
的子集。 您可以決定在不會影響其他維護工作和資料定義作業之記憶體配置的情況下,要讓記憶體自動資料清理使用多少記憶體。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 maintenance_work_mem
伺服器參數的預設值。 對於支援彈性伺服器之計算的任何後續產品選擇變更,對於該執行個體 maintenance_work_mem
伺服器參數的預設值沒有任何影響。
每次變更指派給實例的產品時,也應該根據下列公式中的值來調整參數的值 maintenance_work_mem
。
用來計算 值的 maintenance_work_mem
公式為 (long)(82.5 * ln(memoryGiB) + 40) * 1024
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定同時準備交易的數目上限。 執行複本伺服器時,您必須將此參數設定為與主要伺服器相同的或更高的值。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0-262143 |
參數類型 | static |
文件集 | max_prepared_transactions (英文) |
max_stack_depth
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定最大堆疊深度,以 KB 為單位。 |
資料類型 | 整數 |
預設值 | 2048 |
允許的值 | 2048 |
參數類型 | 唯讀 |
文件集 | max_stack_depth (英文) |
shared_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定伺服器所使用的共用記憶體緩衝區數目。 單位為 8kb。 允許的值介於可用記憶體 10% - 75% 的範圍內。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 16-1073741823 |
參數類型 | static |
文件集 | shared_buffers (英文) |
描述
shared_buffers
設定參數會決定配置給 PostgreSQL 資料庫以進行資料緩衝的系統記憶體數量。 其可作為可供所有資料庫處理序存取的集中式記憶體集區。
需要資料時,資料庫處理序會先檢查共用緩衝區。 如果必要資料存在,則會快速加以擷取並略過更耗時的磁碟讀取。 共用緩衝區可作為資料庫進程與磁碟之間的媒介,並有效地減少所需的 I/O 作業數目。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 shared_buffers
伺服器參數的預設值。 對於支援彈性伺服器的計算,任何後續的產品選擇變更,都不會影響該實例之伺服器參數的預設值 shared_buffers
。
每次變更指派給實例的產品時,您也應該根據下列公式中的值來調整參數的值 shared_buffers
。
對於記憶體最多 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 16384
。
對於超過 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 32768
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | shared_buffers (英文) |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取要用於主要共用記憶體區域的共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | mmap |
允許的值 | mmap |
參數類型 | 唯讀 |
文件集 | shared_memory_type (英文) |
temp_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個資料庫工作階段所使用的暫存緩衝區數目上限。 |
資料類型 | 整數 |
預設值 | 1024 |
允許的值 | 100-1073741823 |
參數類型 | dynamic |
文件集 | temp_buffers (英文) |
work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 在寫入暫存磁碟檔案之前,設定內部排序作業和雜湊表所使用的記憶體數量。 |
資料類型 | 整數 |
預設值 | 4096 |
允許的值 | 4096-2097151 |
參數類型 | dynamic |
文件集 | work_mem |
描述
PostgreSQL 中的 work_mem
參數會控制針對每個資料庫工作階段私人記憶體區域中特定內部作業所配置的記憶體數量。 這些作業的其中一個範例是排序和雜湊。
不同於位於共用記憶體區域中的共用緩衝區,work_mem
會配置在每個工作階段或每個查詢私人記憶體空間中。 透過設定適當的 work_mem
大小,您可以大幅提升這些作業的效率,並減少將暫存資料寫入磁碟的需求。
重點
- Private connection memory (私人連線記憶體):
work_mem
是每個資料庫工作階段使用之私人記憶體的一部分。 此記憶體與shared_buffers
使用的共用記憶體區域不同。 - Query-specific usage (查詢特定使用方式):並非所有工作階段或查詢都會使用
work_mem
。SELECT 1
之類的簡單查詢不太可能會需要work_mem
。 不過,牽涉到排序或雜湊等作業的複雜查詢可能會取用一或多個work_mem
區塊。 - Parallel operations (平行作業):對於跨越多個平行後端的查詢,每個後端都可能會使用一或多個
work_mem
區塊。
監視和調整 work_mem
請務必持續監視系統的效能,並視需要調整 work_mem
,特別是如果與排序或雜湊作業相關的查詢執行時間緩慢。 以下是使用 Azure 入口網站中提供的工具來監視效能的方法:
- 查詢效能深入解析:檢查 [Top queries by temporary files] \(依暫存檔案排序的前幾名查詢\) 索引標籤來識別產生暫存檔案的查詢。 這種情況表示可能需要增加
work_mem
。 - 疑難排解指南:使用疑難排解指南中的 [高暫存檔案] 索引標籤來識別有問題的查詢。
細微調整
當您管理 work_mem
參數時,採用細微調整的方法,而不是設定全域值通常會更有效率。 此方法可確保您可以根據處理序和使用者的特定需求,明智地配置記憶體。 其也可將發生記憶體不足問題的風險降到最低。 以下是您可以如何進行:
使用者層級:如果特定使用者主要涉及需要大量記憶體的彙總或報告工作,請考慮針對該使用者自訂
work_mem
值。 使用ALTER ROLE
命令來增強該使用者作業的效能。函式/程序層次:如果特定函式或程序會產生大量暫存檔案,增加該特定函式或程序層次的
work_mem
值可能會有幫助。 使用ALTER FUNCTION
或ALTER PROCEDURE
命令來特別配置更多記憶體給這些作業。資料庫層級:如果只有特定資料庫會產生大量暫存檔案,請改變資料庫層級的
work_mem
。全域層級:如果您的系統分析顯示大多數查詢都會產生小型的暫存檔案,而只有少數查詢會建立大型檔案,則以全域方式增加
work_mem
值可能是較為精明的做法。 此動作可促成在記憶體中處理大部分查詢,因此您可以避免磁碟型作業並提高效率。 不過,請務必小心並監視伺服器上的記憶體使用率,以確保其可以處理增加的work_mem
值。
判斷排序作業的最小 work_mem 值
若要尋找特定查詢的最小 work_mem
值,特別是在排序處理序期間會產生暫存磁碟檔案的查詢,請先考慮查詢執行期間所產生的暫存檔案大小。 例如,如果某個查詢會產生 20 MB 的暫存檔案:
- 使用 psql 或您慣用的 PostgreSQL 用戶端連線到您的資料庫。
- 將初始
work_mem
值設定為略高於 20 MB,以將在記憶體內處理時的其他標頭納入考量。 使用如下的命令:SET work_mem TO '25MB'
。 - 在相同工作階段有問題的查詢上執行
EXPLAIN ANALYZE
。 - 檢閱
"Sort Method: quicksort Memory: xkB"
的輸出。 如果其指出"external merge Disk: xkB"
,請以累加方式增加work_mem
值,然後重新測試,直到出現"quicksort Memory"
為止。"quicksort Memory"
的外觀表示查詢現在正在記憶體內運作。 - 透過此方法判斷值之後,您便能以全域或更細微的層級 (如上所述) 套用該值,以符合您的作業需求。
autovacuum_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個自動資料清理背景工作處理序所要使用的記憶體上限。 |
資料類型 | 整數 |
預設值 | -1 |
允許的值 | -1-2097151 |
參數類型 | dynamic |
文件集 | autovacuum_work_mem (英文) |
dynamic_shared_memory_type
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 選取所使用的動態共用記憶體實作。 |
資料類型 | 列舉 |
預設值 | posix |
允許的值 | posix |
參數類型 | 唯讀 |
文件集 | dynamic_shared_memory_type (英文) |
huge_pages
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 啟用/停用大型記憶體分頁的使用。 此設定不適用於具有少於 4 個 V 核心的伺服器。 |
資料類型 | 列舉 |
預設值 | try |
允許的值 | on,off,try |
參數類型 | static |
文件集 | huge_pages (英文) |
描述
大型分頁是一項功能,能以較大區塊的形式來管理記憶體。 您通常可以管理最多 2 MB 的區塊,而不是標準的 4 KB 分頁。
使用大型分頁可提供可能有效卸載 CPU 的效能優勢:
- 其可減少與記憶體管理工作相關聯的額外負荷,例如較少的轉譯後備緩衝區 (TLB) 遺漏。
- 其能縮短記憶體管理所需的時間。
具體而言,在 PostgreSQL 中,您只能針對共用記憶體區域使用大型分頁。 共用記憶體區域的絕大部分都會配置給共用緩衝區。
另一個優點是,大型分頁會防止將共用記憶體區域交換到磁碟,其能進一步穩定效能。
建議
- 對於具有重要記憶體資源的伺服器,請避免停用大型分頁。 停用大型分頁可能會危害效能。
- 如果您從不支援大型分頁的較小伺服器開始,但您預期會擴大至支援大型分頁的伺服器,請將
huge_pages
設定保持在TRY
,以獲得順暢的轉換和最佳效能。
Azure 特定注意事項
對於具有四個或多個 V 核心的伺服器,系統會從底層作業系統自動配置大型分頁。 此功能不適用於具有少於四個 V 核心的伺服器。 如果變更任何共用記憶體設定 (包括對 shared_buffers
的變更),系統會自動調整大型分頁數目。
maintenance_work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定要用於維護作業 (例如 VACUUM、建立索引) 的最大記憶體。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 1024-2097151 |
參數類型 | dynamic |
文件集 | maintenance_work_mem |
描述
maintenance_work_mem
是 PostgreSQL 中的設定參數。 其會控管配置給如下列維護作業的記憶體數量:VACUUM
、CREATE INDEX
和 ALTER TABLE
。 不同於會影響查詢作業記憶體配置的 work_mem
,maintenance_work_mem
會保留給維護及最佳化資料庫結構的工作。
重點
- Vacuum memory cap (資料清理記憶體上限):如果您想要透過增加
maintenance_work_mem
來加快清除無效 Tuple 的速度,請注意VACUUM
有收集無效 Tuple 識別項的內建限制。 其針對此處理序最多只能使用 1 GB 的記憶體。 - Separation of memory for autovacuum (針對自動資料清理區隔記憶體):您可以使用
autovacuum_work_mem
設定來控制自動資料清理作業獨立使用的記憶體。 此設定可作為maintenance_work_mem
的子集。 您可以決定在不會影響其他維護工作和資料定義作業之記憶體配置的情況下,要讓記憶體自動資料清理使用多少記憶體。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 maintenance_work_mem
伺服器參數的預設值。 對於支援彈性伺服器之計算的任何後續產品選擇變更,對於該執行個體 maintenance_work_mem
伺服器參數的預設值沒有任何影響。
每次變更指派給實例的產品時,也應該根據下列公式中的值來調整參數的值 maintenance_work_mem
。
用來計算 值的 maintenance_work_mem
公式為 (long)(82.5 * ln(memoryGiB) + 40) * 1024
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | maintenance_work_mem |
---|---|
2 GiB | 99328 KiB |
4 GiB | 157696 KiB |
8 GiB | 216064 KiB |
16 GiB | 274432 KiB |
32 GiB | 332800 KiB |
48 GiB | 367616 KiB |
64 GiB | 392192 KiB |
80 GiB | 410624 KiB |
128 GiB | 450560 KiB |
160 GiB | 468992 KiB |
192 GiB | 484352 KiB |
256 GiB | 508928 KiB |
384 GiB | 542720 KiB |
432 GiB | 552960 KiB |
672 GiB | 590848 KiB |
max_prepared_transactions
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定同時準備交易的數目上限。 執行複本伺服器時,您必須將此參數設定為與主要伺服器相同的或更高的值。 |
資料類型 | 整數 |
預設值 | 0 |
允許的值 | 0-262143 |
參數類型 | static |
文件集 | max_prepared_transactions (英文) |
max_stack_depth
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定最大堆疊深度,以 KB 為單位。 |
資料類型 | 整數 |
預設值 | 2048 |
允許的值 | 2048 |
參數類型 | 唯讀 |
文件集 | max_stack_depth (英文) |
shared_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定伺服器所使用的共用記憶體緩衝區數目。 單位為 8kb。 允許的值介於可用記憶體 10% - 75% 的範圍內。 |
資料類型 | 整數 |
預設值 | 取決於配置給伺服器的資源 (vCore、RAM 或磁碟空間)。 |
允許的值 | 16-1073741823 |
參數類型 | static |
文件集 | shared_buffers (英文) |
描述
shared_buffers
設定參數會決定配置給 PostgreSQL 資料庫以進行資料緩衝的系統記憶體數量。 其可作為可供所有資料庫處理序存取的集中式記憶體集區。
需要資料時,資料庫處理序會先檢查共用緩衝區。 如果必要資料存在,則會快速加以擷取並略過更耗時的磁碟讀取。 共用緩衝區可作為資料庫進程與磁碟之間的媒介,並有效地減少所需的 I/O 作業數目。
Azure 特定注意事項
當您佈建適用於 PostgreSQL 的 Azure 資料庫伺服器彈性伺服器的執行個體時,會根據您為其計算選取的產品名稱,計算 shared_buffers
伺服器參數的預設值。 對於支援彈性伺服器的計算,任何後續的產品選擇變更,都不會影響該實例之伺服器參數的預設值 shared_buffers
。
每次變更指派給實例的產品時,您也應該根據下列公式中的值來調整參數的值 shared_buffers
。
對於記憶體最多 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 16384
。
對於超過 2 GiB 的虛擬機,用來計算 值的 shared_buffers
公式為 memoryGib * 32768
。
根據上一個公式,下表列出此伺服器參數將設定的值,視布建的記憶體數量而定:
記憶體大小 | shared_buffers (英文) |
---|---|
2 GiB | 32768 |
4 GiB | 131072 |
8 GiB | 262144 |
16 GiB | 524288 |
32 GiB | 1048576 |
48 GiB | 1572864 |
64 GiB | 2097152 |
80 GiB | 2621440 |
128 GiB | 4194304 |
160 GiB | 5242880 |
192 GiB | 6291456 |
256 GiB | 8388608 |
384 GiB | 12582912 |
432 GiB | 14155776 |
672 GiB | 22020096 |
temp_buffers
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 設定每個資料庫工作階段所使用的暫存緩衝區數目上限。 |
資料類型 | 整數 |
預設值 | 1024 |
允許的值 | 100-1073741823 |
參數類型 | dynamic |
文件集 | temp_buffers (英文) |
work_mem
屬性 | 值 |
---|---|
類別 | 資源使用狀況/記憶體 |
描述 | 在寫入暫存磁碟檔案之前,設定內部排序作業和雜湊表所使用的記憶體數量。 |
資料類型 | 整數 |
預設值 | 4096 |
允許的值 | 4096-2097151 |
參數類型 | dynamic |
文件集 | work_mem |
描述
PostgreSQL 中的 work_mem
參數會控制針對每個資料庫工作階段私人記憶體區域中特定內部作業所配置的記憶體數量。 這些作業的其中一個範例是排序和雜湊。
不同於位於共用記憶體區域中的共用緩衝區,work_mem
會配置在每個工作階段或每個查詢私人記憶體空間中。 透過設定適當的 work_mem
大小,您可以大幅提升這些作業的效率,並減少將暫存資料寫入磁碟的需求。
重點
- Private connection memory (私人連線記憶體):
work_mem
是每個資料庫工作階段使用之私人記憶體的一部分。 此記憶體與shared_buffers
使用的共用記憶體區域不同。 - Query-specific usage (查詢特定使用方式):並非所有工作階段或查詢都會使用
work_mem
。SELECT 1
之類的簡單查詢不太可能會需要work_mem
。 不過,牽涉到排序或雜湊等作業的複雜查詢可能會取用一或多個work_mem
區塊。 - Parallel operations (平行作業):對於跨越多個平行後端的查詢,每個後端都可能會使用一或多個
work_mem
區塊。
監視和調整 work_mem
請務必持續監視系統的效能,並視需要調整 work_mem
,特別是如果與排序或雜湊作業相關的查詢執行時間緩慢。 以下是使用 Azure 入口網站中提供的工具來監視效能的方法:
- 查詢效能深入解析:檢查 [Top queries by temporary files] \(依暫存檔案排序的前幾名查詢\) 索引標籤來識別產生暫存檔案的查詢。 這種情況表示可能需要增加
work_mem
。 - 疑難排解指南:使用疑難排解指南中的 [高暫存檔案] 索引標籤來識別有問題的查詢。
細微調整
當您管理 work_mem
參數時,採用細微調整的方法,而不是設定全域值通常會更有效率。 此方法可確保您可以根據處理序和使用者的特定需求,明智地配置記憶體。 其也可將發生記憶體不足問題的風險降到最低。 以下是您可以如何進行:
使用者層級:如果特定使用者主要涉及需要大量記憶體的彙總或報告工作,請考慮針對該使用者自訂
work_mem
值。 使用ALTER ROLE
命令來增強該使用者作業的效能。函式/程序層次:如果特定函式或程序會產生大量暫存檔案,增加該特定函式或程序層次的
work_mem
值可能會有幫助。 使用ALTER FUNCTION
或ALTER PROCEDURE
命令來特別配置更多記憶體給這些作業。資料庫層級:如果只有特定資料庫會產生大量暫存檔案,請改變資料庫層級的
work_mem
。全域層級:如果您的系統分析顯示大多數查詢都會產生小型的暫存檔案,而只有少數查詢會建立大型檔案,則以全域方式增加
work_mem
值可能是較為精明的做法。 此動作可促成在記憶體中處理大部分查詢,因此您可以避免磁碟型作業並提高效率。 不過,請務必小心並監視伺服器上的記憶體使用率,以確保其可以處理增加的work_mem
值。
判斷排序作業的最小 work_mem 值
若要尋找特定查詢的最小 work_mem
值,特別是在排序處理序期間會產生暫存磁碟檔案的查詢,請先考慮查詢執行期間所產生的暫存檔案大小。 例如,如果某個查詢會產生 20 MB 的暫存檔案:
- 使用 psql 或您慣用的 PostgreSQL 用戶端連線到您的資料庫。
- 將初始
work_mem
值設定為略高於 20 MB,以將在記憶體內處理時的其他標頭納入考量。 使用如下的命令:SET work_mem TO '25MB'
。 - 在相同工作階段有問題的查詢上執行
EXPLAIN ANALYZE
。 - 檢閱
"Sort Method: quicksort Memory: xkB"
的輸出。 如果其指出"external merge Disk: xkB"
,請以累加方式增加work_mem
值,然後重新測試,直到出現"quicksort Memory"
為止。"quicksort Memory"
的外觀表示查詢現在正在記憶體內運作。 - 透過此方法判斷值之後,您便能以全域或更細微的層級 (如上所述) 套用該值,以符合您的作業需求。