最近一个客户突然反馈说,系统操作卡和慢,身为一个经验丰富的程序员,排查了下发现,大量的update慢,而且是一个20w的表根据主键更新的,数据库服务器发现大量io写入,这个客户因为一些厂商的原因开启了oracle的归档日志,一天归档日志量差不多有80G,身为一个资深程序员,,,,我不是dba啊,oracle这么庞大而精细的数据库系统,,,,我不会啊。客户天天催领导,实在没办法了,只能我继续硬着头皮上。
1. oracle性能分析工具
oracle 有三个性能分析工具,
awr:Automatic Workload Repository AWR是Oracle 10g中的一个新特性,类似于10g以前的statspack.不过在使用上要比statspack简单,提供的性能指标要比statspack多很多,能更好的帮助DBA来发现数据库的性能瓶颈。
ash:Active Session History ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成。
addm:Automatic Database Diagnostic Monitor AWR 是Oracle内部的一个顾问系统,能够自动的完成最数据库的一些优化的建议,给出SQL的优化,索引的创建,统计量的收集等建议。
由于本人不是专业dba,只是一个搬砖程序员,于是只能不管有没有用三个全上,然后发现awr和ash报告,有点专业,需要有一定经验能看懂,addm报告才是程序员的需要的东西,它会说出那些sql占用资源多,至于怎么优化 sql都是程序员自己写的肯定能优化。果不其然在addm报告里面找到一个大量update的语句,这个表总量 270w条数据,一天更新量达150w,我TM,,,,谁写的垃圾代码。其实这个问题其实细心点找下每个服务的日志就能看出来,但是服务众多,而且这个服务还是一个小众服务,没往上面想结果,,,,,。
addm生成报告
找一个合适的目录打开 cmd或者命令行
使用sqlplus登录oracle
sqlplus / as sysdba
输入生成报告sql
@?/rdbms/admin/addmrpt.sql
begin_snap 的值
可以如图,输入起始的时间点 这里输入27966
end_snap的值,这里输入27967
最后输入 report_name 就是报告文件的名称 这里输入 2024-07-04_8-9-addm
报告位置,生成的日志文件在你执行命令行的文件夹。
将LST 后缀改为 html 即可查看报告 ,复制到文本工具,换行整理后,就行了。
awr生成报告
顺便写一下awr报告日志
在一个目录下执行命令
sqlplus / as sysdba
@?/rdbms/admin/awrrpt.sql
输入报告格式 直接回车,默认是html
输入天数,就是看下最近几天,这里输入3
输入开始节点和addm一样
输入结束节点和addm一样
输入报告名称
ash报告
@?/rdbms/admin/ashrpt
输入报告格式 直接回车,默认是html
输入天数,就是看下最近几天,这里输入1
输入开始节点和addm一样
输入结束节点和addm一样
评论区