天天看點

驗證RDS讀寫分離是否正确分發隻讀請求

目前RDS-Mysql支援開通讀寫分離,然後應用使用讀寫分離的位址送出請求的時候,就能夠将符合條件的讀請求分發到隻讀執行個體上執行,進而分擔主執行個體上讀請求的壓力。

但是在使用過程中,并不是所有的讀都會分發到隻讀執行個體執行個體上執行,比方說處于事務中的讀。(詳細請參考:

https://help.aliyun.com/document_detail/96073.html?spm=a2c4g.11174283.6.628.32b94c22UhkIsT
驗證RDS讀寫分離是否正确分發隻讀請求

在處理問題的過程中,經常會有使用者反映,為什麼我隻讀執行個體上的CPU壓力特别低,并且業務中的一些讀請求都沒有在上面運作,針對這種情況,可能就是因為在應用中有開啟事務,然後讀請求就被發送到主執行個體上執行了。

對于這種情況的排查,我建議使用下面的方法進行操作:

  1. 首先在主執行個體還有隻讀執行個體上開啟一下sql審計。
  2. 配置分離的權重:主執行個體為0,隻讀執行個體為100。
  3. 然後通過mysql指令行這種方式連接配接讀寫分離的位址,送出一個簡單的讀請求(沒有包含在事務裡面)。
  4. 最後在主執行個體和隻讀執行個體的sql審計日志中檢視,看到底是在哪裡執行的之前的select操作。

如果發現了這樣的方式送出讀請求還是到主執行個體上執行的話,那麼請聯系阿裡雲進行排查(發生的機率太小);一般如果是因為開啟了事務造成的話,在審計日志中也是能夠看到的。