Skip to main content
Enterprise applications
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

設定

貢獻者

有幾種 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 不會從其表格中實際移除、直到執行真空為止。因此、您必須定期執行吸氣、尤其是在經常更新的表格上。接著必須回收它所佔用的空間、以便新列重複使用、以避免磁碟空間中斷。不過、它不會將空間傳回作業系統。

頁面內的可用空間不會分散。真空會重新寫入整個區塊、有效地將剩餘的資料列封裝起來、並在頁面中留下一個連續的可用空間區塊。

相反地、使用「完全真空」技術、可以撰寫完全新版的表格檔案、而不會有任何空間。此動作可將表格大小減至最小、但可能需要很長時間。在作業完成之前、它也需要額外的磁碟空間來容納表格的新複本。例行真空的目標是避免完全真空。此程序不僅能將資料表保持在最小大小、還能維持磁碟空間的穩定狀態使用量。