使用 Aurora Postgre 的本機寫入轉送SQL - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Aurora Postgre 的本機寫入轉送SQL

您可以使用下列各節,檢查資料庫叢集是否已啟用本機寫入轉送、檢視相容性考量,以及查看可設定的參數和身分驗證設定。此資訊可讓您取得詳細資訊,以有效利用 Aurora PostgreSQL 中的本機寫入轉送功能。

注意

當叢集中使用本機寫入轉送的寫入器執行個體重新啟動時,使用本機寫入轉送的讀取器執行個體上任何作用中的轉送交易和查詢都會自動關閉。當寫入器執行個體再次可用之後,您可以重試這些交易。

檢查資料庫叢集是否已啟用本機寫入轉送

若要判斷您可以在資料庫叢集中使用本機寫入轉送,請確認叢集的屬性LocalWriteForwardingStatus設定為 enabled

在叢集詳細資訊頁面的 AWS Management Console組態索引標籤中,您會看到已啟用本機僅供讀取複本寫入轉送的狀態。

若要查看所有叢集的本機寫入轉送設定狀態,請執行下列 AWS CLI 命令。

aws rds describe-db-clusters \ --query '*[].{DBClusterIdentifier:DBClusterIdentifier,LocalWriteForwardingStatus:LocalWriteForwardingStatus}' [ { "LocalWriteForwardingStatus": "enabled", "DBClusterIdentifier": "write-forwarding-test-cluster-1" }, { "LocalWriteForwardingStatus": "disabled", "DBClusterIdentifier": "write-forwarding-test-cluster-2" }, { "LocalWriteForwardingStatus": "requested", "DBClusterIdentifier": "test-global-cluster-2" }, { "LocalWriteForwardingStatus": "null", "DBClusterIdentifier": "aurora-postgresql-v2-cluster" } ]

資料庫叢集可以具有以下值 LocalWriteForwardingStatus

  • disabled – 本機寫入轉送已停用。

  • disabling – 本機寫入轉送正在進行停用。

  • enabled – 本機寫入轉送已啟用。

  • enabling – 本機寫入轉送正在啟用中。

  • null – 本機寫入轉送不適用於此資料庫叢集。

  • requested – 已請求本機寫入轉送,但尚未啟用。

Aurora Postgre 中本機寫入轉送的限制SQL

當您在 Aurora PostgreSQL 中使用某些陳述式搭配寫入轉送時,不允許或可能產生過時的結果。此外,不支援使用者定義的函數和使用者定義的程序。因此,資料庫叢集EnableLocalWriteForwarding的設定預設為關閉。在開啟此功能之前,請檢查以確定您的應用程式程式碼不受上述任何限制的影響。

您可以使用以下類型的SQL陳述式搭配寫入轉送:

  • 資料處理語言 (DML) 陳述式,例如 INSERTDELETEUPDATE

  • SELECT FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } 陳述式

  • PREPAREEXECUTE 陳述式

  • 包含此清單中陳述式的 EXPLAIN 陳述式

  • DML 陳述式可能包含多個部分,例如INSERT ... SELECT陳述式或DELETE ... WHERE陳述式。在這種情況下,系統會將整個陳述式轉送到寫入器資料庫執行個體並在該處執行陳述式。

寫入轉送不支援下列類型的SQL陳述式:

注意

您可以在應用程式中隱含地使用這些陳述式,或由 PostgreSQL 通訊協定推斷。例如,PL/SQL 例外狀況處理可能會導致使用 SAVEPOINT,這不是支援的陳述式。

  • 資料定義語言 (DDL) 陳述式

  • ANALYZE

  • CLUSTER

  • COPY

  • 游標 – 不支援游標,因此請務必先關閉它們,再使用本機寫入轉送。

  • 使用者定義的函數和使用者定義的程序。

  • GRANT|REVOKE|REASSIGN OWNED|SECURITY LABEL

  • LOCK

  • SAVEPOINT

  • SELECT INTO

  • SET CONSTRAINTS

  • TRUNCATE

  • VACUUM

  • LISTEN / NOTIFY

  • 兩階段遞交命令:PREPARE TRANSACTIONCOMMIT PREPAREDROLLBACK PREPARED

  • 序列更新:nextval()setval()

寫入轉送的預設參數設定

Aurora 叢集參數群組包含本機寫入轉送功能的設定。因為這些是叢集參數,所以每個叢集中的所有資料庫執行個體都有這些變數的相同值。下表列出了有關這些參數的詳細資訊,並在表格後面附有使用注意事項。

參數 範圍 類型 預設值 有效值
apg_write_forward.connect_timeout Session (工作階段) 30 0–2147483647
apg_write_forward.consistency_mode 工作階段 (Session) enum Session (工作階段) SESSION, EVENTUAL, GLOBAL, 和 OFF
apg_write_forward.idle_in_transaction_session_timeout Session (工作階段) 毫秒 86400000 0–2147483647
apg_write_forward.idle_session_timeout Session (工作階段) 毫秒 300000 0–2147483647
apg_write_forward.max_forwarding_connections_percent 全球服務 int 25 1–100

apg_write_forward.max_forwarding_connections_percent 參數是可用於處理從讀取器轉送之查詢的資料庫連線上限。它以寫入器資料庫執行個體max_connections設定的百分比表示。例如,如果 max_connections800,且 apg_write_forward.max_forwarding_connections_percent10,則寫入器允許最多 80 個同時轉送的工作階段。這些連線來自 max_connections 設定所管理的相同連線集區。此設定僅適用於啟用本機寫入轉送的叢集時寫入器資料庫執行個體。

使用下列設定來控制本機寫入轉送請求:

  • apg_write_forward.consistency_mode – 工作階段層級參數,可控制僅供讀取複本上的讀取一致性程度。有效值為 SESSIONEVENTUALGLOBALOFF。根據預設,系統會將此值設為 SESSION。將 值設定為 會在工作階段中OFF停用本機寫入轉送。若要進一步了解一致性層級,請參閱Aurora Postgre 中本機寫入轉送的一致性和隔離SQL。此參數僅適用於啟用本機寫入轉送的讀取器執行個體。

  • apg_write_forward.connect_timeout – 僅供讀取複本在建立寫入器資料庫執行個體的連線時等待的秒數上限,然後再放棄。值 0 表示無限期等待。

  • apg_write_forward.idle_in_transaction_session_timeout – 寫入器資料庫執行個體等待從具有開啟交易的僅供讀取複本轉送之連線上的活動,再將其關閉的毫秒數。如果在此期間之後工作階段在交易中仍處於閒置狀態,則 Aurora 會終止工作階段。值為 0 會停用逾時。

  • apg_write_forward.idle_session_timeout – 寫入器資料庫執行個體在關閉之前,等待從僅供讀取複本轉送之連線上的活動毫秒數。如果工作階段在此期間之後仍處於閒置狀態,則 Aurora 會終止工作階段。值為 0 會停用逾時。

rdswriteforwarduser

rdswriteforwarduser 是一個使用者,我們將用來建立僅供讀取複本與寫入器資料庫執行個體之間的連線。

注意

rdswriteforwarduser 透過 PUBLIC角色將其CONNECT權限繼承至客戶資料庫。如果PUBLIC角色的權限遭到撤銷,您將需要將寫入轉送至資料庫GRANTCONNECT的權限。