管理 RDS Proxy - Amazon Aurora

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

管理 RDS Proxy

本節提供如何管理 RDS 代理伺服器作業和組態的相關資訊。這些程序可協助應用程式以最有效率的方式使用資料庫連線,並達到最大程度的連線重複使用。您越能利用連線重複使用,就越能節省更多 CPU 和記憶體負荷。這樣可以縮短應用程式的延遲,並讓資料庫投入更多資源來處理應用程式要求。

修改 RDS Proxy

您可以在建立代理之後變更與該代理相關聯的特定設定。您可以修改代理本身、它的關聯目標群組,或兩者都修改。每個代理都有一個關聯的目標群組。

重要

Client authentication type (用戶端身分驗證類型) 和 IAM authentication (IAM 身分驗證) 欄位中的值適用於與此代理相關聯的所有 Secrets Manager 機密。若要為每個密碼指定不同的值,請改用 AWS CLI 或 API 來修改 Proxy。

若要修改代理的設定
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

  2. 在導覽窗格中,選擇 Proxies (代理)。

  3. 在代理清單中,選擇您要修改其設定的代理伺服器,或移至其詳細資訊頁面。

  4. Actions (動作) 中,選擇 Modify (修改)。

  5. 輸入或選擇要修改的屬性。您可以修改下列選項:

    • Proxy identifier (Proxy 識別碼) – 輸入新的識別碼,以便將 Proxy 重新命名。

    • Idle client connection timeout (閒置用戶端連線逾時) – 輸入閒置用戶端連線逾時的期間。

    • IAM role (IAM 角色) – 變更從 Secrets Manager 中擷取秘密所使用的 IAM 角色。

    • Secrets Manager secrets (Secrets Manager 秘密) – 新增或移除 Secrets Manager 秘密。這些秘密對應於資料庫使用者名稱和密碼。

    • Client authentication type (用戶端身分驗證類型) – (僅限 PostgreSQL) 變更用戶端連線至代理時的身分驗證類型。

    • IAM authentication (IAM 身分驗證) – 要求或不允許連線至 Proxy 時進行 IAM 身分驗證。

    • Require Transport Layer Security – 開啟或關閉 Transport Layer Security (TLS) 的需求。

    • VPC security group (VPC 安全群組) – 新增或移除 Proxy 要使用的 VPC 安全群組。

    • Enable enhanced logging (啟用增強型日誌) – 啟用或停用增強型日誌。

  6. 選擇 Modify (修改)。

如果您找不到您要變更的列出設定,請使用下列程序更新代理的目標群組。與代理相關聯的目標群組可控制與實體資料庫連線相關的設定。每個代理都有一個名為 default 的關聯目標群組,這些群組將與代理一起自動建立。

您只能從代理詳細資訊頁面修改目標群組,而不能從 代理頁面上的清單修改。

若要修改代理目標群組的設定
  1. Proxies (代理) 頁面上,前往代理的詳細資訊頁面。

  2. 目標群組中選擇 default 連結。目前,所有的代理都有一個名為 default 的目標群組。

  3. 預設目標群組的詳細資訊頁面上,選擇 Modify (修改)

  4. 選擇您可修改之屬性的新設定:

    • 資料庫 – 選擇不同的 Aurora 叢集

    • Connection pool maximum connections (連線集區最大連線數) – 調整 Proxy 可以使用的最大可用連線數的百分比。

    • Session pinning filters (工作階段鎖定篩選條件) – (選用) 選擇工作階段鎖定篩選條件。這樣做會規避用戶端連線之間多工處理資料庫連線的預設安全措施。目前,PostgreSQL 不支援此設定。唯一的選擇是EXCLUDE_VARIABLE_SETS

      啟用此設定可能會導致某個連線的工作階段變數影響其他連線。如果您的查詢取決於目前交易之外設定的工作階段變數值,這樣做可能會造成錯誤或正確性問題。請先確認應用程式可安全地在用戶端連線之間共用資料庫連線,再考慮使用此選項。

      以下模式可視為安全:

      • SET 陳述式,其中有效的工作階段變數值沒有變更,也就是工作階段變數沒有變更。

      • 您會在同一交易中變更工作階段變數值和執行陳述式。

      如需詳細資訊,請參閱 避免鎖定

    • Connection borrow timeout (連線借用逾時) – 調整連線借用逾時間隔。在已為代理使用連線數上限時,則會套用此設定。此設定會決定代理在傳回逾時錯誤之前等待連線變成可用的時間。

    • Initialization query (初始化查詢) – (選用) 新增初始化查詢,或修改目前的查詢。開啟每個新資料庫連線時,您可為要執行的代理指定一或多個 SQL 陳述式。該設定通常與 SET 陳述式搭配使用,確保每個連線都有相同的設定,例如時區和字元集。對於多個陳述式,請使用分號作為分隔符號。您也可以在單一 SET 陳述式中包含多個變數,例如 SET x=1, y=2

    您無法變更某些屬性,例如目標群組識別符和資料庫引擎。

  5. 選擇 Modify target group (修改目標群組)

