暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

达梦数据库常见问题处理

4398

1-表空间告警
告警指标
表空间使用率超90%。
应急步骤
1.登陆数据库。使用达梦客户端工具manager或者使
用disql命令登陆。
2.检查数据库表空间使用率情况。通过以下SQL语句
查询:
恒丰银行办公类集中式数据库应急预案管理
select
t1.NAME tablespace_name,
t2.FREE_SIZE*SF_GET_PAGE_SIZE()/1024/1024||‘M’ free_space,
t2.TOTAL_SIZE*SF_GET_PAGE_SIZE()/1024/1024||‘M’
total_space ,
t2.FREE_SIZE*100/t2.total_size “%FREE”,
round((t2.total_size-t2.free_size)*100/t2.total_size) “%USED”,
t2.path,
t2.auto_extend,
t2.max_size
from
vTABLESPACEt1,VTABLESPACE t1, VDATAFILE t2
where
t1.ID=t2.GROUP_ID
order by “%FREE” desc ;
3.给使用率超过90%的表空间增加数据文件或扩大单
个数据文件大小。例如:通过上面2的sql发现TEST表空
间使用率超过90%,则给该表空间增加数据文件或扩大对应
数据文件的大小。
(1)增加数据文件,例如原来只有一个数据文件,现多
增加一个或多个数据文件,文件大小根据实际情况设置:
alter tablespace “TEST” add datafile ‘TEST01.dbf’ size 10240 autoextend on maxsize 30720;
(2)扩大单个数据文件的大小,例如原数据文件单个最
大20G,现扩大为30G一个:
alter tablespace “TEST” datafile ‘TEST.dbf’ autoextend on maxsize 30720;
恒丰银行办公类集中式数据库应急预案管理
2-数据库长事务告警
告警指标
SQL语句执行时间过长。
应急步骤
1.登陆数据库。使用达梦客户端工具manager或者使
用disql命令登陆。
2.检查数据库活动会话情况。通过以下SQL语句查询:
SELECT
*
FROM
(
SELECT
sess_id ,
sql_text ,
datediff (ss, last_recv_time, SYSDATE) Y_EXETIME,
SF_GET_SESSION_SQL (SESS_ID) fullsql ,
clnt_ip
FROM
V$SESSIONS
WHERE
STATE = ‘ACTIVE’
)
WHERE
Y_EXETIME >= 2; --执行时间超2s,可以自定义该时间
3.记录该长事务sql语句。将长事务语句记录在txt
等文件以便后续优化。
恒丰银行办公类集中式数据库应急预案管理
4.关闭该长事务。
在数据库里面执行SQL语句:sp_close_session(sess_id);
5.优化相关长事务SQL语句。
3-整体业务速度慢,主机持续有CPU高
告警指标
执行如下语句,查看数据库服务进程,发现数据库主机
CPU使用率高。
top -p 数据库服务进程

