本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon RDS Data API 進行工作階段管理
RDS Data API 會維護資料庫連線集區,並在呼叫之間重複使用它們,以減少連線開銷。重複使用連線之前,RDS Data API 會重設工作階段狀態。重設會因資料庫引擎而有所不同:在 PostgreSQL 上,RDS Data API 會執行 DISCARD ALL陳述式以清除工作階段狀態,例如暫存資料表、預備陳述式和工作階段層級參數;在 MySQL 上,RDS Data API 會重設連線 (相當於 COM_RESET_CONNECTION)。
這些重設涵蓋引擎擁有的工作階段層級屬性,但不保證包含延伸模組建立的狀態。執行這些清除時,延伸項目的行為可能不會與其他工作階段層級屬性相同,而且重設後,其狀態可能會保留在資料庫連線上。由於 RDS Data API 會重複使用連線,延伸模組留下的狀態不限於建立連線的呼叫,而且稍後的呼叫會重複使用相同的連線時,仍然存在。
dblink 是此行為的一個範例: DISCARD ALL 不會關閉dblink延伸模組開啟的連線,因此重複使用dblink連線時,在一次呼叫中開啟的具名連線可以保持開啟。其他將資源保留在引擎工作階段狀態之外的延伸項目,其行為可能類似。
如果您搭配 RDS Data API 使用擴充功能,請勿依賴工作階段重設來釋出擴充功能擁有的狀態。使用延伸項目自己的遞減函數,在相同交易中建立和釋放該狀態。對於 dblink,請關閉每個與 的連線dblink_disconnect。