若要使用修改代理伺服器,請使用指令修改-DB 代理伺服器 AWS CLI、修改-DB 代理-目標群組、取消註冊-DB 代理-目標,以及註冊-DB 代理-目標。

使用 modify-db-proxy 命令,您可以變更屬性,如下所示:

  • 代理使用的 Secrets Manager 秘密組。

  • 是否需要 TLS。

  • 閒置用戶端逾時。

  • 是否記錄來自 SQL 陳述式的額外資訊以供偵錯。

  • 用於擷取 Secrets Manager 秘密的 IAM 角色。

  • 代理使用的安全群組。

下列範例顯示如何將現有的代理重新命名。

aws rds modify-db-proxy --db-proxy-name the-proxy --new-db-proxy-name the_new_name

若要修改連線相關設定或重新命名目標群組,請使用 modify-db-proxy-target-group 命令。目前,所有的代理都有一個名為 default 的目標群組。使用此目標群組時,您指定代理的名稱,並將目標群組的名稱指定為 default

下列範例顯示如何先檢查代理的 MaxIdleConnectionsPercent 設定,然後使用目標群組將其變更。

aws rds describe-db-proxy-target-groups --db-proxy-name the-proxy { "TargetGroups": [ { "Status": "available", "UpdatedDate": "2019-11-30T16:49:30.342Z", "ConnectionPoolConfig": { "MaxIdleConnectionsPercent": 50, "ConnectionBorrowTimeout": 120, "MaxConnectionsPercent": 100, "SessionPinningFilters": [] }, "TargetGroupName": "default", "CreatedDate": "2019-11-30T16:49:27.940Z", "DBProxyName": "the-proxy", "IsDefault": true } ] } aws rds modify-db-proxy-target-group --db-proxy-name the-proxy --target-group-name default --connection-pool-config ' { "MaxIdleConnectionsPercent": 75 }' { "DBProxyTargetGroup": { "Status": "available", "UpdatedDate": "2019-12-02T04:09:50.420Z", "ConnectionPoolConfig": { "MaxIdleConnectionsPercent": 75, "ConnectionBorrowTimeout": 120, "MaxConnectionsPercent": 100, "SessionPinningFilters": [] }, "TargetGroupName": "default", "CreatedDate": "2019-11-30T16:49:27.940Z", "DBProxyName": "the-proxy", "IsDefault": true } }

使用 deregister-db-proxy-targetsregister-db-proxy-targets 命令,您可以透過其目標群組變更 Proxy 與哪一個 Aurora 資料庫叢集相關聯。目前,每個代理主機都可以連線到一個 Aurora 資料庫 目標群組追蹤體的連線詳細資料,Aurora 叢集中的所有資料庫執行個體。

下列範例將從與名為 cluster-56-2020-02-25-1399 的 Aurora MySQL 叢集關聯的代理開始。此範例顯示如何變更代理,讓它可以連線到名為 provisioned-cluster 的不同叢集。

使用 Aurora 資料庫叢集時,您會指定 --db-cluster-identifier 選項。

下列範例會修改 Aurora MySQL 代理。Aurora PostgreSQL 代理具有連接埠 5432。

