SHOW TABLE REGIONS
SHOW TABLE REGIONS
SHOW TABLE REGIONS 语句用于显示 TiDB 中某个表的 Region 信息。
语法图
SHOW TABLE [table_name] REGIONS [WhereClauseOptional];
SHOW TABLE [table_name] INDEX [index_name] REGIONS [WhereClauseOptional];SHOW TABLE REGIONS 会返回如下列:
REGION_ID:Region 的 ID。START_KEY:Region 的 Start key。END_KEY:Region 的 End key。LEADER_ID:Region 的 Leader ID。LEADER_STORE_ID:Region leader 所在的 store (TiKV) ID。PEERS:Region 所有副本的 ID。SCATTERING:Region 是否正在调度中。
示例
test> create table t (id int key,name varchar(50), index (name));
Query OK, 0 rows affected
-- 默认新建表后会单独切分出一个 Region 来存放该表的数据,开始时行数据和索引数据都会写到这个 Region。
test> show table t regions;
+-----------+-----------+---------+-----------+-----------------+-----------+------------+
| REGION_ID | START_KEY | END_Key | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING |
+-----------+-----------+---------+-----------+-----------------+-----------+------------+
| 5 | t_43_ | | 8 | 2 | 8, 14, 93 | 0 |
+-----------+-----------+---------+-----------+-----------------+-----------+------------+
-- 上面 START_KEY 列的值 t_43_ 中,t 是表数据的前缀,43 是表 t 的 table ID。
-- END_KEY 列的值为空("")表示无穷大。
1 row in set
-- 用 `SPLIT TABLE REGION` 语法切分行数据的 Region,下面语法把表 t 的行数据切分成 5 个 Region。
test> split table t between (0) and (100000) regions 5;
+--------------------+----------------------+
| TOTAL_SPLIT_REGION | SCATTER_FINISH_RATIO |
+--------------------+----------------------+
| 5 | 1.0 |
+--------------------+----------------------+
1 row in set
-- 表 t 现在一共有 6 个 Region,其中 98、103、109、113、2 用来存行数据,Region 68 用来存索引数据。
test> show table t regions;
+-----------+--------------+--------------+-----------+-----------------+---------------+------------+
| REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING |
+-----------+--------------+--------------+-----------+-----------------+---------------+------------+
| 98 | t_43_r | t_43_r_20000 | 100 | 4 | 100, 101, 102 | 0 |
| 103 | t_43_r_20000 | t_43_r_40000 | 108 | 5 | 104, 108, 107 | 0 |
| 109 | t_43_r_40000 | t_43_r_60000 | 110 | 1 | 110, 111, 112 | 0 |
| 113 | t_43_r_60000 | t_43_r_80000 | 117 | 6 | 116, 117, 118 | 0 |
| 2 | t_43_r_80000 | | 3 | 1 | 3, 91, 92 | 0 |
| 68 | t_43_ | t_43_r | 90 | 6 | 69, 90, 97 | 0 |
+-----------+--------------+--------------+-----------+-----------------+---------------+------------+
6 rows in set
-- Region 98 的 START_KEY 和 END_KEY 中,t_43 是表数据前缀和 table ID,_r 是表 t record 数据的前缀,索引数据的前缀是 _i,
-- 所以 Region 98 的 START_KEY 和 END_KEY 表示用来存储 [-inf, 20000) 之前的 record 数据。其他 Region (103, 109, 113, 2) 的存储范围依次类推。
-- Region 68 用来存储索引数据存储。表 t 索引数据的起始 key 是 t_43_i,处于 Region 68 的存储范围内。
-- 用 `SPLIT TABLE REGION` 语法切分索引数据的 Region,下面语法把表 t 的索引 name 数据在 [a,z] 范围内切分成 2 个 Region。
test> split table t index name between ("a") and ("z") regions 2;
+--------------------+----------------------+
| TOTAL_SPLIT_REGION | SCATTER_FINISH_RATIO |
+--------------------+----------------------+
| 2 | 1.0 |
+--------------------+----------------------+
1 row in set
-- 现在表 t 一共有 7 个 Region,其中 5 个 Region (98, 103, 109, 113, 2) 用来存表 t 的 record 数据,另外 2 个 Region (125, 68) 用来存 name 索引的数据。
test> show table t regions;
+-----------+-----------------------------+-----------------------------+-----------+-----------------+---------------+------------+
| REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING |
+-----------+-----------------------------+-----------------------------+-----------+-----------------+---------------+------------+
| 98 | t_43_r | t_43_r_20000 | 100 | 4 | 100, 101, 102 | 0 |
| 103 | t_43_r_20000 | t_43_r_40000 | 108 | 5 | 104, 108, 107 | 0 |
| 109 | t_43_r_40000 | t_43_r_60000 | 110 | 1 | 110, 111, 112 | 0 |
| 113 | t_43_r_60000 | t_43_r_80000 | 117 | 6 | 116, 117, 118 | 0 |
| 2 | t_43_r_80000 | | 3 | 1 | 3, 91, 92 | 0 |
| 125 | t_43_i_1_ | t_43_i_1_016d80000000000000 | 127 | 6 | 127, 128, 129 | 0 |
| 68 | t_43_i_1_016d80000000000000 | t_43_r | 90 | 6 | 69, 90, 97 | 0 |
+-----------+-----------------------------+-----------------------------+-----------+-----------------+---------------+------------+
7 rows in set
-- 查看表 t 在 store 1 上的 region,用 where 条件过滤。
test> show table t regions where leader_store_id =1;
+-----------+-----------------------------+-----------------------------+-----------+-----------------+---------------+------------+
| REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING |
+-----------+-----------------------------+-----------------------------+-----------+-----------------+---------------+------------+
| 109 | t_43_r_40000 | t_43_r_60000 | 110 | 1 | 110, 111, 112 | 0 |
| 2 | t_43_r_80000 | | 3 | 1 | 3, 91, 92 | 0 |
+-----------+-----------------------------+-----------------------------+-----------+-----------------+---------------+------------+
2 rows in set