数据库优化方法论
内容
小余买鱼系列故事
买鱼买出方法论
方法论应用案例
总结
两大法宝:意识和技能
小余思考自己买鱼具体经历了哪些环节;揣摩最长时间耗在哪里;
了解楼下是否有鱼;判断银行排队取钱能否避免;探索要去某地买鱼
是否有近路 。。。。
上述部分和专业技术能力无关,我们将其归纳为意识类。
小余买鱼过程中曾经骑自行车去、也曾开车去。
然而无论是开车还是骑自行车,都是必须训练学习方可掌握,我们
将其归纳为技能类。
两大法宝:意识和技能
生活中的优化就是意识和技能的结合,两者都非常重要。
首先说技能,掌握技能的重要性毋庸置疑,比如要到很远的沃尔玛
买鱼,你既无开车的技能也没骑车的本领,那只能靠走路到达目的地,
那估计到达时店铺也打烊了。
接下来谈意识,生活中有不少场景甚至是仅靠意识而未使用特定技
能最终解决问题的。比如小余直接去楼下买到鱼了,还需要考虑会不
会骑车吗?再比如小余让妈妈改做水煮牛肉了,还需要掌握开车的本
领吗?
方法论应用案例
某电信营运商生产系统出现故障,短信平台产生大量积压,
出现不少客户投诉。
维护人员跟踪发现,原因是后台短信平台进程调用数据库
中某个过程包,该过程包原先执行返回结果给后台仅需10秒不
到,现在不知是何种原因过程包返回时间居然长达1分钟。所以
导致短信后台程序处理缓慢许多,最终造成短信积压。
情况紧急,需要立即着手调查,该怎么处理呢?
诊断
•用10046 trace 工具开始跟踪
alter session set events '10046 trace name context forever,level 12';
•执行你的数据库包
exec pkg_test(‘abc’);
•执行包完毕后结束跟踪
alter session set events '10046 trace name context off';
•10046 trace 工具跟踪完毕后会输出分析结果,类似如下:
E:\admin\ora10\udump\ora10_ora_4832.trc
•可格式化后进行分析,类似如下:
tkprof E:\admin\ora10\udump\ora10_ora_4832.trc d:\10046.txt sys=no
sort=prsela,exeela,fchela
•然后分析10046.txt的文件,这里响应时间从大到小展现该包所有SQL语句,
即可有如下收获
1. 该过程包总共执行了多少SQL语句,具体内容是什么,分别开销了多少时长
2. 哪些是开销时长最长的语句。(由于有排序过,所以最长的一眼可看出,
在最前端)
咦,这和《小余买鱼1》中的诊断方法有差别吗?
还真是过程细化和找细化项主要矛盾两个动作啊。
接着分析10046.txt文件,发现原来慢的SQL是类似如下2条简单的
SQL,分别占用30秒和20秒,其他所有SQL单次执行都只零点几秒。
语句1(SQL1耗时30秒)
Select count(*) from t1;
语句2(SQL2耗时20秒)
Select distinct t1.col1,t1.col2,t2.col3,t2.col4
from t1 ,t2
where t1.id=t2.id and t1.name=’cc’
order by t1.col5;
其他SQL语句(合计才消耗0.5秒)
----SQL3 (0.03秒)
----SQL4 (0.028秒)
-- --SQLn…….(0.001秒)