aws rds describe-db-proxy-targets --db-proxy-name the-proxy { "Targets": [ { "Endpoint": "instance-9814.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-9814" }, { "Endpoint": "instance-8898.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-8898" }, { "Endpoint": "instance-1018.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-1018" }, { "Type": "TRACKED_CLUSTER", "Port": 0, "RdsResourceId": "cluster-56-2020-02-25-1399" }, { "Endpoint": "instance-4330.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-4330" } ] } aws rds deregister-db-proxy-targets --db-proxy-name the-proxy --db-cluster-identifier cluster-56-2020-02-25-1399 aws rds describe-db-proxy-targets --db-proxy-name the-proxy { "Targets": [] } aws rds register-db-proxy-targets --db-proxy-name the-proxy --db-cluster-identifier provisioned-cluster { "DBProxyTargets": [ { "Type": "TRACKED_CLUSTER", "Port": 0, "RdsResourceId": "provisioned-cluster" }, { "Endpoint": "gkldje.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "gkldje" }, { "Endpoint": "provisioned-1.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "provisioned-1" } ] }

若要修改使用 RDS API 的代理,您可以使用作業 ModifyDBProxy、修改資料庫ProxyTarget群組、取消ProxyTargets註冊資料庫和註冊資料庫作業。ProxyTargets

使用 ModifyDBProxy,您可以變更屬性,如下所示:

  • 代理使用的 Secrets Manager 秘密組。

  • 是否需要 TLS。

  • 閒置用戶端逾時。

  • 是否記錄來自 SQL 陳述式的額外資訊以供偵錯。

  • 用於擷取 Secrets Manager 秘密的 IAM 角色。

  • 代理使用的安全群組。

您可以使用 ModifyDBProxyTargetGroup 修改連線相關設定或重新命名目標群組。目前,所有的代理都有一個名為 default 的目標群組。使用此目標群組時,您指定代理的名稱,並將目標群組的名稱指定為 default

使用DeregisterDBProxyTargetsRegisterDBProxyTargets,您可以透過其目標群組變更代理與哪 Aurora 叢集相關聯。目前,每個 Proxy 都可以連線到一個 Aurora 叢集。目標群組會追蹤Aurora 叢集中資料庫執行個體的連線詳細資訊。

新增新的資料庫使用者

在某些情況下,您可能會將新的資料庫使用者新增至與 Proxy 相關聯的 Aurora 叢集。如果是這樣,請新增或重新規劃 Secrets Manager 秘密來儲存該使用者的登入資料。若要這麼做,選擇以下選項其中之一:

  1. 使用 設定資料庫認證 AWS Secrets Manager 中描述的程序建立新的 Secrets Manager 秘密。

  2. 更新 IAM 角色,以授予 RDS Proxy 存取新 Secrets Manager 私密的權限。若要這麼做,請更新 IAM 角色政策的資源區段。

  3. 修改 RDS Proxy,在 Secrets Manager 密碼下新增新的 Secrets Manager 密碼。

  4. 如果新使用者取代了現有使用者,請為現有使用者更新儲存於代理的 Secrets Manager 秘密中的登入資料。

將新的資料庫使用者新增至 PostgreSQL 資料庫

將新使用者新增至 PostgreSQL 資料庫時,如果您已執行下列命令:

REVOKE CONNECT ON DATABASE postgres FROM PUBLIC;

授予 rdsproxyadmin 使用者 CONNECT 權限,讓使用者可以監控目標資料庫上的連線。

GRANT CONNECT ON DATABASE postgres TO rdsproxyadmin;

您也可以透過在上述命令中將 rdsproxyadmin 變更為資料庫使用者,來允許其他目標資料庫使用者執行運作狀態檢查。

變更資料庫使用者的密碼

在某些情況下,您可能會在與 Proxy 相關聯的 Aurora 叢集中變更資料庫使用者的密碼。如果是這樣,請使用新密碼更新對應的 Secrets Manager 秘密。

用戶端與資料庫連線

從應用程式到 RDS Proxy 的連線稱為用戶端連線。從 Proxy 到資料庫的連線為資料庫連線。使用 RDS Proxy 時,用戶端連線會在 Proxy 終止,而資料庫連線則是在 RDS Proxy 內管理。

應用程式端連線集區可提供減少應用程式與 RDS Proxy 之間週期性連線建立的好處。

實作應用程式端連線集區之前,請考慮下列組態層面:

  • 用戶端連線最長壽命:RDS Proxy 會強制執行用戶端連線的最長壽命為 24 小時。此值不可設定。設定集區的最長連線壽命少於 24 小時,以避免意外的用戶端連線中斷。

  • 用戶端連線閒置逾時:RDS Proxy 會強制執行用戶端連線的閒置時間上限。設定閒置連線逾時值低於 RDS Proxy 用戶端連線閒置逾時設定的集區,以避免意外連線中斷。

