全部產品
Search
文件中心

:通過Proxy Query Cache最佳化熱點Key問題

更新時間:Aug 07, 2024

為更好地改善對熱點Key的發起大量讀請求導致的訪問傾斜,雲原生記憶體資料庫Tair新增代理查詢快取功能(Proxy Query Cache),啟用該功能後,代理節點會緩衝熱點Key對應的請求和查詢結果,當在有效時間內收到同樣的請求時直接返回結果至用戶端,無需和後端的資料分區互動。

前提條件

應用情境

需要解決或預防熱點Key的讀請求引發的訪問傾斜問題,即由於大量的讀請求集中在某些Key形成了熱點Key,從而導致某些資料分區的CPU使用率和流量使用率持續保持高位並接近100%。

說明

由於代理節點中緩衝的熱點Key的查詢結果在有效時間內不會更新,需要業務上允許資料在緩衝有效時間內的 最終一致性

工作原理

圖 1. Proxy Query Cache原理Proxy Query Cache原理

雲原生記憶體資料庫Tair會根據高效的排序和統計演算法識別出執行個體中存在的熱點Key(通常熱點Key的QPS大於5,000),開啟該功能後,代理節點Proxy會根據設定的規則緩衝熱點Key的請求和查詢結果(僅緩衝熱點Key的查詢結果,無需緩衝整個Key)。當在緩衝有效時間內收到相同的請求時,Proxy會直接返回結果至用戶端,無需和後端的資料分區執行互動。在提升讀取速度的同時,降低了熱點Key對資料分區的效能影響,避免訪問傾斜。

說明

您可以通過執行個體診斷功能分析執行個體是否存在訪問傾斜;您還可以通過緩衝分析功能查詢執行個體的熱點Key資訊。具體操作,請參見發起執行個體診斷即時Top Key統計

設定方法及參數說明

您需要通過修改執行個體參數的方式管理該功能,各參數解釋如下。具體操作,請參見設定執行個體參數

參數

說明

query_cache_enabled

是否啟用代理查詢快取功能,取值:

  • 0:不啟用,預設值。

  • 1:啟用。

重要

由於代理節點中緩衝的熱點Key的查詢結果在有效時間內不會更新,在啟用該功能前,您需要確認業務上是否允許資料在緩衝有效時間內的 最終一致性

query_cache_mode

代理查詢快取的工作模式,取值:

  • 0:只快取資料分區推送的熱點Key的查詢結果,預設值。

  • 1:緩衝所有Key的查詢結果並進行根據最近最少使用演算法LRU(Least Recently Used)進行淘汰。

重要

由於代理節點的緩衝空間有限(代理節點每個線程100 MB),如果設定該參數的值為1,代理節點將按照LRU演算法進行淘汰,可能降低緩衝的命中率,從而引起整體效能的下降。

query_cache_expire

快取資料的有效時間,單位為毫秒,取值:100~60000,預設值為1000

  • 如果緩衝的資料在有效期間內被修改,修改後的資料不會同步至緩衝中,即相同的讀請求會擷取到緩衝中的髒資料,直至緩衝失效。

  • 您需要根據具體的業務情境和對髒資料的容忍度謹慎評估該參數的值,該值設定過小會降低緩衝的命中率,設定過大會導致用戶端在較長的時間內讀取到的是髒資料。

相關命令

您可以串連Tair執行個體,執行下述命令,查詢Querycache的使用方式,串連方法請參見通過redis-cli串連Tair

QUERYCACHE KEYS

命令格式:QUERYCACHE KEYS

命令描述:查詢代理節點中已緩衝的所有熱點Key,將返回每個熱點Key的資料庫名和Key名稱資訊。

命令樣本:

QUERYCACHE KEYS

返回樣本:

1) 1) (integer) 0
   2) "key:000000000003"
2) 1) (integer) 0
   2) "key:000000000001"
3) 1) (integer) 0
   2) "key:000000000002"
4) 1) (integer) 0
   2) "key:000000000000"

QUERYCACHE INFO

命令格式:QUERYCACHE INFO

命令描述:擷取代理查詢快取的運行情況。

命令樣本:

QUERYCACHE INFO

返回樣本:

1) "put_qps:4.00"
2) "get_qps:16570.00"
3) "hit_rate:99.98"
4) "memory_size:180"
5) "query_count:4"
6) "bandwidth_limit_query_cnt:0"
7) "qps_limit_query_cnt:0"

返回樣本說明:

  • put_qps:資料節點每秒往Querycache寫入的次數。

  • get_qps:用戶端每秒從Querycache中讀取的次數。

  • hit_rate:緩衝的命中率。

  • memory_size:快取資料佔用的記憶體容量,單位為位元組。

  • query_count:已緩衝的請求的數量。

  • bandwidth_limit_query_cnt:因頻寬節流設定訪問Querycache被限流的次數,預設未開啟限制。

  • qps_limit_query_cnt:因QPS限制訪問Querycache被限流的次數,預設未開啟限制。

QUERYCACHE INSTALL

命令格式:QUERYCACHE INSTALL

命令描述:擷取已緩衝的所有請求命令。

命令樣本:

QUERYCACHE INSTALL

返回樣本:

1) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000000\r\n"
   3) (integer) 668
2) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000001\r\n"
   3) (integer) 668
3) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000003\r\n"
   3) (integer) 668
4) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000002\r\n"
   3) (integer) 667

返回樣本說明:每個請求命令的資訊由三行資訊組成,分別為資料庫名、請求命令的完整內容(格式遵照Redis協議規範)、剩餘存留時間(單位為毫秒)。