目录
数据库常用性能分析方法... 3
一、服务器监控... 3
1、cpu监控... 3
2、内存... 3
3、swap内存... 3
4、磁盘... 4
5、网络监测... 4
二、数据库实例监控... 6
1、v$sessions. 6
2、慢sql、阻塞、锁... 7
3、内存监控... 10
4、monitor监控工具使用及开启sql日志跟踪... 10
5、AWR报告生成及使用... 13
数据库常用性能分析方法
一、服务器监控
1、cpu监控
top
2、内存
top
或
free -m
3、swap内存
生产系统尽量调低或者不使用swap内存,尽量使用系统内存提高性能
cat /proc/sys/vm/swappiness
vim /etc/sysctl.conf
vm.swappiness=10
sysctl -p
物理内存使用到90%左右开始使用swap内存
4、磁盘
df -h
iostat -xm
iostat -d -x -k 1 3
dd if=/dev/zero of=test bs=8k count=64k oflag=dsync
vmstat
vmstat 1 3
5、网络监测
nmon
或
dem
ethtool ens33
使用 sar 命令测试网络带宽。
sar 命令使用 -n 选项可以汇报网络相关信息
sar -n DEV 1 3
nmon需要安装
安装方法:
上传安装包
wget https://nchc.dl.sourceforge.net/project/nmon/nmon16h_helpsystems_v2.tar.gz
解压安装包
mkdir nmon
mv nmon16h_helpsystems_v2.tar.gz nmon
tar -zxvf nmon16h_helpsystems_v2.tar.gz
读写赋权
只赋予对应linux系统版本(本次要使用的)授权即可
chmod 777 nmon_x86_64_centos7
重命名
mv nmon_x86_64_centos7 nmon
启动nmon
./nmon
需查看直接按键即可
nmon在任何地方都能运行
mv nmon /usr/bin/nmon
命令参数:
c : 显示cpu利用率数据
m:显示内存数据
n:显示网络信息
d:显示磁盘信息
t:系统进程信息
h:查看帮助信息
q:退出Nmon界面
二、数据库实例监控
1、v$sessions
select count(*) from v$sessions;
操作系统命令查询会话数
netstat -apn|grep dmserver|grep ESTABLISHED|wc -l
2、慢sql、阻塞、锁
详见阻塞和锁
v$session
v$lock
v$trxwait
释放会话
sp_close_session(sess_id);
1)查询阻塞锁
select * from v$lock where blocked=1;
2)查询会话
select * from v$sessions;
3)查询事务及事务等待
select * from v$trx;
select * from v$trxwait;
综合查询阻塞(死锁)
select sysdate,datediff(minute,s.last_send_time,sysdate) ZSDate_Mi,
'阻塞信息',s.sess_id SId,t.wait_for_id ZSTId,s.sql_text ZSSql,s.user_name ZSUser,s.clnt_host,s.appname,s.clnt_ip,
'被阻塞信息',s2.sess_id SId,t.id BZSId,s2.sql_text BZSSql,s2.user_name BZSUser,s2.clnt_host,s2.appname,s2.clnt_ip
from v$trxwait t,v$sessions s,v$sessions s2 where t.wait_for_id=s.trx_id and t.id=s2.trx_id;
4)死锁查询
select * from v$deadlock_history;
5)查询完整的死锁事务
select d.sess_id,d.trx_id,wm_concat(s.top_sql_text),happen_time,start_time,time_used
from v$sql_history s,v$deadlock_history d where s.trx_id=d.trx_id and d.sess_id=s.sess_id and d.trx_id=27694;
这里最好指定事务id,否则之前执行的事务都拼接在一起了。
6)死锁和阻塞记录信息(仅记录发生次数和耗时等)可以直接查询:v$system_event;
select * from v$system_event order by TIME_WAITED desc;
7)慢sql查询
select top 10 * from v$system_long_exec_sqls order by exec_time desc;
查询出当前会话活动的慢sql
select datediff(ss,last_recv_time,sysdate),sess_id,sql_text,SF_GET_SESSION_SQL(SESS_ID) fullsql,clnt_ip,thrd_id
from v$sessions
where state='ACTIVE'
order by 1 desc;
查询已执行超过1秒的活动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>=1;
查询最近1000条执行时间较长的SQL语句
SELECT * FROM V$LONG_EXEC_SQLS;
查询服务器启动以来执行时间最长的20条SQL语句
SELECT * FROM V$SYSTEM_LONG_EXEC_SQLS;
3、内存监控
v$bufferpool
v$mem_pool
1)查看数据库实际使用内存
select sum(mem)/1024.0 as mem_used_G from(
select sum(total_size)/1024/1024.0 mem from v$mem_pool
union all
select sum(n_pages-free)*page/1024/1024.0 from v$bufferpool);
2)查看内存占用较大的sql
v$sql_stat
v$sql_stat_history
需要开启ENABLE_MONITOR参数,默认是开启的
select * from v$sql_stat order by max_mem_used;
4、monitor监控工具使用及开启sql日志跟踪
生成sql日志文件,没开启sql相关视图中也会有相应的sql记录,貌似只是没有日志输出。
select sf_get_para_value(1,'SVR_LOG');
未开启sql日志跟踪,监控工具monitor依然可以监控到sql相应的信息。
使用monitor实时监测sql执行时间
SQL语句统计选择显示执行最长时间的SQL还是执行频率最高的SQL
选择具体sql查看执行计划
SQL日志的开启和关闭
开启:SP_SET_PARA_VALUE(1,'SVR_LOG',1);
关闭:SP_SET_PARA_VALUE(1,'SVR_LOG',0);
只有dm.ini文件中参数SVR_LOG=1即开启sql跟踪时,sqllog.ini文件才有用。
sqllog.ini文件修改后只需要调用sp_refresh_svr_log_config()参数就会生效。
ASYNC_FLUSH=1 打开 SQL 日志异步刷盘提高系统性能。
如需进行更为系统全面的分析,可使用 DMLOG工具 对SQL进行分类汇总或直接查看awr报告
5、AWR报告生成及使用
1)启用AWR包和系统包
call sp_init_awr_sys(1);
call sp_create_system_packages(1);
2)查询AWR快照:不创建系统包这里查不到快照
SELECT * FROM SYS.WRM$_SNAPSHOT;
3)设置快照间隔,貌似若不设置快照间隔,手动执行快照后 SYS.WRM$_SNAPSHOT 视图中没有记录。单位分钟。
CALL DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(60);
4)手动执行生成快照
CALL DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
5)查询AWR快照
SELECT * FROM SYS.WRM$_SNAPSHOT;
6)根据两个快照对比生成AWR报告
SYS.AWR_REPORT_HTML(快照ID1,快照ID2,'AWR报告存放路径','AWR报告名称.HTLM'):
SYS.AWR_REPORT_HTML(5,6,'/dm/data/awr','AWR2.HTML');
下载到本地后查看慢sql等分析性能。