应急步骤
1.确认数据库状态:
—确认数据库进程正常。
ps –ef|grep dmserver
—然后通过以下语句查询数据库状态:
select instance_name,status$ from vinstance; 2.检查数据库当前会话,是否有运行中的异常SQL。如 果有大量执行效率低的SQL,与应用确认是否可以限流、可 以强制终止。 3.查询所有会话: select sysdate , SF\_GET\_SESSION\_SQL(SESS\_ID), --获取完整sql sess\_id , sess\_seq , sql\_text , 恒丰银行办公类集中式数据库应急预案管理 state , seq\_no , user\_name , trx\_id , create\_time , clnt\_ip from vsessions
where
state=‘ACTIVE’;
4.查询执行效率慢sql。
SELECT
*
FROM
(
SELECT
sess_id ,
sql_text ,
datediff (ss, last_recv_time, SYSDATE) Y_EXETIME,
SF_GET_SESSION_SQL (SESS_ID) fullsql ,
clnt_ip
FROM
VSESSIONS WHERE STATE = 'ACTIVE' ) WHERE Y\_EXETIME >= 2;--执行时间超2s,可以自定义该时间 5.终止异常会话: 恒丰银行办公类集中式数据库应急预案管理 在数据库里面执行SQL语句:sp\_close\_session(sess\_id); 6.分析SQL执行计划,看是否有优化空间。将优化建 议反馈应用、项目组进行紧急处理。 7.观察数据库活动会话是否正常。 4-整体业务速度慢,主机CPU不高 告警指标 整体业务速度慢,但执行“top -p 数据库服务进程”, 发现数据库主机CPU使用率不高。 应急步骤 1.确认数据库状态: \---确认数据库进程正常: ps –ef|grep dmserver \---然后通过以下语句查询数据库状态: select instance\_name,status from vinstance; 2.检查存储读写性能,检查网络传输速度。以下命令 供参考: dd if=/dev/zero of=/home/test bs=8k count=1k oflag=dsync 3.检查数据库当前会话,是否有运行中的异常SQL。如 果有执行效率低的SQL,与应用确认是否可以限流、可以强 制终止。如果可以强制终止,执行下一步。 (1)查询所有会话: select sysdate , 恒丰银行办公类集中式数据库应急预案管理 SF\_GET\_SESSION\_SQL(SESS\_ID), --获取完整sql sess\_id , sess\_seq , sql\_text , state , seq\_no , user\_name , trx\_id , create\_time , clnt\_ip from vsessions
where
state=‘ACTIVE’;
(2)查询执行效率慢sql:
SELECT
*
FROM
(
SELECT
sess_id ,
sql_text ,
datediff (ss, last_recv_time, SYSDATE) Y_EXETIME,
SF_GET_SESSION_SQL (SESS_ID) fullsql ,
clnt_ip
FROM
VSESSIONS WHERE STATE = 'ACTIVE' 恒丰银行办公类集中式数据库应急预案管理 ) WHERE Y\_EXETIME >= 2;--执行时间超2s,可以自定义该时间 4.终止异常会话: 在数据库里面执行SQL语句:sp\_close\_session(sess\_id); 5.分析SQL执行计划,看是否有优化空间。将优化建 议反馈应用、项目组进行紧急处理。 6.观察数据库活动会话是否正常。 5- 数据库部分业务缓慢,CPU占用正常持续变化 告警指标 数据库部分业务缓慢,但执行“top -p 数据库服务进 程”,发现CPU占用正常持续变化。 应急步骤 1.检查存储读写性能,检查网络传输速度。以下命令 供参考: dd if=/dev/zero of=/home/test bs=8k count=1k oflag=dsync 2.检查数据库当前会话,是否有运行中的异常SQL。查 询所有会话: select sysdate , SF\_GET\_SESSION\_SQL(SESS\_ID), --获取完整sql sess\_id , sess\_seq , sql\_text , 恒丰银行办公类集中式数据库应急预案管理 state , seq\_no , user\_name , trx\_id , create\_time , clnt\_ip from vsessions
where
state=‘ACTIVE’;
3.检查数据库执行SQL缓存信息,是否有异常SQL。
4.查看数据库topsql,是否有异常SQL:
select top 60 datediff(ss,last_send_time,sysdate)
TIME,sess_id,run_status,sql_text,AUTO_CMT,user_name,appname,CLNT_IP,trx_id from
vsessions order by TIME desc; 5.检查数据库SQL日志,通过关键字在SQL日志中查 找是否有异常SQL。 6.收集最近一天的SQL 日志,交由数据库技术人员进 行分析。 7.分析SQL执行计划,看是否有优化空间.将优化建议 反馈应用、项目组进行紧急处理。 8.观察数据库活动会话是否正常。 6- 已有连接可以正常工作,新连接无法建立 告警指标 应用程序访问数据库报“登录服务器失败”,但已有连 恒丰银行办公类集中式数据库应急预案管理 接可以正常工作。 应急步骤 1.检查数据库错误日志,确认是否有如下报错信息: \---运行目录log 目录下,查看dm\_实例名\_年月.log 日志,是否有如下报错 main\_thread Reached the max session limit. 2.检查数据库当前会话数: \---disql或客户端 使用SYSDBA用户登录数据库,执行查看总会话数 select count(\*) from vsessions;
3.检查数据库配置文件dm.ini中MAX_SESSIONS参数
值,当前会话数与MAX_SESSIONS参数值是否接近。
Cat dm.ini|grep MAX_SESSION
4.如接近,修改数据库dm.ini中MAX_SESSIONS参数
值,规范值为500-2000。
5.与应用确认窗口后,重启数据库实例。
6.检查参数值是否生效:
—disql或客户端 使用SYSDBA用户登录数据库
select * from vdm\_ini where para\_name=’MAX\_SESSIONS’; 7- 数据库数据文件存储可用空间不足 告警指标 执行df -lh发现数据文件存储使用率高。 应急步骤 1.检查文件系统使用率,确认数据库文件系统使用率 是否很高; 恒丰银行办公类集中式数据库应急预案管理 2.清理达梦数据目录。检查是否有非数据文件,若有, 和运维人员沟通确认文件是否可以删除; 3.和项目相关负责人沟通处理方法。讨论是否要采取 以下方案:1.关闭表空间自动扩展;2.增加存储;3.应用清 理数据; 4.恢复正常后检查数据库,应急处置结束。 8-部分业务无法执行提交操作 告警指标 部分业务无法执行提交操作,部分业务报错。 使用disql或客户端执行如下语句,无法进行commit 提交操作。 create table t1(a1 int); insert into t1 values(1); commit; ---提交失败 应急步骤 1.确认数据库状态。 \---确认数据库进程正常 ps –ef|grep dmserver \---然后通过以下语句查询数据库状态: select instance\_name,status from vinstance; 2.检查文件系统使用率,文件系统写满的情况下,会 导致事务提交失败,若文件系统使用率100%,转到5.7数据 库数据文件存储可用空间不足处理。 恒丰银行办公类集中式数据库应急预案管理 3.查看磁盘空间使用率:df -lh。 4.看表空间占用情况,表空间占用100%的情况下,会 导致事务提交失败,若表空间使用率100%,转到5.1数据库 表空间使用率高处理。 select t1.NAME tablespace\_name, t2.FREE\_SIZE\*SF\_GET\_PAGE\_SIZE()/1024/1024||'M' free\_space, t2.TOTAL\_SIZE\*SF\_GET\_PAGE\_SIZE()/1024/1024||'M' total\_space , t2.FREE\_SIZE\*100/t2.total\_size "%FREE", round((t2.total\_size-t2.free\_size)\*100/t2.total\_size) "%USED", t2.path, t2.auto\_extend, t2.max\_size from vTABLESPACE t1,
VDATAFILE t2 where t1.ID=t2.GROUP\_ID order by "%FREE" desc ; 5.查看文件系统是否只读,文件系统只读的情况下, 会导致事务提交失败。 6.若以上检查无法定位问题,请通知数据库工程师处 理。 7.恢复正常后执行检查。 恒丰银行办公类集中式数据库应急预案管理 9- 数据库主机活动会话数高 告警指标 执行如下语句,发现数据库主机活动会话数高,超过最 高会话数配置的90%: select count(\*) from vsessions where state=‘ACTIVE’;
应急步骤
1.确认数据库状态;
—确认数据库进程正常。
ps –ef|grep dmserver
—然后通过以下语句查询数据库状态:
select instance_name,status$ from v$instance;
2.检查数据库当前会话,是否有运行中的异常SQL。可
以先查看所有会话来源,确认来源合法;
SELECT
SESS_ID
AS “会话 ID” ,
DECODE(STATE, ‘CREATE’, ‘创建’, ‘STARTUP’, ‘启动’, ‘IDLE’, '空闲

', ‘ACTIVE’, ‘活动’, ‘WAIT’, ‘等待’, ‘UNKNOWN’, ‘未知’) AS “会话状态” ,
CREATE_TIME
AS “会话创建时间” ,
TRX_ID
AS “事务 ID” ,
SQL_TEXT
AS “SQL” ,
USER_NAME
AS “当前用户” ,
CURR_SCH
AS “当前模式” ,
CLNT_TYPE
AS “连接类型” ,
DECODE(AUTO_CMT, ‘Y’, ‘是’, ‘N’, ‘否’)
AS “是否自动提交” ,
恒丰银行办公类集中式数据库应急预案管理
DECODE(DDL_AUTOCMT, ‘Y’, ‘是’, ‘N’, ‘否’)
AS “DDL 是否自动提交”,
APPNAME
AS “连接程序名” ,
CLNT_IP
AS “客户机 IP” ,
CLNT_HOST
AS “客户机名” ,
OSNAME
AS “客户机系统”
FROM
VSESSIONS; 3.查看当前锁阻塞,是否存在阻塞情况。与应用确认是 否可以终止异常锁头和异常会话; select tw.id as "事务ID" , tw.wait\_for\_id as "所等待的事务ID" , s.sess\_id as "会话ID" , ws.sess\_id as "所等待的会话ID", s.sql\_text as "所执行的sql" , ws.sql\_text as "所等待的sql" from vtrxwait tw
left join vsessionssontw.id=s.trx_idleftjoinvsessions s on tw.id=s.trx\_id left join vsessions ws
on
tw.wait_for_id=ws.trx_id;
4.终止异常会话;
SP_CLOSE_SESSION(); --根据 SESS_ID 杀掉会话
5.分析锁头会话SQL语句和运行中的异常SQL的执行
计划,看是否有优化空间;
–在异常sql前加explain执行,查看sql的执行计划
explain SQL_TEXT;
6.恢复正常后检查数据库是否还有过多的活动会话。
select count(*) from vsessions where state='ACTIVE'; 恒丰银行办公类集中式数据库应急预案管理 10- 数据库主机服务器重启后,数据库实例没有正常启动 告警指标 数据库主机服务器重启后,数据库实例没有正常启动。 执行ps -ef|grep dms无相关进程,且数据库服务为停止状 态。 应急步骤 1.检查数据库错误日志,如果主机重启后没有错误信 息; \--查看数据库是否有错误日志 tail -300f dm\_XXXXXX\_202211.log | grep ERROR \--查看数据库是否有被异常关闭的日志 tail -300f dm\_XXXXXX\_202211.log | grep FATAL 2.数据库启动; 3.启动完成后,收集DM数据库信息。 \---确认数据库进程正常。 ps –ef|grep dmserver \--查看日志是否有SYSTEM IS READY关键字,并切要注意查看到的关键字和启动时间匹配 tail -300f dm\_XXXXXX\_202211.log |grep 'SYSTEM IS READY' \---然后通过以下语句查询数据库状态: select instance\_name,status from v$instance;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论