赞
踩
性能诊断用于了解操作系统以及数据库的各项性能指标是否达到要求,以满足系统正常运行需要。通过性能诊断,可以更好地了解系统资源的使用情况、以及数据库的状态,提前避免由于性能不足引发的各种问题。性能诊断在数据库运维中具有极大的实用价值。
性能诊断包括以下内容:
性能诊断中会使用到的相关术语:
本文中所涉及内容适用于 DM7 及 DM8 版本数据库产品。
环境是承载数据库稳定运行的基础保障,在进行数据库性能优化之前,需要观察确认现场的环境信息。主要包括硬件信息、软件信息和其他信息。
硬件 | 硬件配置 | 运行情况 |
---|---|---|
CPU | cat/proc/cpuinfo | top\vmstat\sar |
内存 | cat/proc/meminfo | top\vmstat\free |
磁盘 | RAID | iostat |
网络 | ifconfig | ping\route\netstat |
分类 | 说明 |
---|---|
数据库版本 | SELECT * FROM V$VERSION; |
数据库架构 | 单机\主备\读写分离\MPP\DSC |
交易类型 | OLTP\OLAP\OLTP 与 OLAP 混合 |
配置参数 | 资源类参数\查询优化参数 |
数据库规模 | 库大小\大表\分区表\索引 |
关注的对象 | 触发器\大字段\物化视图\外部链接 |
会话数 | SELECT COUNT(*) FROM V$SESSIONS; |
事务数 | SELECT COUNT(*) FROM V$TRX; |
等待事件 | SELECT * FROM V$TRXWAIT; |
内存池 | SELECT * FROM V$MEM_POOL; |
热点 | 热点表\热点 SQL |
分类 | 说明 |
---|---|
硬件 | 是否有硬件更换\重启\升级 |
软件 | 是否有新业务上线\新模块适配 |
用户 | 是否有业务用户增加\业务访问时间调整\业务访问模块集中 |
系统资源诊断用于了解服务器的内存、CPU、磁盘 I/O 和网络的性能情况,系统资源诊断主要分为内存性能诊断、CPU 性能诊断、磁盘 I/O 性能诊断和网络性能诊断。
Linux 内核给每一个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的,这样进程就可以很方便地访问内存,即虚拟内存。本节介绍常见内存性能分析命令,以及内存性能分析方法。
1. top 命令
top 命令经常用来监控 Linux 系统 CPU、内存的使用情况,关于 top 命令的详细介绍请参考系统资源监控。
在某系统中输入 top 命令之后显示结果如下所示:
(1)第四行显示为系统内存状态,显示物理内存总量为 995748kb,使用的物理内存总量为 629136kb,空闲内存总量为 111316kb,用作内核缓存的内存量为 255296kb。
(2)第五行显示 swap 内存相关信息,交换区总量为 2097148kb,使用的交换区总量为 41224kb,空闲交换区总量为 2055924kb,用作缓冲的交换区总量为 208080kb。
2. vmstat 命令
vmstat 是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、IO 读写、CPU 活动等进行监视,在某系统中输入 vmstat 命令之后显示结果如下所示:
(1)memory 部分:切换到内存交换区的内存大小为 40968KB,当前空闲的物理内存大小是 68132KB,用于磁盘缓存的大小为 0KB,用于页面缓存的内存大小为 255896KB。
(2)swap 部分:每秒从交换分区读回到内存的大小为 1KB,每秒写入交换分区的大小为 26KB。
使用 vmstat 命令对内存性能进行分析:
[root@localhost dm8]# vmstat 1 5
##使用 vmstat 检测,每隔 1 秒刷新一次,共刷新 5 次。
在某系统中输入 vmstat 命令之后显示结果如下所示:
指标解读如下:
(1)swpd :如果 swap 的值不为 0,或者比较大,比如超过 100 MB ,但是 si 和 so 的值长期为 0,这种情况不会影响系统性能。
(2)free :空闲内存 (free) 很少或接近于 0 时,并不能认定为内存不够用,Linux 是抢占内存的 OS,还要结合 si 和 so;如果 free 很少,si 和 so 也很少(大多时候是 0),系统性能在这种情况下不会受到影响。
(3)cache :如果 cache 的值大的时候,说明 cache 处的文件数多,如果频繁访问到的文件都能被 cache,那么磁盘读 IO 的 bi 会非常小。
CPU 是计算机系统的大脑,其重要性不可置否。在性能优化的过程中,CPU 的性能指标是很重要的。本节主要介绍 CPU 性能分析命令,以及 CPU 性能分析方法。
1. top 命令
top 命令经常用来监控 Linux 系统 CPU、内存的使用情况,关于 top 命令的详细介绍请参考系统资源监控。
在某系统中输入 top 命令后显示结果如下所示:
第三行显示 CPU 相关信息,当前用户空间占用 CPU 百分比为 0.0%;内核空间占用 CPU 百分比为 0.0%,用户进程空间内改变过优先级的进程占用 CPU 百分比为 0.0%,空闲 CPU 百分比为 100.0%,等待输入输出的 CPU 时间百分比为 0.0%,CPU 服务于硬件中断所耗费的时间总额为 0.0%,CPU 服务软中断所耗费的时间总额为 0.0%,虚拟机被 hypervisor 偷去的 CPU 时间为 0.0。
2. vmstat 命令
vmstat 是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、IO 读写、CPU 活动等进行监视,在某系统中输入 vmstat 命令之后显示结果如下所示:
CPU 以百分比显示,用户进程执行时间 2%,系统进程执行时间 1% ,空闲时间 97% ,等待 IO 时间 0%,被偷走的 CPU 时间所占百分比 0%。us + sy + id + wa =100%,近似为 100%。
使用 vmstat 命令对 CPU 性能进行分析:
[root@localhost dm8]# vmstat 1 5
##使用 vmstat 检测,每隔 1 秒刷新一次,共刷新 5 次。
在某系统中输入 vmstat 命令之后显示结果如下所示:
指标解读如下:
1. Procs
如果 r 连续大于 CPU 的个数,甚至是 CPU 个数的几倍;b 也持续有值,甚至是 CPU 的 2~3 倍,并且 id 也持续小于 50%,wa 也比较小,这就表明 CPU 负荷很严重。
2. SYSTEM
in 和 cs 这两个值越大,由内核消耗的 CPU 时间会越大。
3. CPU
除此之外,还可以用以下方法分析 CPU 性能:
sar -u 1 5
、sar -q 1 5
。top
、ps -auxw|more
。strace
。在进行系统资源诊断时,除了需要分析系统 CPU 和内存的状况外,有时需要更进一步了解磁盘 I/O 的使用情况。本节主要介绍常用 I/O 性能分析命令和 I/O 性能分析方法。
1. iostat 命令
iostat 是 Linux 最常见的磁盘 I/O 监控工具。基本用法如下:
[root@localhost dm8]# iostat -d -x -k 1 5
参数含义:
在某系统中输入此命令之后显示结果如下所示:
结果解读:
2. iotop 命令
iotop 是一个用 python 编写的类似 top 界面的磁盘 I/O 监控工具。使用前需要先安装 iotop。安装命令如下:
yum install -y iotop
在某系统中输入 iotop 命令之后显示结果如下所示:
结果解读:
使用 vmstat 命令对磁盘 I/O 性能进行分析:
[root@localhost dm8]# vmstat 1 5
##使用 vmstat 检测,每隔 1 秒刷新一次,共刷新 5 次。
在某系统中输入 vmstat 命令之后显示结果如下所示:
如果 b 的值为 2~3 倍 CPU 数量,bi 和 bo 的值很大(有时 bi 和 bo 值很小,但 in 和 cs 很大,也会引起磁盘 IO 负载重),wa 的值持续很高,如高于 40,id 也持续高于 70,这些现象都表明系统的 IO 可能出现性能问题。
可以进一步通过 iostat 命令分析,如下所示:
[root@localhost dm8]# iostat -x 1 5
##使用 iostat 检测,每隔 1 秒刷新一次,共刷新 5 次。
在某系统中输入此命令之后显示结果如下所示:
结果分析:
通过 iostat 了解到如果磁盘 I/O 出现性能瓶颈,可以借助 pidstat ,定位出导致瓶颈的进程,分析进程的 I/O 行为,结合应用程序的原理,分析这些 I/O 的来源。
网络性能对数据库也有很大的影响,数据库服务器和 Web 服务器之间会进行网络传输,网络延迟和带宽大小都是影响因素。本节主要介绍网络性能诊断相关命令和网络性能分析方法。
1. ifconfig 命令
ifconfig 是 linux 中用于显示或配置网络设备(网络接口卡)的命令。在某系统中输入此命令后显示结果如下所示:
在上图中以 ens33 网卡为例解释其中部分信息的含义。第一行中的 “UP” 表示接口已启用;“RUNNING” 表示接口在工作中;“mtu 1500” 表示最大传输单元为 1500 字节。第二行中的 “inet” 表示 ip 地址。
利用 ifconfig 命令可以对网络信息有一个基本的了解,在此基础上可以利用 ethtool 命令查询网络传输速率。
2. ethtool 命令
使用 ethtool 命令可以查看指定网口对应的网络传输速率。
ethtool ens33
在某系统中输入此命令之后显示结果如下所示:
结果解读:
使用 ping 命令测试网络的连通性和响应时间。
ping 发送 ICMP echo 数据包来探测网络的连通性,除了能直观地看出网络的连通状况外,还能获得本次连接的往返时间(RTT 时间),丢包情况,以及访问的域名所对应的 IP 地址(使用 DNS 域名解析)。
ping -c 4 baidu.com
##参数 -c 表示指定发包数。
在某系统中输入此命令之后显示结果如下所示:
解析到 baidu 的一台服务器 IP 地址为 39.156.66.10。RTT 时间的最小、平均、最大和算术平均差分别是 46.588ms、57.268ms、73.026ms 和 10.161ms。
使用 sar 命令测试网络带宽。
sar 命令使用 -n 选项可以汇报网络相关信息。
sar -n DEV 1 3
在某系统中输入此命令之后显示结果如下所示:
在上图中可以看到每秒钟接收到的包数目为 1,每秒钟发送出去的包数目为 1,每秒钟接收到的字节数为 0.06,每秒钟发送出去的字节数为 0.19,每秒钟接收到的压缩包数目为 0,每秒钟接收到的多播包的包数目为 0。通过这些参数可以对网络带宽有更好的了解。
利用动态视图可以便捷查询数据库相关信息,并定位数据库性能问题。以下介绍 4 种动态性能视图的诊断方法,分别是查询活动会话数、查询耗时超过 2 秒的 SQL、查询锁和查询阻塞。
查询活动会话数,活动会话数量达到一定程度后会对数据库性能造成影响。
SELECT COUNT(*) 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;
查询锁。
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, TID 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;
跟踪日志文件是一个纯文本文件,以 ‘dmsql_实例名_日期_时间命名’,默认生成在 DM 安装目录的 log 子目录下。跟踪日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息、执行时间等。跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态进行分析。跟踪日志配置方式如下:
配置 dm.ini 文件,设置 SVR_LOG = 1
以启用 sqllog.ini 配置,该参数为动态参数,可通过调用数据库函数直接修改。
SP_SET_PARA_VALUE(1,'SVR_LOG',1);
配置数据文件目录下的 sqllog.ini 文件。
[dmdba@localhost DAMENG]$ cat sqllog.ini
BUF_TOTAL_SIZE = 10240 #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE = 1024 #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT = 6 #SQLs Log buffer keeped count(1~100)
[SLOG_ALL]
FILE_PATH = ../log
PART_STOR = 0
SWITCH_MODE = 1
SWITCH_LIMIT = 100000
ASYNC_FLUSH = 0
FILE_NUM = 200
ITEMS = 0
SQL_TRACE_MASK = 2:3:23:24:25
MIN_EXEC_TIME = 0
USER_MODE = 0
USERS =
注意
为避免记录 SQL log 对服务器产生较大的影响,可以配置异步日志刷新(参数 ASYNC_FLUSH 设置为1)。
如果对 sqllog.ini 进行了修改,可通过调用以下函数即时生效,无需重启数据库。
SP_REFRESH_SVR_LOG_CONFIG();
sqllog.ini 文件配置成功后可在 dmsql 指定目录下生成 dmsql 开头的 log 日志文件。日志内容如下所示:
上图中选中记录执行 SQL 语句如下所示,SQL 语句执行时间为 33.815 秒。
select * from t1 left join t2 on t1.c1=t2.c1 and t1.c1=999933;
可以通过正则表达式在 dmsql 日志文件中查找执行时间超过一定阈值的 SQL 语句。例如:查找执行时间超过 10 秒的 SQL 语句。
[1-9][0-9][0-9][0-9][0-9](ms)
如需进行更为系统全面的分析,可使用 DMLOG 工具对 SQL 进行分类汇总。
系统为所有重要统计信息和负载信息执行一次快照,并将这些快照存储在 AWR (自动工作集负载信息库)中。AWR 报告的创建方式如下:
--启用系统包和 AWR 包:
CALL SP_INIT_AWR_SYS(1);
CALL SP_CREATE_SYSTEM_PACKAGES(1);
--查询 AWR 快照:
SELECT * FROM SYS.WRM$_SNAPSHOT;
--设置快照间隔,如果不设置快照间隔,手动执行快照后 SYS.WRM$_SNAPSHOT 视图中没有记录:
CALL DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(50);
--在两个时间点分别手动创建快照,或者等待系统自动生成。
--10:00时创建第一快照:
CALL DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
--30分钟后再创建一个,10:30:
CALL DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
--查询 AWR 快照:
SELECT * FROM SYS.WRM$_SNAPSHOT;
--创建AWR报告,SYS.AWR_REPORT_HTML(快照ID1,快照ID2,'AWR报告存放路径','AWR报告名称.HTLM'):
SYS.AWR_REPORT_HTML(1,2,'C:\','AWR1.HTML');
达梦提供各种接口日志,包括 DPI/DCI 日志、ODBC 日志和 JDBC 日志。通过这些日志可以查看报错信息,更好地对问题进行诊断,排查错误。接口日志的开启方法请参考实例状态监控-接口日志。
在接口的 URL 连接串中,可以添加日志相关属性。下表所展示的 JDBC 连接串日志相关属性。更多接口连接串属性请参考达梦安装目录下的 doc 文件夹的《DM8 程序员手册》。
属性 | 说明 | 是否必须设置 |
---|---|---|
logDir | 日志等其他一些 JDBC 过程文件生成目录,默认为 jvm 当前工作目录; | 否 |
logLevel | 生成日志的级别,日志按从低到高依次如下(off:不记录;error:只记录错误日志;warn:记录警告信息;sql:记录 sql 执行信息;info:记录全部执行信息;all:记录全部),高级别同时记录低级别的信息;默认 off; | 否 |
logFlushFreq | 日志刷盘频率;单位 s,有效值范围 0~2147483647;默认 60; | 否 |
statEnable | 是否启用状态监控;取值 1/0 或 true/false;默认 false; | 否 |
statDir | 状态监控信息以文本文件形式输出的目录,默认为 jvm 当前工作目录; | 否 |
statFlushFreq | 状态监控统计信息写文件刷盘频率;单位 s,有效值范围 0~2147483647;0 表示不写文件;默认 10; | 否 |
statSlowSqlCount | 统计慢 sql top 行数;有效值范围 0~1000;默认 100; | 否 |
statHighFreqSqlCount | 统计高频 sql top 行数;有效值范围 0~1000;默认 100; | 否 |
在 jdbc 日志中可以查看接口连接信息。若接口日志中出现异常,可联系相关技术人员进行错误分析。
若以上内容无法解决您的问题,可以在 达梦技术社区 提问交流。
links:
https://eco.dameng.com/document/dm/zh-cn/ops/performance-diagnosis.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。