一、為什么使用Tidb
最近發現tidb在互聯網圈大火,新生代的一個NewSql數據庫 具體鏈接可以訪問pincap的官網 https://www.pingcap.com/docs-cn/v3.0/
二、Tidb常見的問題:
1.數據熱點問題
因為tidb使用的是基於raft的tikv實例(rocketdb),任何分布式的系統都會存在或多或少的數據熱點問題,那我們遇到這個問題要是如何排查呢,tidb官網也提供了 很多便捷的查看hot key方案
第一種:
通過sql語句內置的表 進去hot熱點查看,可以通過TIDB_HOT_REGIONS這張表查看,TIDB_HOT_REGIONS
表提供了關於熱點 REGION 的相關信息
注意每一個tikv就為一個store
第二種:
通過pd-control工具進行查看
啟動方式 ./pd-ctl -u http://xxxxxx:2379
通過region命令 可以查看 每個raft group的id 里面raft leader 所在的store的位置,同時可以給如果出現熱點當前raft group進行分裂
通過hot命令查看熱點region/store
將某個region 分裂成多個
>> operator show // 顯示所有的 operators >> operator show admin // 顯示所有的 admin operators >> operator show leader // 顯示所有的 leader operators >> operator show region // 顯示所有的 Region operators >> operator add add-peer 1 2 // 在 store 2 上新增 Region 1 的一個副本 >> operator add remove-peer 1 2 // 移除 store 2 上的 Region 1 的一個副本 >> operator add transfer-leader 1 2 // 把 Region 1 的 leader 調度到 store 2 >> operator add transfer-region 1 2 3 4 // 把 Region 1 調度到 store 2,3,4 >> operator add transfer-peer 1 2 3 // 把 Region 1 在 store 2 上的副本調度到 store 3 >> operator add merge-region 1 2 // 將 Region 1 與 Region 2 合並 >> operator add split-region 1 --policy=approximate // 將 Region 1 對半拆分成兩個 Region,基於粗略估計值 >> operator add split-region 1 --policy=scan // 將 Region 1 對半拆分成兩個 Region,基於精確掃描值 >> operator remove 1
其中,Region 的分裂都是盡可能地從靠近中間的位置開始。對這個位置的選擇支持兩種策略,即 scan 和 approximate。它們之間的區別是,前者通過掃描這個 Region 的方式來確定中間的 key,而后者是通過查看 SST 文件中記錄的統計信息,來得到近似的位置。一般來說,前者更加精確,而后者消耗更少的 I/O,可以更快地完成。
通過調度策略操作region
>> scheduler show // 顯示所有的 schedulers >> scheduler add grant-leader-scheduler 1 // 把 store 1 上的所有 Region 的 leader 調度到 store 1 >> scheduler add evict-leader-scheduler 1 // 把 store 1 上的所有 Region 的 leader 從 store 1 調度出去 >> scheduler add shuffle-leader-scheduler // 隨機交換不同 store 上的 leader >> scheduler add shuffle-region-scheduler // 隨機調度不同 store 上的 Region >> scheduler remove grant-leader-scheduler-1 // 把對應的 scheduler 刪掉