注意:
系统视图总览-V4.3.5-OceanBase 数据库文档-分布式数据库使用文档
oceanbase/src/share/inner_table/ob_inner_table_schema_def.py at develop · oceanbase/oceanbase · GitHub
【知识分享】OceanBase 内部表源码逻辑梳理 - 社区问答- OceanBase社区-分布式数据库
【有问必答】如何查询表结构变更记录(DDL 执行记录)? - 社区问答- OceanBase社区-分布式数据库
【运维技巧分享】如何查看所有索引的 local / global 属性? - 社区问答- OceanBase社区-分布式数据库
为什么我创建的 global index 会自动变成 local index?-数据库技术博客-OceanBase分布式数据库
MemStore 用于保存 DML 产生的增量数据,空间不可被占用。
• 其它众多内存模块会复用 KVCache 空间。
• 除了 MemStore 和 KVCache 外,其它模块的内存使用大小默认不超过 10GB。
查询监控指标:
通过 oceanbase.gv$sysstat 视图可以查询租户的各类监控指标。
查询全部监控指标
示例:
SELECT * FROM oceanbase.`gv$sysstat`;
+--------+-----------+----------+------------+----------------------------------------------------------+-------+---------------------+------------+---------+
| CON_ID | SVR_IP | SVR_PORT | STATISTIC# | NAME | CLASS | VALUE | VALUE_TYPE | STAT_ID |
+--------+-----------+----------+------------+----------------------------------------------------------+-------+---------------------+------------+---------+
| 1 | 127.0.0.1 | 2882 | 0 | rpc packet in | 1 | 2845 | ADD_VALUE | 10000 |
| 1 | 127.0.0.1 | 2882 | 1 | rpc packet in bytes | 1 | 4260468 | ADD_VALUE | 10001 |
|··························································································································································· |
| 1 | 127.0.0.1 | 2882 | 437 | observer partition table updater core table queue size | 1024 | 0 | SET_VALUE | 170003 |
| 1 | 127.0.0.1 | 2882 | 438 | rootservice start time | 2048 | 1698131256514039 | SET_VALUE | 180001 |
+--------+-----------+----------+------------+----------------------------------------------------------+-------+---------------------+------------+---------+
439 rows in set
查询特定监控指标
示例:
CPU 相关。
SELECT * FROM oceanbase.`gv$sysstat` WHERE name LIKE '%cpu%';
内存:
SELECT * FROM oceanbase.`gv$sysstat` WHERE name LIKE '%memory%';
SELECT * FROM oceanbase.`gv$sysstat` WHERE name LIKE '%memstore%';
sql:
SELECT * FROM oceanbase.`gv$sysstat` WHERE name LIKE 'sql%';
IO:
SELECT * FROM oceanbase.`gv$sysstat` WHERE name LIKE 'io%';
查询计算指标
gv$sysstat
视图维护的均为原始指标,有时我们需要观察 qps、rt 等速率指标。 此时需要通过计算不同时间采样的值,例如通过 SQl 查询次数可以计算每秒的查询次数。
示例:
SET @metric_name = 'sql select count' ;
--第一次采样
SELECT CURRENT_TIMESTAMP, SUM(`VALUE`) INTO @t1, @v1 FROM oceanbase.`gv$sysstat` WHERE `NAME` = @metric_name ;
--等几秒
SELECT sleep(2) FROM dual;
+----------+
| sleep(2) |
+----------+
| 0 |
+----------+
1 row in set
--第二次采样
SELECT CURRENT_TIMESTAMP, SUM(`VALUE`) INTO @t2, @v2 FROM oceanbase.`gv$sysstat` WHERE `NAME` = @metric_name ;
进行计算
SELECT ROUND((@v2-@v1) * 1000000 / (TIMESTAMPDIFF(MICROSECOND,@t1,@t2)), 0) AS value_per_second FROM dual;
+------------------+
| value_per_second |
+------------------+
| 0 |
+------------------+
1 row in set
查询内存状态
每个租户内部的内存分模块划分,需要关注的模块主要包含:
- 不可动态伸缩的内存:MemStore
- 可动态伸缩的内存:KVCache
- 执行计划缓存:PLAN CACHE
- 执行 SQL 内存:SQL AREA,主要供 parser 和优化器使用
- 工作线程内存:WORKER AREA
查询内存使用大于 200MB 的模块
SELECT * FROM oceanbase.gv$ob_memory WHERE used > 1024*1024*200;
查询内存占用最大的 10 个模块
SELECT
`MOD_NAME`,
ROUND(USED / 1024 / 1024 , 2) AS USED_MB
FROM oceanbase.gv$ob_memory
GROUP BY `MOD_NAME`
ORDER BY USED DESC
limit 10;
+----------------+---------+
| MOD_NAME | USED_MB |
+----------------+---------+
| CoStack | 103.66 |
| Memstore | 97.19 |
| SqlPhyPlan | 40.80 |
| LogGroupBuffer | 40.00 |
| BloomFilter | 32.00 |
| ash_list | 30.00 |
| SchemaSysCache | 27.02 |
| TenantSchemMgr | 25.80 |
| HashBuckDTLINT | 18.00 |
| MEMTABLE_ARENA | 17.01 |
+----------------+---------+
10 rows in set
查询转储状态
所谓 MemStore,是指租户申请的内存资源中可供存放更新的数据量, 例如一个租户可使用的内存为 8GB (建立租户时,Resource Unit 的 min_memory), 系统参数 memstore_limit_percentage 控制可用于存写入数据的内存空间(其余的内存会被用作其它用途,例如缓存)。
当租户的 MemStore 内存使用率达到 freeze_trigger_percentage 参数的值, 并且转储的次数已经达到了 major_compact_trigger 参数的值,会自动触发合并。
SELECT `TENANT_ID`, `SVR_IP`, `SVR_PORT`,
round(ACTIVE_SPAN/1024/1024/1024, 2) AS ACTIVE_SPAN_GB,
round(MEMSTORE_USED/1024/1024/1024, 2) AS MEMSTORE_USED_GB,
round(FREEZE_TRIGGER/1024/1024/1024, 2) AS FREEZE_TRIGGER_GB,
round(MEMSTORE_LIMIT/1024/1024/1024, 2) AS MEMSTORE_LIMIT_GB,
FREEZE_CNT AS FREEZE_COUNT
FROM oceanbase.gv$ob_memstore;
+-----------+-----------+----------+----------------+------------------+-------------------+-------------------+--------------+
| TENANT_ID | SVR_IP | SVR_PORT | ACTIVE_SPAN_GB | MEMSTORE_USED_GB | FREEZE_TRIGGER_GB | MEMSTORE_LIMIT_GB | FREEZE_COUNT |
+-----------+-----------+----------+----------------+------------------+-------------------+-------------------+--------------+
| 1 | 127.0.0.1 | 2882 | 0.10 | 0.10 | 0.26 | 1.00 | 0 |
+-----------+-----------+----------+----------------+------------------+-------------------+-------------------+--------------+
1 row in set
字段含义:
• ACTIVE_SPAN:当前租户活跃的 MemStore。
• MEMSTORE_USED:当前租户 MemStore 总和。
• FREEZE_TRIGGER:触发 Major Freeze 的值大小。
• MEMSTORE_LIMIT:租户总的内存上限大小。
• FREEZE_CNT:上一次合并后到现在为止租户转储次数。