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