在應用程式端連線集區中設定的用戶端連線數目上限不一定限制為 RDS Proxy 的 max_Connec t 設定。

用戶端連線集區會延長用戶端連線壽命。如果您的連線遭遇綁定,則集區用戶端連線可能會降低多工效率。固定但閒置在應用程式端連線集區中的用戶端連線會繼續保留資料庫連線,並防止其他用戶端連線重複使用資料庫連線。檢閱您的 Proxy 記錄,以檢查您的連線是否經歷釘選。

注意

RDS Proxy 會在不再使用資料庫連線 24 小時後的某個時間,關閉資料庫連線。無論閒置連線數上限設定的值為何,Proxy 都會執行此動作。

配置連線設定

若要調整 RDS Proxy 的連線集區,可以修改以下設定:

IdleClient逾時

您可以指定 Proxy 關閉用戶端連線之前的閒置時間長度。預設值為 1,800 秒 (30 分鐘)。

上一個要求完成後若應用程式未在的指定時間內提交新要求,用戶端連線就會被視為閒置。基礎資料庫連線保持開啟狀態,並傳回至連線集區。因此,它可供新的用戶端連線使用。如果您希望 Proxy 主動移除過時的連線,請降低閒置的用戶端連線逾時。如果您的工作負載與 Proxy 建立頻繁的連線,請提高閒置的用戶端連線逾時,以節省建立連線的成本。

RDS 主控台中的 [閒置用戶端連線逾時] 欄位以及和 API 中的IdleClientTimeout設定表示此設定。 AWS CLI 若要了解如何在 RDS 主控台中變更 Idle client connection timeout (閒置用戶端連線逾時) 欄位的值,請參閱 AWS Management Console。若要了解如何變更 IdleClientTimeout 設定的值,請參閱 CLI 命令 modify-db-proxy 或 API 操作 ModifyDBProxy

MaxConnections百分比

您可以限制 RDS Proxy 可以與目標資料庫建立的連線數。需以資料庫的可用最大連線數百分比形式指定限制。此設定由 RDS 主控台中的 [連線集區最大連線數] 欄位以及和 API 中 AWS CLI 的MaxConnectionsPercent設定表示。

MaxConnectionsPercent 值會以目標群組所使用的 Aurora 資料庫叢集max_connections 設定百分比來表示。Proxy 不會事先保留這些連線。此設定可讓 Proxy 在工作負載需要時建立這些連線。

例如,對於 max_connections 設定為 1000 且 MaxConnectionsPercent 設為 95 的已註冊資料庫目標,RDS Proxy 會將 950 個連線設定為同時連線至該資料庫目標的上限。

工作負載達到允許的資料庫連線數目上限的常見副作用,是會增加整體查詢延遲,以及提高 DatabaseConnectionsBorrowLatency 指標。您可以透過比較 DatabaseConnectionsMaxDatabaseConnectionsAllowed 指標,來監控目前使用的資料庫連線和允許的總數。

設定此參數時,請注意下列最佳實務:

  • 為工作負載模式的變更提供足夠的連線預留空間。建議將參數設定至少比您最近監控的最大使用量高出 30%。由於 RDS Proxy 會在多個節點之間重新分配資料庫連線配額,因此內部容量變更可能需要至少 30% 的成長空間才能進行其他連線,以避免增加借用延遲。

  • RDS Proxy 會保留特定數量的連線以進行主動監控,以支援快速容錯移轉、流量路由和內部操作。MaxDatabaseConnectionsAllowed 指標不包括這些保留的連線。它代表可用於服務工作負載的連線數,並且可以低於從 MaxConnectionsPercent 設定衍生的值。

    建議的最小MaxConnectionsPercent值如下:

    • db.t3.small:100

    • db.t3.medium:55

    • db.t3.large:35

    • db.r3.large 或以上:20

    如果多個目標執行個體向 RDS Proxy 註冊,例如具有讀取器節點的 Aurora 叢集,請根據最小註冊的執行個體設定最小值。

