达梦数据库性能诊断与调优是一个复杂的过程,需要综合考虑多个方面。以下是一些建议和步骤,供您参考:(下列建议与步骤来自AI生成的方法策略)
基于上述策略:达梦数据库性能诊断与调优可以从下面三大块来分析
数据库性能问题通常可从三个方面分析:操作系统(内存、CPU、I/O等)、实例(数据库架构、INI参数等)、SQL(性能、sql日志)
可以通过LINUX常用性能监控命令来分析:
1、top命令查看cpu使用率
2、iostat命令查看磁盘I/0使用情况
3、dstat工具查看磁盘I/0使用情况
4、free命令查看内存使用情况使用nmon工具监控系统一段时间的整体情况
5、perf top命令查看系统热点情况
分析:如果发现数据库主机的cpu、I/0、内存等使用率很高,往往说明数据库存在性能瓶颈。也可能是硬件本身存在问题,但这种可能性比较小,也容易排除
对于海量数据库分析业务可以使用MMP集群
对于高并发事务型业务可以由单机转换为读写分离集群
参数优化比较灵活,也依赖于服务器的配置
a、查询活动会话数
select count(*) from v$sessions where state='ACTIVE';
b、已执行超过多长时间的活动SQL
例子:查询超过3秒的sql:
select * from (
SELECT sess_id,
sql_text,
datediff(ss,last_send_time,sysdate) Y_EXETIME,
SF_GET_SESSION_SQL(SESS_ID) fullsql,
clnt_ip FROM V$SESSIONS
WHERE STATE = 'ACTIVE')
where Y_EXETIME>=3;
c、锁查询
select t2.name,
t1.*
from v$lock t1,
sysobjects t2
where t1.table_id=t2.id
and blocked=1;
d、阻塞查询
with locks as
( select o.name,
l.*,
s.sess_id,
s.sql_text,
s.clnt_ip,
s.last_send_time
from v$lock l,
sysobjects o,
v$sessions s
where l.table_id=o.id
and l.trx_id=s.trx_id
)
,
lock_tr as
( select trx_id wt_trxid,
row_idx blk_trxid
from locks
where blocked=1
)
,
res as
( select sysdate as stattime,
t1.name,
t1.sess_id as wt_sessid,
s.wt_trxid,
t2.sess_id as blk_sessid,
s.blk_trxid,
t2.clnt_ip,
SF_GET_SESSiON_SQL(t1.sess_id) as fulsql,
datediff(ss,t1.last_send_time,sysdate) as ss,
t1.sql_text as wt_sql
from lock_tr as s,
locks t1,
locks t2
where t1.ltype='0BJECT'
and t1.table_id<>0
and t2.ltype='OBJECT'
and t2.table_id<>0
and s.wt_trxid=t1.trx_id
and s.blk_trxid=t2.trx_id
)
select distinct wt_sql,clnt_ip,ss,wt_trxid,blk_trxid from res;
处理流程:生成日志-》日志入库-》分析SQL-》优化方案
SQL优化思路
对于高并发SQL:单个sql调到最快(索引解决)、优化应用来减少执行次数
对于一般并发SQL:使用索引、改写sql(避免索引失效无法命中,提前过滤、使用分析函数减少表扫描)
什么是执行计划:执行计划就是一个sql语句在数据库中执行过程的描述,使用explain+sql语句就可以看到sql执行计划,执行计划由若干个节点组成,每个节点由操作符+它的代价等信息组成(如CSCN2:[1,7999,1233],意思是该节点SCCN2全表扫描,代价估算是1ms,扫描的记录行数是7999行,输出的字节数1233个)
NSET:收集结果集
PRJT:投影
SLCT:选择
AAGR:简单聚集
FAGR:快速聚集
HAGR:HASH分组聚集
SAGR:流分组聚集
BLKUP:二次扫描
CSCN:全表扫描
索引扫描:SSEK 、CSEK、SSCN
NEST LOOP原理:
#两层嵌套循环结构,有驱动表和被驱动表之分。
选定一张表作为驱动表,遍历驱动表中的每一行,根据连接条件去匹配第二张表中的行。驱动表的行数就是循环的次数,这个很大程度影响了执行效率
需注意的问题:
#选择小表作为驱动表。统计信息尽量准确,保证优化器选对驱动表-大量的随机读。如果没有索引,随机读很致命,每次循环只能读一块,不能读多块。使用索引可以解决这个问题。
使用场景:
#驱动表有很好的过滤条件
#表连接条件能使用索引
#结果集比较小
概述:统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。比如,表的行数,块数,平均每行的大小,索引的高度、叶子节点数,索引字段的行数,不同值的大小等,都属于统计信息。
ps:待完善
想要了解更多:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台