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

具有 NFS 檔案系統的 PostgreSQL 資料庫

貢獻者

PostgreSQL 資料庫可以裝載在 NFSv3 或 NFSv4 檔案系統上。最佳選項取決於資料庫以外的因素。

例如、在某些叢集式環境中、 NFSv4 鎖定行為可能較為理想。(請參閱 "請按這裡" 如需其他詳細資料)

否則、資料庫功能應接近相同、包括效能。唯一的要求是使用 hard 掛載選項。這是為了確保軟性逾時不會產生無法恢復的 IO 錯誤。

如果選擇 NFSv4 作為傳輸協定、 NetApp 建議使用 NFSv4.1 。NFSv4.1 中的 NFSv4 傳輸協定有一些功能性增強功能、可改善 NFSv4.0 的恢復能力。

針對一般資料庫工作負載、請使用下列掛載選項:

rw,hard,nointr,bg,vers=[3|4],proto=tcp,rsize=65536,wsize=65536

如果需要大量連續 IO 、則可依照下節所述增加 NFS 傳輸大小。

NFS 傳輸大小

根據預設、 ONTAP 將 NFS I/O 大小限制為 64K 。

大多數應用程式和資料庫的隨機 I/O 使用的區塊大小要小得多、遠低於 64K 的最大值。大型區塊 I/O 通常是平行處理的、因此 64K 的最大值也不是取得最大頻寬的限制。

有些工作負載的上限為 64K 、因此會造成限制。特別是、如果資料庫執行的 I/O 數量較少、但容量較大、則備份或還原作業或資料庫完整表格掃描等單執行緒作業、會更快、更有效率地執行。ONTAP 的最佳 I/O 處理大小為 256k 。

指定 ONTAP SVM 的最大傳輸大小可變更如下:

Cluster01::> set advanced
Warning: These advanced commands are potentially dangerous; use them only when directed to do so by NetApp personnel.
Do you want to continue? {y|n}: y
Cluster01::*> nfs server modify -vserver vserver1 -tcp-max-xfer-size 262144
Cluster01::*>
注意

切勿將 ONTAP 上允許的傳輸大小上限降至低於目前掛載之 NFS 檔案系統的 rsize/wsize 值。這可能會在某些作業系統中造成當機或甚至資料毀損。例如、如果 NFS 用戶端目前設定為 rsize/wsize 65536 、則 ONTAP 最大傳輸大小可在 65536 到 1048576 之間調整、因為用戶端本身受到限制、因此沒有任何影響。將傳輸大小上限降至 65536 以下可能會損害可用度或資料。

在 ONTAP 層級增加傳輸大小後、將會使用下列掛載選項:

rw,hard,nointr,bg,vers=[3|4],proto=tcp,rsize=262144,wsize=262144

NFSv3 TCP 插槽表

如果 NFSv3 與 Linux 搭配使用、則正確設定 TCP 插槽表至關重要。

TCP 插槽表是與主機匯流排介面卡( HBA )佇列深度相當的 NFSv3 。這些表格可控制任何時間都可以處理的NFS作業數量。預設值通常為16、這對於最佳效能而言太低。相反的問題發生在較新的Linux核心上、這會自動將TCP插槽表格限制增加到要求使NFS伺服器飽和的層級。

為了達到最佳效能並避免效能問題、請調整控制 TCP 插槽表的核心參數。

執行 sysctl -a | grep tcp.*.slot_table 並觀察下列參數:

# sysctl -a | grep tcp.*.slot_table
sunrpc.tcp_max_slot_table_entries = 128
sunrpc.tcp_slot_table_entries = 128

所有 Linux 系統都應該包括在內 sunrpc.tcp_slot_table_entries`但只有部分包含在內 `sunrpc.tcp_max_slot_table_entries。兩者都應設為 128 。

注意

若未設定這些參數、可能會對效能造成重大影響。在某些情況下、效能會受到限制、因為 Linux 作業系統沒有發出足夠的 I/O在其他情況下、隨著 Linux 作業系統嘗試發出的 I/O 數量超過可服務的數量、 I/O 延遲也會增加。