现象描述
执行如下语句,查看数据库服务进程,发现数据库主机CPU的us%使用率高。
top -p 数据库服务进程PID
处理步骤
1.确认数据库状态:
---确认数据库进程正常。
ps –ef |grep dmserver
---然后通过以下语句查询数据库状态:
select instance_name,status$ from v$instance;
---确认无等待事务
select * from v$trxwait;
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
v$sessions
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
V$SESSIONS
WHERE
STATE = 'ACTIVE'
)
WHERE
Y_EXETIME >= 2;--执行时间超2s,可以自定义该时间
5.终止异常会话:
在数据库里面执行SQL语句:sp_close_session(sess_id);
6.分析SQL执行计划,看是否有优化空间。将优化建议反馈应用、项目组进行紧急处理。
7. pstack pidof dmserver
>> ss.log
8.观察数据库活动会话是否正常。
必要前提
服务器操作系统中有perf命令
处理步骤
先要给出sys%占比高的例子,比如top中sys%超过多少认为sys占比高了。(例如:sys%使用率超过us%),给出截图说明,然后确认后才是per分析。
使用perf命令查看系统热点函数,将命令输出结果反馈给达梦数据库工程师,perf输出结果举例如下:
[root@DB1 ] perf top
现象描述
整体业务速度慢,但执行“top -p 数据库服务进程PID”,发现数据库主机CPU使用率不高。
处理步骤
1.确认数据库状态:
---确认数据库进程正常:
ps –ef|grep dmserver
---然后通过以下语句查询数据库状态:
select instance_name,status$ from v$instance;
--确认是否无等待事务,无查询结果继续下面步骤
select * from v$trxwait;
2.检查存储读写性能,检查网络传输速度。以下命令供参考:
dd if=/dev/zero of=/home/test bs=32k count=20k 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
v$sessions
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
V$SESSIONS
WHERE
STATE = 'ACTIVE'
)
WHERE
Y_EXETIME >= 2;--执行时间超2s,可以自定义该时间
4.终止异常会话:
在数据库里面执行SQL语句:sp_close_session(sess_id);
5.分析SQL执行计划,看是否有优化空间。将优化建议反馈应用、项目组进行紧急处理。
6.pstack pidof dmserver
>> ss.log
7.观察数据库活动会话是否正常。
文章
阅读量
获赞