全部產品
Search
文件中心

PolarDB:讀寫分離

更新時間:Jul 06, 2024

本文介紹了讀寫分離類的Hint文法。

本文適用於PolarDB-X 1.0 5.3及以上版本。

PolarDB-X 1.0提供了一種針對應用程式層透明的讀寫分離實現。但是由於RDS主執行個體與唯讀執行個體之間資料的同步存在著毫秒層級的延遲,如果在主庫中變更以後需要馬上讀取變更的資料,則需要保證將讀取資料的SQL下發到主執行個體中。針對這種需求,PolarDB-X 1.0提供了讀寫分離自訂HINT,指定將SQL下發到主執行個體或者唯讀執行個體。

文法

/*+TDDL:
    master()
    | slave()
*/          

在該自訂HINT中可以指定SQL是在主執行個體上執行還是在唯讀執行個體上執行。對於/*+TDDL:slave()*/,如果一個主RDS執行個體存在多個唯讀執行個體,那麼PolarDB-X 1.0會根據所分配的權重隨機播放一個唯讀執行個體執行SQL語句。

注意事項

  • PolarDB-X 1.0自訂HINT支援/*+TDDL:hint_command*//!+TDDL:hint_command*/兩種格式。
  • 如果使用/*+TDDL:hint_command*/格式,在使用MySQL官方命令列用戶端執行帶有PolarDB-X 1.0自訂HINT的SQL時,請在登入命令中加上-c 參數。否則,由於PolarDB-X 1.0自訂HINT是以 MySQL 注釋形式使用的,該用戶端會將備註陳述式刪除後再發送到服務端執行,導致PolarDB-X 1.0自訂HINT失效。具體請查看MySQL 官方用戶端命令

樣本

  • 指定SQL在主執行個體上執行:
    SELECT /*+TDDL:master()*/ * FROM table_name;               

    在SQL第一個關鍵字之後添加/*+TDDL:master()*/這個自訂HINT後,這條SQL將被下發到主執行個體上執行。

  • 指定SQL在唯讀執行個體上執行:

    SELECT /*+TDDL:slave()*/ * FROM table_name;               

    在SQL第一個關鍵字之後添加/*+TDDL:slave()*/這個自訂HINT後,這條SQL將會根據所分配的權重被隨機下發到某個唯讀執行個體上執行。

    說明
    • 此讀寫分離自訂HINT僅僅針對非事務中的讀SQL語句生效,如果SQL語句是寫SQL或者SQL語句在事務中,那麼還是會下發到RDS的主執行個體執行。
    • PolarDB-X 1.0針對/*+TDDL:slave()*/自訂HINT,會從唯讀執行個體中按照權重隨機選取一個下發SQL語句執行。若唯讀執行個體不存在時,不會報錯,而是選取主執行個體執行。