若要了解如何在 RDS 主控台中變更 Connection pool maximum connections (連線集區最大連線數) 欄位的值,請參閱 AWS Management Console若要瞭解如何變更MaxConnectionsPercent設定值,請參閱 CLI 命令修改-db-代理目標群組或 API 作業修改資料庫群組。ProxyTarget

重要

如果資料庫叢集屬於已開啟寫入轉送的全域資料庫,請依配置給寫入轉送的配額減少代理的 MaxConnectionsPercent 值。寫入轉送配額是在資料庫叢集參數 aurora_fwd_writer_max_connections_pct 中設定的。如需寫入轉送的資訊,請參閱 在 Amazon Aurora 全域資料庫中使用寫入轉送

如需資料庫連線數限制的詳細資訊,請參閱對 Aurora MySQL 資料庫執行個體的連線數上限對 Aurora PostgreSQL 資料庫執行個體的連線數上限

MaxIdleConnectionsPercent

您可以控制 RDS Proxy 可在連線集區中保留的閒置資料庫連線數。根據預設,當連線上沒有任何活動五分鐘時,RDS Proxy 會將其集區中的資料庫連線視為閒置

MaxIdleConnectionsPercent值以 RDS 資料庫執行個體目標群組的max_connections設定百分比表示。預設值為 MaxConnectionsPercent 的 50%,上限為 MaxConnectionsPercent 的值。例如MaxConnectionsPercent,如果是 80,則預設值MaxIdleConnectionsPercent為 40。

值大時,Proxy 會將高百分比的閒置資料庫連線維持在開啟狀態。值小時,Proxy 就會關閉高百分比的閒置資料庫連線。如果您的工作負載無法預測,請考慮為 MaxIdleConnectionsPercent 設定一個高值。這麼做表示 RDS Proxy 可以因應活動中的突增情況,而無需開啟大量新的資料庫連線。

此設定由 AWS CLI 和 API DBProxyTargetGroup 中的MaxIdleConnectionsPercent設定表示。若要瞭解如何變更MaxIdleConnectionsPercent設定值,請參閱 CLI 命令修改-db-代理目標群組或 API 作業修改資料庫群組。ProxyTarget

如需資料庫連線數限制的詳細資訊,請參閱對 Aurora MySQL 資料庫執行個體的連線數上限對 Aurora PostgreSQL 資料庫執行個體的連線數上限

ConnectionBorrow逾時

您可以選擇 RDS Proxy 在傳回逾時錯誤之前,等待連線集區中的資料庫連線變成可用的時間。預設值為 120 秒。此設定適用於連線數達到最大值,因此連線集區中沒有可用的連線時。當沒有適當的資料庫執行個體可用來處理要求時,例如當容錯移轉作業正在處理中時,它也適用。使用此設定,您可以設定應用程式的最佳等待期間,而不需要變更應用程式程式碼中的查詢逾時。

此設定由 RDS 主控台中的連線借用逾時欄位或 AWS CLI 或 API DBProxyTargetGroup 中的ConnectionBorrowTimeout設定表示。若要了解如何在 RDS 主控台中變更 Connection borrow timeout (連線借用逾時) 欄位的值,請參閱 AWS Management Console若要瞭解如何變更ConnectionBorrowTimeout設定值,請參閱 CLI 命令修改-db-代理目標群組或 API 作業修改資料庫群組。ProxyTarget

避免鎖定

當資料庫請求不依賴先前請求的狀態資訊時,多工會更有效率。在這種情況下,RDS Proxy 可以在每一筆交易結束時重複使用連線。這類狀態資訊的範例包括您可以透過 SETSELECT 陳述式變更的大部分變數和組態參數。根據預設,用戶端連線上的 SQL 交易可以在基礎資料庫連線之間進行多工。

您與代理的連線可能會進入一種稱為鎖定的狀態。連線被鎖定時,每一筆後續交易都會使用相同的基礎資料庫連線,直到工作階段結束為止。其他用戶端連線也無法重複使用該資料庫連線,直到工作階段結束為止。工作階段會在用戶端連線中斷時結束。

在偵測到不適用於其他工作階段的工作階段狀態變更時,RDS Proxy 會自動將用戶端連線鎖定至特定資料庫連線。鎖定會降低連線重複使用的有效性。如果所有或幾乎所有的連線都遭遇鎖定,請考慮修改應用程式的程式碼或工作負載,以減少導致鎖定的情況。

