Mysql

何時以及為什麼要在連接池中重置會話?

  • April 29, 2021

我正在使用 Python 將高速查詢推送服務實現到 MySQL 數據庫中。

考慮到各種 MySQL 元素(如儲存過程中的臨時表)的廣泛使用,何時以及為什麼 應該pool_reset_session在基於 256 個連接的池上使用功能?

始終設置pool_reset_session為 True,除非您有明確而有力的理由不這樣做。我想不出在返回池連接時不重置會話的理由。

不重置會話的風險是與您的會話關聯的數據將洩露到其他會話中。例如,您正在為多個並髮使用者提供服務的網站上進行銀行交易。部分程式碼將有關您的事務的一些數據保存到臨時表中。然後程式碼將該 MySQL 連接返回到連接池,在那裡它被移交給其他使用者的銀行互動。他們的會話現在可以看到有關您的銀行業務的一些詳細資訊!這同樣適用於其他會話狀態,如使用者變數或 last_insert_id。

如果您需要繼續使用會話狀態,例如多次讀取臨時表,那麼您的程式碼不應該將該連接返回到池,直到使用該臨時表完成。

引用自:https://dba.stackexchange.com/questions/290727