更改您的Databases for PostgreSQL配置

IBM Cloud® Databases for PostgreSQL 可讓您變更部分 PostgreSQL 配置設定,以便您可以根據使用案例來調整 PostgreSQL 資料庫。 若要對資料庫配置進行永久變更,請使用 Cloud Databases CLI 外掛程式API,將變更寫入部署的配置檔。

配置定義在綱目中。 若要進行變更,請將具有設定及其新值的 JSON 物件傳送至 API 或 CLI。 例如,若要將 max_connections 設定設為 150,您可以提供:

{"configuration":{"max_connections":150}}

CLI 或 API。

有關更多信息,請參閱 管理PostgreSQL連接

搭配使用 CLI 與 Databases for PostgreSQL

您可以使用 deployment-configuration-schema 指令來檢查部署的預設配置。 即使您已變更設定,deployment-configuration-schema 該指令的輸出仍僅顯示預設配置。 若要檢視資料庫專屬的變更,請直接查詢該資料庫。

ibmcloud cdb deployment-configuration-schema <INSTANCE_NAME_OR_CRN>

同樣地,請使用 deployment-configuration 指令變更您的配置。

ibmcloud cdb deployment-configuration <INSTANCE_NAME_OR_CRN> [@JSON_FILE | JSON_STRING]

指令會讀取您要從 JSON 物件或檔案進行的變更。 如需相關資訊,請參閱 參考頁面

搭配使用 API 與 IBM Cloud® Databases for PostgreSQL

兩個部署配置端點容許檢視配置綱目及變更配置。 若要檢視配置綱目,請將 GET 要求傳送至 /deployments/{id}/configuration/schema

若要變更配置,請將您想要在 PATCH 要求的要求內文中變更為 JSON 物件的設定傳送至 /deployments/{id}/configuration

有關詳細信息,請參閱 API 參考

可用的IBM Cloud® Databases for PostgreSQL配置設定

本節提供有關可用 IBM Cloud Databases for PostgreSQL 配置設定的相關資訊。 若要建議未列於此處的產品增強功能設定, 透過 IBM 提交您的構想。 若您願意,可將檢視範圍限定於 IBM Cloud Ideas 中的 IBM Cloud 增強功能。

IBM Cloud® Databases for PostgreSQL時區設定

IBM Cloud® Databases for PostgreSQL 部署的時區一律為 UTC (世界標準時間)。 用戶端無法配置此設定。

IBM Cloud® Databases for PostgreSQL記憶體設置

shared_buffers

  • 預設值- 32000 (8 KiB 緩衝區數目,或大約 262 MB)
  • 建議上限值: 可用 RAM 的 25%
  • 要重新啟動資料庫嗎? -

shared_buffers 的建議記憶體配置是部署 RAM 的 25%。 任何更高設定 shared_buffers 可能會導致記憶體問題導致資料庫損毀,而且可能會降低資料庫的效能,因為 OS 最有可能已緩衝資料。 將 shared_buffers 設為等於、接近等於或高於已配置的記憶體數量,會阻止資料庫啟動。 此設定指定了 8 個 KiB 共享記憶體緩衝區的數量。

例如,1 GB shared_buffers 空間是 1048576 KiB,而 (1048576 KiB / 8 KiB) 是 131072 緩衝區。 您的部署可以使用額外 RAM 來進行快取及效能,即使不將它配置給 shared_buffers 也一樣。 您不需要將資料庫配置成使用所有已配置的 RAM,即可讓部署使用它。

對於現有工作負載或調整 RAM 時,增加記憶體至共用緩衝區可能不是最佳的行動方針。 相反地,請追蹤您的表格及索引快取命中率。 如果快取命中率是在高 90 年代,請讓 OS 在其他區域中使用記憶體,而不是增加 shared_buffers

您可以使用這些查詢作為 admin 使用者,或任何具有 pg_monitor 角色的使用者,來追蹤快取命中率:

Tables

SELECT
  sum(heap_blks_read) as heap_read,
  sum(heap_blks_hit)  as heap_hit,
  sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as table_hit_ratio
FROM
  pg_statio_user_tables;

索引

SELECT
  sum(idx_blks_read) as idx_read,
  sum(idx_blks_hit)  as idx_hit,
  (sum(idx_blks_hit) - sum(idx_blks_read)) / sum(idx_blks_hit) as index_hit_ratio
FROM
pg_statio_user_indexes;

shared_buffermax_connection 配置值相關的 work_mem 值會自動調整。

IBM Cloud® Databases for PostgreSQL常規設定

max_connections

max_locks_per_transaction

  • 預設值-64
  • 選項-最小值為 10
  • 要重新啟動資料庫嗎? -

max_prepared_transactions

  • 預設 - 50
  • 要重新啟動資料庫嗎? -
  • 註記 - 將值設定為 0 會停用 預備交易,除非您需要使用它們,否則建議使用此值。

synchronous_commit

  • 預設 - local
  • 重新啟動資料庫-否
  • 選項- localonoff
  • 附註-將 synchronous_commit 設定為關閉,會增加交易確定率,但代價是如果發生未清除關閉,則會遺失已確定的交易。 如果 synchronous_commit 設為 on,則只有在寫入主導器及至少一個抄本時,才會確定交易。 因此,on 設定僅適用於已水平調整為至少三個成員的單位。 執行此變更之前,請參閱 高可用性

