設定
有幾種 PostgreSQL 調校組態可以改善效能。
最常用的參數如下:
-
max_connections = <num>
:一次擁有的最大資料庫連線數。使用此參數可限制磁碟交換並終止效能。根據應用程式需求、您也可以針對連線集區設定調整此參數。 -
shared_buffers = <num>
:提高資料庫伺服器效能的最簡單方法。對於大多數現代硬體而言、預設值為低。在部署期間、系統上的可用 RAM 約為 25% 。此參數設定會因其與特定資料庫執行個體的運作方式而異;您可能必須根據試用和錯誤來增加和減少值。不過、將其設為高可能會降低效能。 -
effective_cache_size = <num>
:此值告訴 PostgreSQL 的最佳化程式 PostgreSQL 有多少記憶體可用於快取資料、並有助於判斷是否使用索引。較大的值會增加使用索引的可能性。此參數應設為分配給的記憶體容量shared_buffers
加上可用的作業系統快取容量。此值通常超過系統總記憶體的 50% 。 -
work_mem = <num>
:此參數控制用於排序作業和雜湊表的記憶體容量。如果您在應用程式中進行大量排序、可能需要增加記憶體容量、但請謹慎。它不是系統範圍的參數、而是每次操作的參數。如果複雜查詢中有多個排序作業、則會使用多個 work_mem 記憶體單元、而多個後端也可能同時執行此作業。如果值太大、此查詢通常會引導您的資料庫伺服器進行切換。此選項先前在舊版 PostgreSQL 中稱為 sort_mem 。 -
fsync = <boolean> (on or off)
:此參數確定在提交事務之前是否應使用 fsync ()將所有 Wal 頁面同步到磁盤。關閉它有時會改善寫入效能、並將其開啟、以提高系統當機時避免毀損的風險。 -
checkpoint_timeout
:檢查點處理程序會將已提交的資料清除至磁碟。這涉及磁碟上的大量讀寫作業。此值以秒為單位設定、較低的值可減少損毀恢復時間、而增加的值則可減少檢查點呼叫、進而降低系統資源的負載。根據應用程式的關鍵程度、使用量、資料庫可用度、設定 checkpoint 逾時的值。 -
commit_delay = <num>
和commit_siblings = <num>
:這些選項可同時用於撰寫多筆同時提交的交易、以協助改善效能。如果交易提交時有多個 command_sibliblings 物件處於作用中狀態、伺服器會等待 command_delay 微秒、嘗試一次提交多個交易。 -
max_worker_processes / max_parallel_workers
:配置流程的最佳工作人員數量。max_paralle_founds 對應可用的 CPU 數量。視應用程式設計而定、查詢可能需要較少的工作人員來執行平行作業。最好保持兩個參數的值相同、但在測試後調整值。 -
random_page_cost = <num>
:此值控制 PostgreSQL 檢視非連續磁碟讀取的方式。較高的值表示 PostgreSQL 較可能使用連續掃描、而非索引掃描、表示伺服器有快速磁碟。請在評估其他選項(例如計畫型最佳化、吸塵、索引以變更查詢或架構)之後、修改此設定。 -
effective_io_concurrency = <num>
:此參數設置 PostgreSQL 嘗試同時執行的並行磁盤 I/O 操作數。提高此值會增加任何個別 PostgreSQL 工作階段嘗試平行啟動的 I/O 作業數。允許範圍為 1 到 1 、 000 、或為零、以停用非同步 I/O 要求的發出。目前、此設定只會影響點陣圖堆疊掃描。固態硬碟( SSD )和其他記憶體型儲存設備( NVMe )通常可以處理許多並行要求、因此最佳價值可能在數百種環境中。
如需 PostgreSQL 組態參數的完整清單、請參閱 PostgreSQL 文件。
吐司
Toast 代表「超大型屬性儲存技術」。PostgreSQL 使用固定的頁面大小(通常為 8KB )、不允許 Tuple 跨越多個頁面。因此、無法直接儲存大欄位值。當您嘗試儲存超過此大小的資料列時、 Toast 會將大型資料欄的資料分成較小的「片段」、並將其儲存在 Toast 資料表中。
只有在將結果集傳送至用戶端時、才會拔出(如果完全選取)已烘烤的屬性大值。表格本身比沒有任何離線儲存設備( Toast )時更小、可容納更多資料列到共用緩衝區快取中。
真空
在正常的 PostgreSQL 作業中、因為更新而刪除或過時的 Tuple 不會從其表格中實際移除、直到執行真空為止。因此、您必須定期執行吸氣、尤其是在經常更新的表格上。接著必須回收它所佔用的空間、以便新列重複使用、以避免磁碟空間中斷。不過、它不會將空間傳回作業系統。
頁面內的可用空間不會分散。真空會重新寫入整個區塊、有效地將剩餘的資料列封裝起來、並在頁面中留下一個連續的可用空間區塊。
相反地、使用「完全真空」技術、可以撰寫完全新版的表格檔案、而不會有任何空間。此動作可將表格大小減至最小、但可能需要很長時間。在作業完成之前、它也需要額外的磁碟空間來容納表格的新複本。例行真空的目標是避免完全真空。此程序不僅能將資料表保持在最小大小、還能維持磁碟空間的穩定狀態使用量。