例如,您的應用程式會變更工作階段變數或組態參數。在此情況下,稍後的陳述式可能會依賴新的變數或參數才會生效。因此,當 RDS Proxy 處理請求,而變更工作階段變數或組態設定時,會將該工作階段到資料庫的連線鎖定。這樣一來,工作階段狀態對於同一工作階段中的所有後續交易仍然有效。

對於部分資料庫引擎,此規則不適用於您可以設定的所有參數。RDS Proxy 會追蹤某些陳述式和變數。因此,當您修改它們時,RDS 代理不會釘選工作階段。在這種情況下,RDS Proxy 只會重複使用其他工作階段的連線,這些工作階段具有與這些設定相同的值。如需 Aurora MySQL 的追蹤陳述式和變數清單,請參閱 RDS Proxy 針對 Aurora MySQL 資料庫追蹤哪些項目

RDS Proxy 針對 Aurora MySQL 資料庫追蹤哪些項目

下列為 RDS Proxy 追蹤的 MySQL 陳述式:

  • DROP DATABASE

  • DROP SCHEMA

  • USE

下列為 RDS Proxy 追蹤的 MySQL 變數:

  • AUTOCOMMIT

  • AUTO_INCREMENT_INCREMENT

  • CHARACTER SET (or CHAR SET)

  • CHARACTER_SET_CLIENT

  • CHARACTER_SET_DATABASE

  • CHARACTER_SET_FILESYSTEM

  • CHARACTER_SET_CONNECTION

  • CHARACTER_SET_RESULTS

  • CHARACTER_SET_SERVER

  • COLLATION_CONNECTION

  • COLLATION_DATABASE

  • COLLATION_SERVER

  • INTERACTIVE_TIMEOUT

  • NAMES

  • NET_WRITE_TIMEOUT

  • QUERY_CACHE_TYPE

  • SESSION_TRACK_SCHEMA

  • SQL_MODE

  • TIME_ZONE

  • TRANSACTION_ISOLATION (or TX_ISOLATION)

  • TRANSACTION_READ_ONLY (or TX_READ_ONLY)

  • WAIT_TIMEOUT

盡可能減少鎖定

RDS Proxy 的效能調校涉及試圖藉由將鎖定降到最低,讓交易層級的連線重複使用 (多工) 達到最大。

您可以執行下列操作,盡可能減少鎖定:

  • 避免可能導致鎖定的不必要資料庫要求。

  • 在所有連線中一致地設定變數和組態設定。這樣,稍後的工作階段更有可能重複使用具有這些特定設置的連線。

    但是,對於 PostgreSQL,設定變數會導致工作階段鎖定。

  • 若為 MySQL 引擎系列資料庫,將工作階段鎖定篩選條件套用至代理。如果您知道鎖定並不會影響應用程式的正確操作,就可以免除某些類型的操作將工作階段鎖定。

  • 透過監控 Amazon CloudWatch 指標DatabaseConnectionsCurrentlySessionPinned查看釘選發生的頻率。如需此測量結果和其他 CloudWatch量度的資訊,請參閱使用 Amazon 監控 RDS 代理指標 CloudWatch

  • 如果您使用 SET 陳述式為每個用戶端連線執行相同的初始化,您可以執行此操作,同時保留交易層級的多工。在此情況下,您可以將設定初始工作階段狀態的陳述式移至代理所使用的初始化查詢中。此屬性為一包含一個或多個以分號分隔的 SQL 陳述式的字串。

    例如,您可以為設定特定組態參數的代理定義初始化查詢。然後,每當它為該代理設定新連線時,RDS Proxy 會套用這些設定。您可以從應用程式的程式碼中移除相應的 SET 陳述式,這樣它們就不會干擾交易層級的多工。

    如需代理發生鎖定頻率的指標,請參閱 使用 Amazon 監控 RDS 代理指標 CloudWatch

導致所有引擎系列鎖定的條件

在下列情況下,多工可能會導致意外行為,代理將工作階段鎖定於目前連線:

  • 文字大小大於 16 KB 的任何陳述式會導致代理鎖定工作階段。

導致 Aurora MySQL 鎖定的條件

