3.1 数据库整体响应慢问题排查
1. 排查硬件性能
如果数据库长时间出现响应慢的问题,有可能会是IO遇到瓶颈,可以通过操作系统top命令查看,查看wi%的使用大小。同时,可以使用io_test小程序进行简易测试,改程序位于达梦安装目录下tools目录下,使用方法:
./io_test 1 0 8192 /dbdata/testfiles
参数说明: 1:一个线程 0:不停地写
8192:每次顺序写的字节数 /dbdata/testfiles:目的文件 返回结果如下:
db01:/dmdb/dm/tools # ./io_test 1 0 8192 /dbdata/test20131213 delete file failed! [Thread_0] running...... count start...... count end......
file offset in 10 s: 280.492188 MB [start at 0X118BE000, end at 0X2313C000] 一般阵列上10秒钟会写200MB以上,但是IP san的存储大概在100MB到200MB之间。
2.排查数据库问题
root用户登录到数据库服务器上,查看dmserver进程的CPU,一般情况下,有一条执行耗时长的SQL,CPU使用率会上升100%(服务器多核,上限CPU个数*100%),如果CPU使用率很高说明存在执行速度慢的SQL。
查询执行性能差的语句:
使用SYSDBA登录到数据库中,执行如下SQL查询执行效率差的SQL: Select cpu_time_call,login_name,app_name,sql_text from v$session where cpu_time_call>0; 其中:
Cpu_time_call:当前连接正在执行的SQL已经执行的时间,单位:毫秒 Login_name:该连接的登录名 App_name:当前连接的程序名称 Sql_text:当前连接正在执行的SQL
根据查询出的结果集,确定出执行速度慢的SQL。
3.2部分SQL语句执行效率差
数据库中出现部分语句执行效率慢的问题,需要针对具体的SQL语句进行优化,找出执行效率慢的语句的方法同上面的方法,查看v$session动态视图中cpu_time_call耗时长的语句。
有时,还会出现数据库中SQL语句执行正常,但是部分表无法全表查询的问题。该问题,一般是由于相关的表可能存在没有提交的事务,导致全表查询无法返回结果。针对此类问题可以通过如下的方法进行查询:
selecta.saddr,a.cpu_time_call,a.app_name,a.sql_text fromsystem.sysdba.v$sessiona,system.sysdba.v$lock b wherea.trx_id=b.trx_id;
反复执行上述语句,如果结果集中相同内容长时间存在,就可能相关的数据表出现了未提交的事务。如果无法查到未提交的程序,可以选择使用dm_close_connect存储过程主动断开数据库连接,使用方法:
Select dm_close_connect(‘SADDR’);
其中的参数SADDR取自上述查询出来的SADDR字段。
一三区同步问题排查
一三区同步功能中,一区dmserver服务会将接收到的相关操作先记录入缓
存文件中,缓存文件存储在/dbbak/asyn_send中,三区asyn_server进程接收一区发送的文件,三区缓存文件存放在/dbbak/asyn_recv中。当发现一三区同步不正常时,通过如下的方法检查:
1. 查看一区/dbbak/asyn_send目录文件个数,正常情况下只会存在一个log文
件
2. 在一区登录到数据库中,执行如下SQL,查看一三区同步速度:
hd1103:/dmdb/dm/bin # LANG=zh_CN hd1103:/dmdb/dm/bin # ./isql SYSDBA/SYSDBA isql V6.0.2.79-Build(2012.12.18) login success SQL>SELECT ASYN_GET_FLOW(10); SELECT ASYN_GET_FLOW(10); ASYN_GET_FLOW(10) 1 在10秒内读了7742464字节,平均每秒756K, 在10秒内写了7741440字节,平均每秒756K 1 rows got
返回的结果中,读的速度是向三区传输的速度,写的速度是在本地缓存的速
度,理论上读的速度应该大于登录写的速度。
1. 查看一区数据库系统日志/dmdb/dm/log/dm_201305.log(以年月结尾),如果出现信息:
can not connect asyn server(30.10.39.15:12343) 说明隔离装置不通,需要检查网络。
2. 也可以在三区查看同步速度,在/dmdb/dm/bin目录下执行 ./asyn_serverenable_show_net_flow
执行完毕后,在/dmdb/dm/asyn_log/asyn_server_20130513.log目录中会记录如下信息:
hd3016:/dmdb/dm/asyn_log # tail -f asyn_server_20130513.log 2013-05-13 20:02:37 1159063872 10秒钟传输了695个数据包,共2389K(2.333750M)的数据,平均每秒238.9760K(0.233375M) 2013-05-13 20:02:47 1159063872 10秒钟传输了837个数据包,共7770K(7.588285M)的数据,平均每秒777.0404K(0.758829M)