为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:kylin v10
【CPU】:arm
【问题描述】*:有个小程序,每5分钟往达梦的一个表里面写入一批数据的
这个小程序运行的时候CPU长期就是200%以上,发现只要dmdba这个进程的CPU上去了,查询速度就很慢,16核,32G内存,CPU200%也就用了双核,应该是不会导致这个问题的,达梦数据库版本和key都没有做限制。
同步脚本是每十分钟执行一次 一次会往数据库大概10张表里写入数据,数据总量大概在1500条左右。而且这个程序停止之后数据库得重启才能降低cpu的使用率,否则数据库的cpu使用率一直在200上下不来
1.长期同步数据的话,涉及的表的统计信息可能不准,是否定期更新统计信息呢
2.根据目前提供的信息建议开启sql日志,分析是否存在慢sql。
要看下你程序脚本里面写数据是几个SQL,每个SQL会占用1个CPU线程,如果SQL执行时间长,就会一直占用100%。可以在执行同步的时候,查下数据库正在执行的语句时间。
查询语句:
select datediff(s, last_recv_time, sysdate) exectime,sess_id,
user_name,
clnt_ip,
clnt_ver,
appname,
dbms_lob.SUBSTR(sf_get_session_sql(sess_id)) sql_txt
from v$sessions
where state = ‘ACTIVE’
order by exectime desc
;
另外,虽然可能程序停止了,但是数据库里面的SQL还是在一直执行的,也可以通过上面的语句查询。如果需要释放的话,可以kill对应的会话。
主要原因可能还是在SQL语句执行效率上面。
cpu使用率高可能是执行的sql耗时太长导致,可以尝试优化sql