首批通过分布式安全可靠测评,为关键业务系统打造
监控索引
更新时间:2024-11-28 23:00:00
OceanBase 数据库提供索引监控功能,并且可以使用视图 DBA_INDEX_USAGE 来查询索引监控结果,从而更清晰地了解索引的使用情况。当索引表被删除后,OceanBase 数据库会在后台定期清理相应的监控数据记录,无需手动删除。
说明
非用户租户的索引使用不在统计范围,视图 DBA_INDEX_USAGE 仅展示用户租户数据。
注意事项
设置租户级配置项
_iut_stat_collection_type=ALL模式可能会导致索引查询性能的一定程度下降。因此,在使用该模式时需要谨慎考虑,并权衡性能回退的影响。配置项
_iut_max_entries设置保存的索引表上限,该配置项设置过大可能会造成租户内存消耗较多,因此不建议设置超过 30000。
使用说明
- 索引监控功能默认处于启动状态,并且在默认的采样(SAMPLED)模式下,其对性能的影响是非常小的,可以认为是可以忽略的。
配置项
为了控制监控索引的监控方式,OceanBase 数据库提供以下租户级的配置项可供修改。
说明
不同租户之间的配置参数和数据汇总是相互独立的,它们之间不会相互干扰。
| 配置项 | 默认值 | 说明 |
|---|---|---|
| _iut_enable | true | 控制索引监控是否开启。默认值为 true,表示打开监控;false 表示关闭监控。 |
| _iut_max_entries | 30000 | 控制监控的索引表数量。默认为 30000,取值范围 [0, +∞)。
说明
|
| _iut_stat_collection_type | SAMPLED | 控制索引监控信息统计的模式。有以下两种取值可选:
|
索引监控信息统计的模式
因为索引监控在集群启动时采用默认的采样(SAMPLED)模式,这种模式下并非所有索引使用数据都会被记录到内部表,视图 DBA_INDEX_USAGE 可能出现查询结果为空的情况。如果需要准确的信息,可以在当前租户下将监控索引信息收集模式设置为 ALL。
可以使用以下 SQL 语句来查看配置项 _iut_stat_collection_type 的值:
SELECT name, data_type, value FROM oceanbase.GV$OB_PARAMETERS WHERE name LIKE '%iut_stat_collection%';
可以使用以下 SQL 语句来设置:
ALTER SYSTEM SET _iut_stat_collection_type="ALL";
示例
创建表
test_tbl1。obclient [test_db]> CREATE TABLE test_tbl1 (col1 INT PRIMARY KEY, col2 VARCHAR(50) NOT NULL, col3 INT);在表
test_tbl1的列col3上创建了一个名为idx1_test_tbl1的索引。obclient [test_db]> CREATE INDEX idx1_test_tbl1 ON test_tbl1(col3);向表
test_tbl1中插入5条数据。obclient [test_db]> INSERT INTO test_tbl1 VALUES (1, 'name1', 20),(2, 'name2', 19),(3, 'name3', 20),(4, 'name4', 29),(5, 'name5', 26);返回结果如下:
Query OK, 5 rows affected Records: 5 Duplicates: 0 Warnings: 0执行
SELECT查询。obclient [test_db]> SELECT col1, col2 FROM test_tbl1 WHERE col3 >= 25;返回结果如下:
+------+-------+ | col1 | col2 | +------+-------+ | 5 | name5 | | 4 | name4 | +------+-------+ 2 rows in set查看视图
DBA_INDEX_USAGE。说明
索引监控在收集统计信息后,通过后台定时任务把数据刷到内部表,可能最长需要等待15分钟,才能在视图中查询到索引使用的监控结果。
obclient [test_db]> SELECT OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED FROM oceanbase.DBA_INDEX_USAGE;返回结果如下:
Empty set默认
SAMPLED模式下,并非所有索引使用数据都会被记录到内部表,可能在视图中查询不到预期的监控结果。可以通过 SQL 语句修改为非采样模式来收集数据,例如以下操作:使用以下 SQL 语句来设置监控索引信息收集模式为
ALL。ALTER SYSTEM SET _iut_stat_collection_type="ALL";再次执行
SELECT查询。SELECT col1, col2 FROM test_tbl1 WHERE col3 >= 25;再次查看视图
DBA_INDEX_USAGE。说明
索引监控在收集统计信息后,通过后台定时任务把数据刷到内部表,可能最长需要等待 15 分钟,才能在视图中查询到索引使用的监控结果。
SELECT OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED FROM oceanbase.DBA_INDEX_USAGE;返回结果如下:
+-----------+-----------------------------+---------+--------------------+------------------+----------------------------+ | OBJECT_ID | NAME | OWNER | TOTAL_ACCESS_COUNT | TOTAL_EXEC_COUNT | LAST_USED | +-----------+-----------------------------+---------+--------------------+------------------+----------------------------+ | 500127 | __idx_500126_idx1_test_tbl1 | test_db | 1 | 1 | 2024-01-24 11:09:30.928232 | +-----------+-----------------------------+---------+--------------------+------------------+----------------------------+ 1 row in set查询结果说明:
TOTAL_ACCESS_COUNT字段说明了SELECT操作时,test_db数据库下名为idx1_test_tbl1(__idx_500126_idx1_test_tbl1)的索引被访问了1次,最后被访问的时间点为2024-01-24 11:09:30.928232。字段说明如下:
OBJECT_ID:索引表 ID。NAME:索引表名。OWNER:数据库名。TOTAL_ACCESS_COUNT:总共访问次数。TOTAL_EXEC_COUNT:总共执行次数。LAST_USED:索引表最后一次被使用的时间。
更多有关视图
DBA_INDEX_USAGE字段的详细信息,请参见 DBA_INDEX_USAGE。