集群全局存储-SYS_GSTORES
📄字数 2.0K
👁️阅读量 加载中...
功能描述
SYS_GSTORES系统表用于管理虚谷数据库全局存储信息。
- 全局存储系统表用于管理虚谷数据库拥有存储资源对象全局存储信息,包括存储的状态、分布、密钥等。
- 全局存储通过链式管理,单向链支持快速定位首尾存储号。
- 全局存储拥有1-3个版本局部存储,通过{(NODE_ID1,STORE_NO1),(NODE_ID2,STORE_NO2),(NODE_ID3,STORE_NO3)}记载分布信息,(0,0)表示此版本不存在。
字段说明
序号 | 字段名 | 类型 | 说明 | V11 | V12 |
---|---|---|---|---|---|
0 | GSTO_NO | INTEGER | 全局存储号 | √ | √ |
1 | HEAD_NO | INTEGER | 当前全局存储对应的头块存储号 | √ | √ |
2 | TAIL_NO | INTEGER | 当前全局存储对应的尾块存储号 | √ | √ |
3 | NEXT_NO | INTEGER | 当前全局存储对应的下一个全局存储号 | √ | √ |
4 | SPLIT_NUM | INTEGER | 分裂计数值 | √ | √ |
5 | STORE_STA | INTEGER | 存储状态 | √ | √ |
6 | STORE_NUM | INTEGER | 副本个数 | √ | √ |
7 | NODE_ID1 | INTEGER | 第一版本节点ID | √ | √ |
8 | NODE_ID2 | INTEGER | 第二版本节点ID | √ | √ |
9 | NODE_ID3 | INTEGER | 第三版本节点ID | √ | √ |
10 | STORE_NO1 | INTEGER | 第一版本局部存储号 | √ | √ |
11 | STORE_NO2 | INTEGER | 第二版本局部存储号 | √ | √ |
12 | STORE_NO3 | INTEGER | 第三版本局部存储号 | √ | √ |
13 | LSN | BIGINT | 存储变更号(同版本号或变更次数) | √ | √ |
14 | DB_ID | INTEGER | 所属库ID | √ | √ |
15 | OBJ_ID | INTEGER | 所属表对象ID(存储为大对象或索引时,此处依然记载所属表ID) | √ | √ |
16 | ENCRY_ID | INTEGER | 密钥ID | × | √ |
17 | ZONE_ID | INTEGER | 存储所属区域号 | × | √ |
18 | NODEID | INTEGER | 节点ID | × | √ |
STORE_STA
STORE_STA用于指示所有版本状态,按位使用由低到高标记第一、第二、第三版本状态信息,每个版本存在4态,如下表:
信息 | 状态 |
---|---|
00 | 不存在 |
01 | 主版本 |
10 | 副版本 |
11 | 无效版本 |
存储状态速查表
第三版本 | 第二版本 | 第一版本 | STORE_STA十进制 |
---|---|---|---|
00 | 00 | 00 | 0 |
00 | 00 | 01 | 1 |
00 | 00 | 10 | 2 |
00 | 00 | 11 | 3 |
01 | 10 | 11 | 27 |
01 | 11 | 11 | 31 |
10 | 01 | 11 | 39 |
10 | 10 | 01 | 41 |
10 | 11 | 01 | 45 |
11 | 01 | 11 | 55 |
11 | 10 | 01 | 57 |
11 | 11 | 11 | 63 |
gsto_no分配
gsto_no分配 | V12 |
---|---|
系统堆表gsto_no | [2,38],[52,54],[57,60] |
系统表索引gsto_no | [70,96] |
大对象字段gsto_no | [42,50] |
用户表gsto_no | (200,~) |
注意
用户表gsto从201开始分配。
应用举例
- 查看哈希分区表的gsto_no
sql
-- 新建一张哈希分区表,共10个分区
SQL> CREATE TABLE tab_hash(id INT PRIMARY KEY,
c2 CHAR(1),
c3 VARCHAR,
c4 INT,
c5 BIGINT,
c6 FLOAT,
c7 DOUBLE,
c8 NUMERIC(10,2),
c9 DATE,
c10 TIME,
c11 DATETIME,
c12 TIMESTAMP
) PARTITION BY HASH(c2) PARTITIONS 10;
-- 查看各分区的存储号
SQL> SELECT GSTO_NOS, PARTI_NAME FROM SYS_PARTIS t1,SYS_OBJECTS t2 WHERE t1.table_id=t2.obj_id AND t2.obj_name='tab_hash';
+----------+------------+
| GSTO_NOS | PARTI_NAME |
+----------+------------+
| 217 | PART1 |
| 218 | PART2 |
| 219 | PART3 |
| 220 | PART4 |
| 221 | PART5 |
| 222 | PART6 |
| 223 | PART7 |
| 224 | PART8 |
| 225 | PART9 |
| 226 | PART10 |
+----------+------------+
SQL> SELECT GSTO_NO,HEAD_NO,TAIL_NO,NEXT_NO FROM SYS_GSTORES t1,SYS_OBJECTS t2 WHERE t1.obj_id=t2.obj_id AND t2.obj_name='tab_hash';
+---------+---------+---------+---------+
| GSTO_NO | HEAD_NO | TAIL_NO | NEXT_NO |
+---------+---------+---------+---------+
| 217 | 217 | 217 | 0 |
| 218 | 218 | 218 | 0 |
| 219 | 219 | 219 | 0 |
| 220 | 220 | 220 | 0 |
| 221 | 221 | 221 | 0 |
| 222 | 222 | 222 | 0 |
| 223 | 223 | 223 | 0 |
| 224 | 224 | 224 | 0 |
| 225 | 225 | 225 | 0 |
| 226 | 226 | 226 | 0 |
| 227 | 227 | 227 | 0 |
+---------+---------+---------+---------+
-- <由查询结果可知:各分区的存储编号为217~226,tab_hash表结构存储编号为227>
- 查看数据库存储状态
sql
-- 查看当前数据库中三版本不完整(不存在或无效)的存储数量
SQL> SELECT COUNT(*) FROM SYS_GSTORES WHERE store_sta!=41;
+-------+
| EXPR1 |
+-------+
| 108 |
+-------+
- 查看某张表的存储状态
sql
-- 三节点集群,使2号节点离线
SQL> CREATE TABLE tab_gstore(c1 INT);
SQL> SELECT store_sta FROM SYS_GSTORES t1,SYS_OBJECTS t2 WHERE t1.obj_id=t2.obj_id AND t2.obj_name='tab_gstore';
+-----------+
| STORE_STA |
+-----------+
| 57 |
+-----------+
-- <57的二进制为“11 10 01”,可知:第一第二版本为有效版本,第三版本为无效版本>
- 查询某张表存储分布
sql
-- 查询三版本分布状态
SQL> SELECT node_id1,node_id2,node_id3 FROM SYS_GSTORES t1,SYS_OBJECTS t2 WHERE t1.obj_id=t2.obj_id AND t2.obj_name='tab_gstore';
+----------+----------+----------+
| NODE_ID1 | NODE_ID2 | NODE_ID3 |
+----------+----------+----------+
| 1 | 3 | 0 |
+----------+----------+----------+
-- <由查询结果可知:第一版本即主版本分布在1号节点,第二版本即副版本分布在3号节点,第三版本无分布(2号节点死亡)>