若為 PostgreSQL,下列互動也會導致鎖定:

  • 明確的資料表鎖定陳述式 LOCK TABLELOCK TABLESFLUSH TABLES WITH READ LOCK 會導致代理鎖定工作階段。

  • 使用 GET_LOCK 建立具名鎖定會導致代理鎖定工作階段。

  • 設定使用者變數或系統變數 (有某些例外) 會導致代理鎖定工作階段。如果這種情況減少了太多的連線重複使用率,請選擇不會造成釘選的SET作業。如需如何設定篩選屬性來執行此作業的資訊,請參閱 建立 RDS Proxy修改 RDS Proxy

  • 建立一個暫時資料表會導致代理鎖定工作階段。這樣,無論交易邊界如何,暫時資料表的內容在整個工作階段中都會保留。

  • 呼叫函數 ROW_COUNTFOUND_ROWSLAST_INSERT_ID 有時會導致鎖定。

    這些函數導致鎖定的確切情況,在與 MySQL 5.7 相容的 Aurora MySQL 版本之間可能會有所差異。

  • 預備陳述式導致代理鎖定工作階段。無論預備陳述式使用 SQL 文字或二進位協定,此規則都適用。

  • 當您使用 SET LOCAL 時,RDS Proxy 不會釘選連線。

  • 呼叫存放程序和存放函數不會導致鎖定。RDS Proxy 不會偵測由此類呼叫導致的任何工作階段狀態變更。如果您依賴該會話狀態在事務之間持續存儲,請確保您的應用程序不會更改存儲例程中的會話狀態。例如,RDS Proxy 目前與建立在所有交易中持續存在之暫存資料表的預存程序不相容。

如果您對應用程式行為具有專業知識,您可以略過特定應用程式陳述式的鎖定行為。若要這麼做,請在建立代理時選擇工作階段鎖定篩選條件選項。您目前可以選擇退出工作階段鎖定,以便設定工作階段變數和組態設定。

導致 Aurora PostgreSQL 鎖定的條件

若是 PostgreSQL,下列互動也會導致鎖定:

  • 使用SET命令。

  • 使用PREPAREDISCARDDEALLOCATE、或EXECUTE命令來管理準備好的陳述式。

  • 創建臨時序列,表或視圖。

  • 宣告游標。

  • 捨棄工作階段狀態。

  • 在通知頻道上收聽。

  • 載入程式庫模組,例如auto_explain.

  • 使用函數操作序列,例如nextvalsetval

  • 使用諸如pg_advisory_lock和之類的功能與鎖進行交互pg_try_advisory_lock

    注意

    RDS 代理伺服器不會在交易層級建議鎖定上釘選 pg_advisory_xact_lockpg_advisory_xact_lock_shared,特別是pg_try_advisory_xact_lock、和pg_try_advisory_xact_lock_shared

  • 設定參數,或將參數重設為其預設值。具體來說,使用SETset_config命令將默認值分配給會話變量。

  • 呼叫存放程序和存放函數不會導致鎖定。RDS Proxy 不會偵測由此類呼叫導致的任何工作階段狀態變更。如果您依賴該會話狀態在事務之間持續存儲,請確保您的應用程序不會更改存儲例程中的會話狀態。例如,RDS Proxy 目前與建立在所有交易中持續存在之暫存資料表的預存程序不相容。

刪除 RDS Proxy

您可以在不再需要代理伺服器時刪除代理伺服器。或者,如果您將與其關聯的資料庫執行個體或叢集停止服務,則可以刪除 Proxy。

若要刪除代理
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

  2. 在導覽窗格中,選擇 Proxies (代理)。

  3. 從清單中選擇要刪除的代理。

  4. 選擇 Delete Proxy (刪除代理)

要刪除數據庫代理,請使用 AWS CLI 命令刪除- DB 代理。若要移除相關的關聯,請同時使用 deregister-db-proxy-targets 命令。

aws rds delete-db-proxy --name proxy_name
aws rds deregister-db-proxy-targets --db-proxy-name proxy_name [--target-group-name target_group_name] [--target-ids comma_separated_list] # or [--db-instance-identifiers instance_id] # or [--db-cluster-identifiers cluster_id]

若要刪除資料庫代理,請呼叫 Amazon RDS API 函數 DeleteDBProxy要刪除相關項目和關聯,您還可以調用函數 DeleteDB ProxyTarget 組和取消註冊數據庫。ProxyTargets