MySQL Router 8.4  /  部署 MySQL Router  /  連線共享與重複使用

3.4 連線共享與重複使用

MySQL Router 允許伺服器連線被集區化和共享。如果用戶端斷線,伺服器連線會被移到連線集區,以便重複使用。如果用戶端連線閒置時間超過指定時間,伺服器連線會閒置直到建立新的用戶端連線。這降低了伺服器必須維護的連線數量,並釋放了原本繫結在閒置連線上的資源。

MySQL Router 會追蹤用戶端執行的陳述式以及工作階段的 SQL 狀態,以確保用戶端連線不會遺失其工作階段狀態。如果連線被共享,重新連線的工作階段會處於用戶端離開時的狀態。如果無法做到,則不會共享連線。

陳述式產生的警告和錯誤會在用戶端請求時被擷取並傳回。工作階段變數也是如此。

注意

預設的 I/O 執行緒數量與主機支援的 CPU 執行緒數量相同,可以使用 threads 組態選項進行設定。

限制

  • 在 PASSTHROUGH 模式下,或如果 server-ssl-mode=AS_CLIENTclient-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