DM8数据库性能问题分析

  • Post author:
  • Post category:其他




前言

遇到数据库性能问题,一般从以下几个方面分析



一、操作系统

在操作系统层面主要从以下几个方面入手



1. cpu

可使用top命令查看cpu使用率

这里主要查看DMSERVER 的CPU使用情况

在这里插入图片描述

另一方面看USR/SYS的使用率,如果比较高的话也需要注意一下



2.磁盘I/O

使用iostat命令查看磁盘I/O使用情况

在这里插入图片描述

我们需要关注util%,如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈,这个时候需要关注一下对应的rkB/s和wkB/s,在200M左右最好,如果太低可能达不到数据盘的要求。


提示:%util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比

也可以使用dstat工具,更直观,可以收集CPU/IO/NET信息,但它的弊端是不能区分设备

在这里插入图片描述



3.内存

使用free命令查看内存使用情况

free -m

在这里插入图片描述

关注服务器剩余可用内存(free列),另外还需要关注磁盘缓存(buff/cache 列)



4.nmon

使用nmon工具监控系统一段时间的整体情况

输入c代表cpu,m代表Memory,d代表磁盘io,n代表network,可以全部显示

在这里插入图片描述

打印nmon结果集

nmon -s 2  -c 300 -F xxx.nmon


注:每2秒采集一次,总共采集300次



5.perf top

使用perf top命令查看系统热点情况

perf top会生成函数调用热力图,来判断哪些函数占用大量的cpu时间

[root@localhost ~]# perf top -e cpu-clock

在这里插入图片描述


分析:如果发现数据库主机的cpu、I/O、内存等使用率很高,往往说明数据库存在性能瓶颈。也可能是硬件本身存在问题,但这种可能性比较小,也容易排除




二、实例



1.数据库架构

确认数据库架构是否最优



2.INI参数优化

配置对应INI优化参数



3.数据库会话监控

可使用下面的sql监控数据库状态

--查询活动会话数
select count(*) from v$sessions where state='ACTIVE';
--已执行超过2秒的活动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>=2;
--锁查询
select o.name,l.* from v$lock l,sysobjects o where l.table_id=o.id and blocked=1
--阻塞查询
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 stattime,t1.name,t1.sess_id wt_sessid,s.wt_trxid,
     t2.sess_id blk_sessid,s.blk_trxid,t2.clnt_ip,SF_GET_SESSION_SQL(t1.sess_id) fulsql,
     datediff(ss,t1.last_send_time,sysdate) ss,t1.sql_text wt_sql  from lock_tr s,locks t1,locks t2
    where t1.ltype='OBJECT'  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



1.生成sqllog

开启sql日志功能

--sqllog.ini 配置示例  

[SLOG_ALL]
    FILE_PATH    = ..\log
    PART_STOR    = 0
    SWITCH_MODE  = 2
    SWITCH_LIMIT   = 512
    ASYNC_FLUSH   = 1
    FILE_NUM = 4
    ITEMS    = 0 
    SQL_TRACE_MASK  =  2:3:22:25:28 
    MIN_EXEC_TIME = 100 
    USER_MODE   = 0 
    USERS =
    



2.sql汇总分析

使用日志转换工具生成sql汇总



3.确定目标sql

对于高并发sql,思路是单个SQL调到最快以及优化应用,减少执行次数

对于一般并发sql,思路是使用索引优化,改写sql



4.sql性能分析工具

ET是DM自带的分析工具,能统计SQL每个操作符的时间花费,从而定位到有性能问题的操作,指导用户去优化



总结

以上就是dm数据库性能优化思路

达梦技术社区:https://eco.dameng.com



版权声明:本文为qq_44236935原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。