达梦数据库 - 回滚表空间增长问题
- 环境介绍
- 1 环境搭建
- 1.1 创建表与测试数据
- 1.2 查询待提交的数据量
- 1.3 查询回滚表空间使用情况
- 1.3.1 插入数据前查询结果
- 1.3.2 插入数据后未提交事务查询结果
- 1.3.3 插入数据后提交事务查询结果
环境介绍
- 达梦数据库ROLL.DBF 在某些业务系统厂商使用时异常增长到TB问题分析定位;
- 业务系统的INSERT , UPDATE , DELETE 操作都会占用回滚表空间,这类事务都存在可以回滚的情况;
- 当表空间数据文件大小增长后,就算事务提交,数据文件不会自动变小,但里面的空闲比率会变大;
- 下面介绍环境演练与总结的查询语句,提供问题分析方向;
1 环境搭建
1.1 创建表与测试数据
CREATE TABLE AT230828 (C1 INT);
TRUNCATE TABLE AT230828;
BEGIN
FOR I IN 1..100000 LOOP
INSERT INTO AT230828 VALUES(I);
END LOOP;
END;
1.2 查询待提交的数据量
SELECT * FROM V$TRX TR LEFT JOIN V$SESSIONS VS ON TR.SESS_ID=VS.SESS_ID
WHERE TR.INS_CNT <>0 OR TR.DEL_CNT<>0 OR UPD_CNT <>0;
- 结果集中 9,10,11 行/列 分别对应 数据插入,数据删除,数据更新未提交的数据量
- 结果集中 25 行/列 对应当前事务正在执行的SQL语句
- 结果集中 48 行/列 对应当前事务客户端 IP 地址
- 结果集中 66 行/列 对应当前事务客户端使用的驱动版本号
1.3 查询回滚表空间使用情况
SELECT T.TOTAL_MB,T.TOTAL_MB-T.FREE_MB USE_MB,T.FREE_MB,R._USAGE,P.PAGE_USE_MB FROM
(
SELECT TOTAL_SIZE*(SELECT PAGE()/1024)/1024 TOTAL_MB,FREE_SIZE*(SELECT PAGE()/1024)/1024 FREE_MB FROM V$DATAFILE WHERE CLIENT_PATH='ROLL.DBF'
)T,
(
SELECT ROUND((1-(FREE_SIZE*1.0/TOTAL_SIZE*1.0))*100,3) ||'%' _USAGE FROM V$DATAFILE WHERE CLIENT_PATH='ROLL.DBF'
)R,
(
SELECT((SELECT SUM(N_USED_PAGES) FROM V$PSEG_ITEMS)* (SELECT PAGE()/1024))/1024 PAGE_USE_MB
)P
;
1.3.1 插入数据前查询结果
1.3.2 插入数据后未提交事务查询结果
1.3.3 插入数据后提交事务查询结果