一次数据库硬解析的分析全过程

ps:其实这个case很常见,而且在正规的开发流程之下也不会出现这种情况,更不会出现在上线之后,这篇文章主要是体现一个发现问题和分析问题解决问题的思路。希望对大家能有多帮助。

说明:

经过开发方面的努力,以及对问题sql的优化之后,截止目前,之前发现的问题sql已经得到了缓解。之后,我们对数据库2个节点进行了整体分析,目前得出以下问题。

依据材料:2个节点的awr报告,见附件


经过对数据库2个节点的整体分析,发现2个节点的资源承载相差较大。以下为2个节点的对比:

 

负载情况比对

节点1


Per SecondPer Transaction
Redo size: 289,642.11 2,459.01
Logical reads: 20,588.01 174.79
Block changes: 1,452.02 12.33
Physical reads: 7.15 0.06
Physical writes: 47.59 0.40
User calls: 730.83 6.20
Parses: 268.36 2.28
Hard parses: 2.26 0.02
Sorts: 211.82 1.80
Logons: 0.51 0.00
Executes: 471.03 4.00
Transactions: 117.79 

节点2


Per SecondPer Transaction
Redo size: 115,937.47 4,102.67
Logical reads: 40,494.67 1,432.98
Block changes: 334.81 11.85
Physical reads: 19.53 0.69
Physical writes: 18.26 0.65
User calls: 4,874.41 172.49
Parses: 1,242.13 43.96
Hard parses: 2.03 0.07
Sorts: 203.80 7.21
Logons: 0.66 0.02
Executes: 4,298.22 152.10
Transactions: 28.26 

 

说明:

无论从redosize还是transactions明显可以看出节点1比节点2忙碌,虽然2个节点的hard parses相差貌似不是很大,但是从其executes数以及parses分析,初步断定是节点1的大量硬解析导致的。

 

实例效率比对

节点1

Buffer Nowait %: 99.94Redo NoWait %: 100.00
Buffer Hit %: 99.97In-memory Sort %: 100.00
Library Hit %: 57.85Soft Parse %: 99.16
Execute to Parse %: 43.03Latch Hit %: 99.94
Parse CPU to Parse Elapsd %: 20.39% Non-Parse CPU: 98.76

节点2

Buffer Nowait %: 100.00Redo NoWait %: 100.00
Buffer Hit %: 99.95In-memory Sort %: 100.00
Library Hit %: 99.92Soft Parse %: 99.84
Execute to Parse %: 71.10Latch Hit %: 99.96
Parse CPU to Parse Elapsd %: 2.62% Non-Parse CPU: 98.64

 

说明:

通过library hit%parse cpu to parse elapsd%来看,基本能够确定是节点1的大量硬解析导致的。

 

经过以上分析,我们在sql统计中,节点1如下所示:

