MySQL Router 允許伺服器連線被集區化和共享。如果用戶端斷線,伺服器連線會被移到連線集區,以便重複使用。如果用戶端連線閒置時間超過指定時間,伺服器連線會閒置直到建立新的用戶端連線。這降低了伺服器必須維護的連線數量,並釋放了原本繫結在閒置連線上的資源。
MySQL Router 會追蹤用戶端執行的陳述式以及工作階段的 SQL 狀態,以確保用戶端連線不會遺失其工作階段狀態。如果連線被共享,重新連線的工作階段會處於用戶端離開時的狀態。如果無法做到,則不會共享連線。
陳述式產生的警告和錯誤會在用戶端請求時被擷取並傳回。工作階段變數也是如此。
預設的 I/O 執行緒數量與主機支援的 CPU 執行緒數量相同,可以使用 threads
組態選項進行設定。
在 PASSTHROUGH 模式下,或如果
server-ssl-mode=AS_CLIENT
和client-ssl-mode=PREFERRED
,則不支援連線共享。連線共享僅支援傳統連線。
除非在交易中,否則依賴先前工作階段狀態的 SQL 陳述式在連線共享啟用時無法運作。
某些功能會使連線處於閒置時無法共享的狀態。關閉或重設連線 (COM_RESET_CONNECTION) 將允許再次重複使用連線。
不支援的 SQL 功能
以下陳述式和函數在連線共享啟用時不支援,除非在交易中。
GET DIAGNOSTICS
LAST_INSERT_ID()
會阻止共享的 SQL 功能
以下 SQL 功能會阻止連線被集區化,直到連線被用戶端關閉或重設為止。
SQL_CALC_FOUND_ROWS
,GET_LOCK()
、service_get_write_locks()
和SQL_CALC_FOUND_ROWS
使用者變數
暫存表
預備陳述式
交易和 LOCK TABLES
也會阻止連線共享,直到交易關閉或鎖定釋放。
連線共享是使用以下選項進行設定
以下是在引導啟動期間設定連線共享的範例
--conf-set-option=routing:bootstrap_rw.connection_sharing=1
--conf-set-option=routing:bootstrap_ro.connection_sharing=1
--conf-set-option=connection_pool.max_idle_server_connections=32