effective_io_concurrency

  • 預設 - 12
  • 重新啟動資料庫-否
  • 附註-建議將此設定保留為預設值。 只有在您側寫 SQL 查詢並觀察到無效的點陣圖資料堆掃描時,才會增加它。 因為 IOPS 關聯於磁碟大小,所以也不建議在預設或較小的磁碟上增加此設定。

deadlock_timeout

  • 預設 - 10000
  • 重新啟動資料庫-否
  • 選項-最小值為 100
  • 附註-在檢查死鎖之前要等待的毫秒數,以及記載鎖定等待的持續時間。 透過 記載整合提供的日誌。 將此數字設得太低會對效能造成負面影響。

log_connections

  • 預設 - off
  • 重新啟動資料庫-否
  • 選項- onoff 的值
  • Notes-將此值設為 on 會使日誌詳細。 它也會在每 60 秒擷取度量時顯示監視工具的連線。 當此值設為 on 時,建議在連線 URI 中設定 application_name,以在日誌中保留概觀,因為顯示的 IP 位址是 Kubernetes 內部 IP。 如需調整連線 URI 的詳細資料,請參閱 PostgreSQL 文件。 設為 off 時,行為不會變更為預設值,且不會記載任何連線。 日誌可透過 記載整合 取得。 如果設定 on,則日誌會顯示與此範例類似的行,其中應用程式名稱設為 test-app:
2021-03-01 10:27:56 UTC [[unknown]] [00000] [708]: [2-1] user=admin,db=ibmclouddb,client=127.0.0.1 LOG:  connection authorized: user=admin database=ibmclouddb application_name=test-app SSL enabled (protocol=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384, bits=256, compression=off)

log_disconnections

  • 預設 - off
  • 重新啟動資料庫-否
  • 選項- onoff 的值
  • Notes-將此值設為 on 會使日誌詳細。 它也會顯示監視工具的斷線,因為它每 60 秒會擷取一次度量值。 當此值設為 on 時,建議在連線 URI 中設定 application_name,以在日誌中保留概觀,因為顯示的 IP 位址是 Kubernetes 內部 IP。 如需調整連線 URI 的詳細資料,請參閱 PostgreSQL 文件。 設為 off 時,行為不會變更為預設值,且不會記載中斷連線。 日誌可透過 記載整合 取得。 如果設定 on,日誌會顯示類似下列範例的行,其中應用程式名稱設為 test-app:
2021-03-01 10:27:56 UTC [test-app] [00000] [708]: [3-1] user=admin,db=ibmclouddb,client=127.0.0.1 LOG:  disconnection: session time: 0:00:00.793 user=admin database=ibmclouddb host=127.0.0.1 port=50638

log_min_duration_statement

  • 預設 - 100
  • 重新啟動資料庫-否
  • 選項-最小值為 100
  • Notes-記載所花費的時間超過指定毫秒數的陳述式。

tcp_keepalives_idle

  • 預設 - 111
  • 重新啟動資料庫-否

tcp_keepalives_interval

  • 預設 - 15
  • 重新啟動資料庫-否

tcp_keepalives_count

  • 預設 - 6
  • 重新啟動資料庫-否

IBM Cloud® Databases for PostgreSQL WAL 設定

archive_timeout

  • 預設 - 1800
  • 重新啟動資料庫-否
  • 選項-最小值 300
  • 附註-強制切換至下一個 WAL 檔案之前要等待的秒數。 如果已過了秒數,且有資料庫活動,則伺服器會切換至新的區段。 有效地限制資料可以保持未保存的時間量。

接下來的三個設定 wal_levelmax_replication_slotsmax_wal_senders 可啟用 wal2json 邏輯解碼外掛程式。 如果您不是使用此外掛程式,請將這些設定保留為預設值。

wal_level

  • 預設 - replica
  • 重新啟動資料庫- YES
  • 附註-控制項 WAL 層次。 容許值為 replicalogical。 設定為 logical 以使用邏輯解碼。 如果不使用邏輯解碼,使用 logical 會增加 WAL 大小,這有幾個缺點並且沒有真正的優點。

max_replication_slots

  • 預設 - 10
  • 重新啟動資料庫- YES
  • 附註-同步定義的抄寫插槽數目上限。 預設及最小插槽數目是 10。 基於高可用性 (HA) 目的,您的部署會保留 20 個插槽供內部使用。 若要使用空位,您需要將值設為高於 20,且每個消費者有一個空位。 在每個預期消費者的下限之上新增一個額外空位。 使用 wal2json 且不增加 max_replication_slots 可能會影響 HA 及唯讀抄本。 如果您不是使用 wal2json,請將此設定保留為預設值。

max_wal_senders

  • 預設 - 12
  • 重新啟動資料庫- YES
  • Notes-同步執行 WAL 傳送端處理程序的數目上限。 預設值及最小值為 12。 每個消費者需要一個 wal_sender。 基於高可用性 (HA) 目的,您的部署會保留 20 個插槽供內部使用。 您需要將值設定為高於 20,並且建議在每個預期消費者的最小值之外再新增一個 wal_sender。 使用 wal2json 且不增加 max_wal_senders 可能會影響 HA 及唯讀抄本。 如果您不是使用 wal2json,請將此設定保留為預設值。