讀寫分離是指通過一個讀寫分離地址實現讀寫請求的自動轉寄。通過RDS的讀寫分離地址,可以使寫請求自動轉寄到主執行個體,讀請求按照設定的權重自動轉寄到各個唯讀執行個體。

功能優勢

  • 統一讀寫分離地址,方便維護。

    不開通讀寫分離時,您需要在應用程式中分別配置主執行個體和每個唯讀執行個體的串連地址,才能實現將寫請求發往主執行個體而將讀請求發往唯讀執行個體。

    RDS讀寫分離功能提供一個讀寫分離地址,您串連該地址後即可對主執行個體和唯讀執行個體進行讀寫操作,讀寫請求被自動轉寄到對應執行個體,可降低維護成本。

    同時,您只需添加唯讀執行個體的個數,即可不斷擴充系統的處理能力,應用程式無需做任何修改。

  • 高安全鏈路原生支援,提升效能。

    如果您在雲上自行搭建代理層實現讀寫分離,資料在到達資料庫之前需要經曆多個組件的語句解析和轉寄,對響應延遲有較大的影響。而RDS讀寫分離內建於已有的高安全鏈路,沒有任何額外的組件來消耗時間,能夠有效降低延遲,提升處理速度。

  • 可設權重和閾值,符合多情境使用。

    您可以設定主執行個體和唯讀執行個體的讀請求權重,以及設定唯讀執行個體的延遲閾值。

  • 執行個體健全狀態檢查,提升資料庫系統的可用性。

    讀寫分離模組將自動對主執行個體和唯讀執行個體進行健全狀態檢查,當發現某個執行個體出現宕機或者延遲超過閾值時,將不再分配讀請求給該執行個體,讀寫請求在剩餘的健康執行個體間進行分配。以此確保單個唯讀執行個體發生故障時,不會影響應用的正常訪問。當執行個體被修複後,RDS會自動將該執行個體納回請求分配體系內。

    说明 為避免單點故障,建議您為一個主執行個體建立至少兩個唯讀執行個體。
  • 免費使用,降低資源及維護成本。

    為普惠使用者,RDS為所有隻讀執行個體使用者免費提供讀寫分離功能,無需支付任何額外費用。

功能限制

  • 暫不支援將如下命令或功能轉寄至唯讀執行個體:
    • stmt prepare sql 命令會自動在主執行個體執行。
    • stmt prepare commandstmt close 前不支援轉寄至唯讀執行個體。
    • set globalset userset once 的環境變數設定會自動在主執行個體執行。
  • 暫不支援執行如下命令或功能:
    • 暫不支援 SSL 加密。
    • 暫不支援壓縮協議。
    • 暫不支援 com_dump_table 和 com_change_user 協議。
    • 暫不支援 kill connection [query]
    • 暫不支援 change user
  • 如下命令的執行結果具有隨機性:

    show processlistshow master statuscom_process_info 這三個命令會根據執行時所串連的執行個體返回相應的結果。

  • 事務都路由到主庫。
  • 讀寫分離不保證非事務讀的一致性,業務上有讀一致性需求的請加hint強制查詢走主庫,或者封裝到事務中。
  • 若您需要使用某些查詢語句來擷取即時資料,您可以通過Hint格式將這些查詢語句強制轉寄到主執行個體上執行。關於RDS讀寫分離支援的Hint格式,請參見文檔系統權重分配規則中的通過Hint指定SQL發往主執行個體或唯讀執行個體部分。
  • 暫不支援LAST_INSERT_ID()函數,若需使用該函數,請在請求中加入hint:/*FORCE_MASTER*/, eg:/*FORCE_MASTER*/ SELECTLAST_INSERT_ID();

常見問題