DM8数据库性能问题分析

前言

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

一、操作系统

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分析表空间的 I/O 性能,可以采取以下步骤: 1. 监控表空间的 I/O 活动: - 使用数据库管理工具或命令行工具来监控表空间的 I/O 活动。 - 下面是一些常用的命令示例: - Oracle: ```sql SELECT * FROM v$filestat; SELECT * FROM v$tempstat; ``` - SQL Server: ```sql SELECT * FROM sys.dm_io_virtual_file_stats(NULL, NULL); ``` - MySQL: ```sql SHOW GLOBAL STATUS LIKE 'Innodb_data_reads'; SHOW GLOBAL STATUS LIKE 'Innodb_data_writes'; SHOW GLOBAL STATUS LIKE 'Innodb_data_read'; SHOW GLOBAL STATUS LIKE 'Innodb_data_written'; ``` 2. 分析表空间的 I/O 性能指标: - 查看表空间的读写次数、读写速率、平均响应时间等指标,以了解表空间的 I/O 负载情况。 - 对于 Oracle 和 SQL Server 数据库,可以使用其提供的性能视图或系统视图来获取这些指标。 - 对于 MySQL 数据库,可以使用 `SHOW GLOBAL STATUS` 命令来获取这些指标。 3. 检查表空间的文件布局: - 确保表空间的数据文件(data file)和临时文件(temp file)布局合理,并且分布均匀。 - 如果某个数据文件或临时文件的 I/O 活动较高,可能需要重新分配数据文件或调整文件大小,以平衡 I/O 负载。 4. 调整表空间的 I/O 参数: - 根据分析结果,可以考虑调整数据库的 I/O 相关参数,以优化表空间的性能。 - 例如,可以调整数据文件和临时文件的大小、调整 I/O 策略、增加磁盘缓存等。 请注意,以上步骤中的具体命令和操作可能会因数据库类型和版本而有所不同。在实际应用中,建议参考相关的文档和官方指南,以获取更准确和详细的命令和操作信息。此外,还可以使用数据库管理工具或第三方监控工具来实时监测表空间的 I/O 性能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值