(注:SQL ordered by Elapsed Time

Elapsed Time (s)CPU Time (s)Executions Elap per Exec (s) % Total DB Time SQL IdSQL ModuleSQL Text
8,866718865.6120.414y67m1n5ru9h9 timeTask@xjitnmapp2 (TNS V1-V3) begin PKP_XJ_BUSI_MONITOR_UPD...
2,017011183.324.64at30z235zpx7a timeTask@xjitnmapp2 (TNS V1-V3) begin xj_db_inas_proc; end;
1,3551,3120 3.12ax33m7btymb2r PL/SQL Developer begin PKP_XJ_CSD_TEST.agent_pe...
1,189365716,5550.002.74765mqyxhskk9d ValveMgmt@xjitnmapp2 (TNS V1-V3) insert into ne_perf_msg (ne_pe...
1,049010104.902.41cyyyswcsmvfqx timeTask@xjitnmapp2 (TNS V1-V3) SELECT COUNT(1), 'IOM-N' FROM ...
1,022398716,6290.002.359qfdgm3c702rs ValveMgmt@xjitnmapp2 (TNS V1-V3) begin Proc_NE_Perf_Msg_UpdateR...
94001094.002.16dzt58v2bnamc4 timeTask@xjitnmapp2 (TNS V1-V3) SELECT COUNT(1), 'T' FROM INAS...
9239352438.452.124uxbs8fhb6yv5 timeTask@xjitnmapp2 (TNS V1-V3) begin pkp_maint_job.hastenNot...
9239352438.452.12g2zqp9kt9fhhx timeTask@xjitnmapp2 (TNS V1-V3) SELECT A.JOB_NAME, B.DUTY_ID, ...
91692932,7170.032.11657k3nvp6d77r timeTask@xjitnmapp2 (TNS V1-V3) SELECT COUNT(*) FROM (SELECT :...
914293716,6270.002.10607t3jmh1rjgy ValveMgmt@xjitnmapp2 (TNS V1-V3) UPDATE NE_PERF_MSG_REAL SET PE...
51701517.191.193v8usax04tqx6 timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
51701516.511.19f3d7w5j1khh59 timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
49001490.141.132aw24jjhsbz1z timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
48201482.151.11frgk27g6p6auh timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
48201481.851.112mjp53agwxb10 timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
47901479.351.104ha87wy9k784t timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
47901478.681.10c8utt9uwda7mv timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
46601466.071.07g2s1s0vubjuba timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
46601465.991.0757pq01hujfa6d timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
46401463.931.074z5gn1sh2h3p9 timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
46301463.241.073xtjfvgq9hw3u timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
45401453.651.04cyc352n70sndr timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
44701447.391.036dz4h3cpngvfk timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
44501445.121.023maa9dy6ybfq0 timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
44501444.961.025pabqbfux2bdd timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
44301443.121.02cu3f3fwntq6q5 timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
44101440.931.025v6z9vx2anap4 timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
43801437.931.013skc5wbqaa13d timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...
43701437.221.01ffzq6ucvadp5n timeTask@xjitnmapp2 (TNS V1-V3) SELECT /*+parallel(t, 12)*/t.s...

说明:在上图(节点1)中发现,有大量的以下语句出现:

SELECT /*+parallel(t, 12)*/t.s…..

具体分析后,这种情况在节点2中不存在。

对上边的大量相同的sql具体分析如下:

SELECT /*+parallel(t, 12)*/

 t.source_id,

 t.start_date,

 SUM(t.num_cdrs),

 SUM(t.settlement_duration),

 SUM(t.sett_fee)

  FROM (SELECT d.source_id,

               substr(d.start_date, 1, 8) start_date,

               d.num_cdrs,

               d.settlement_duration,

               d.sett_fee

          FROM zhjs_app.tl_y_voice_sett_201208@xjzhjs d,

               (SELECT element_id

                  FROM zhjs_param.tp_relation_element@xjzhjs

                 WHERE rpt_code = '15'

                   AND tnode IN

                       ('415102', '415105', '415108', '416103', '416106')) c

         WHERE d.account_item = c.element_id

        UNION ALL

        SELECT d.source_id,

               substr(d.start_date, 1, 8) start_date,

               d.num_cdrs,

               d.settlement_duration,

               d.sett_fee

          FROM zhjs_app.tl_y_voice_sett_201209@xjzhjs d,

               (SELECT element_id

                  FROM zhjs_param.tp_relation_element@xjzhjs

                 WHERE rpt_code = '15'

                   AND tnode IN

                       ('415102', '415105', '415108', '416103', '416106')) c

         WHERE d.account_item = c.element_id) t

 GROUP BY t.source_id, t.start_date;

 

说明:

在节点1,存在这样大量的sql,其中除了在in 子句中的对象个数不同外,其他基本全部一致。这也是导致节点1大量硬解析,消耗主机资源,拖低节点1各种性能指标的原因。

 

建议:

对以上语句进行绑定变量处理。

 

总结:

这次对XXXX数据库性能的监控主要从其整体结构来进行分析的,并不是将全部精力放在盯某个或者某类sql上,我们认为这样可以避免瞎子摸象的问题产生,至于最后还是落在具体sql上,这个只是一种分析的结果,而非以往的一种惯性“有性能问题就找sql”这样的分析过程。

         最后,希望在和开发等同事的一起努力下,XXXX性能有所大的提高。

ps:很不习惯写文档,而且还那种给人家找事的文档,基本形成了格式,首先肯定人家前期的努力和结果,其次不但提出自己的见解,还得表明自己的分析依据和分析过程,完了再加以一定的鼓励和前瞻性。哎..真劳神,其实也就一句话的事儿..

Normal 0 false 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE

转载于:http://blog.itpub.net/26143577/viewspace-745046/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值