`
itspace
  • 浏览: 978723 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

某客户数据库性能诊断报告

阅读更多

一、故障描述
***数据库近期由于业务量加大,持续出现事务响应缓慢,在业务高峰期(9:00左右)甚至出现卡住现象,导致前台无法及时响应。通过远程拨号持续观察3天,并对数据库性能做出了响应的临时性优化,在一定程度上得到了缓解。以目前数据库性能缓慢主要有两方面原因:
1、 数据库soft parse过多,导致library cache争用。
2、 数据库部分SQL执行效率不高,在大并发环境下导致热点块(hot block)争用。

二、故障分析
1、library cache争用
Library cache争用主要集中体现在2011年3月15日9:00-11:00,由于此原因(此原因在此次故障占主导地位),导致前台业务hang住,后台SQLPLUS无法连接。最终通过后台杀进程,重启数据库解决。
故障发生时,数据库主要体现为:
Cache Sizes
Begin End
Buffer Cache: 2,512M 2,512M Std Block Size: 8K
Shared Pool Size: 3,584M 3,584M Log Buffer: 14,336K

Top 5 Timed Events
Event Waits Time(s) Avg Wait(ms) % Total Call Time Wait Class
latch: library cache 4,216 1,056 251 25.6 Concurrency
db file sequential read 190,794 658 3 15.9 User I/O
db file scattered read 87,955 313 4 7.6 User I/O
read by other session 147,808 291 2 7.0 User I/O
CPU time 279 6.7
Wait Events
? s - second
? cs - centisecond - 100th of a second
? ms - millisecond - 1000th of a second
? us - microsecond - 1000000th of a second
? ordered by wait time desc, waits desc (idle events last)
Event Waits %Time -outs Total Wait Time (s) Avg wait (ms) Waits /txn
latch: library cache 4,216 0.00 1,056 251 0.39
db file sequential read 190,794 0.00 658 3 17.54
db file scattered read 87,955 0.00 313 4 8.09
read by other session 147,808 0.00 291 2 13.59
latch free 587 1.87 129 220 0.05
latch: shared pool 1,046 0.00 73 70 0.10
enq: TX - row lock contention 25 96.00 70 2813 0.00
latch: library cache lock 180 0.00 51 281 0.02
buffer busy waits 72 58.33 47 648 0.01
direct path read temp 10,960 0.00 45 4 1.01
db file parallel write 4,561 0.00 38 8 0.42
latch: cache buffers chains 2,259 0.00 34 15 0.21
latch: session allocation 97 0.00 26 265 0.01

SQL ordered by Version Count
? Only Statements with Version Count greater than 20 are displayed
Version Count Executions SQL Id SQL Module SQL Text
11,265 gdy6tymxpwjz0
  ** SQL Text Not Available **
10,658 7zw1mj3v5wqcq
  ** SQL Text Not Available **
2,194 bfp3m30c0c936
  ** SQL Text Not Available **
1,965 461mvk5ra20xg
  ** SQL Text Not Available **
892 dvqq0hguxt4ua
  SELECT COUNT(:"SYS_B_00") FROM...

? 说明:
(1) Oracle数据库shared pool设置为3,584M,过大的shared pool设置,导致过高的latch管理成本。
(2) Oracle数据库cursor_sharing参数设置为similar,此参数的设置在避免过多硬解析的同时,在表格选择性列存在柱状图的条件下,又带来执行计划产生的低效率。在version count高达11265的SQL下,又带来了library cache扫描时间的加长,又进一步加重了library cache的争用。

? 解决办法:
(1) 将Oracle数据库SGA设置为3G,即从6G降至3G,在不影响业务前提下,降低latch管理成本。
SQL> show sga

Total System Global Area         3456106496 bytes
Fixed Size                          2087968 bytes
Variable Size                    1107297248 bytes
Database Buffers                 2332033024 bytes
Redo Buffers                       14688256 bytes
(2) 将cursor_sharing参数设置为force,同时将session_cached_cursors设置为100,进一步降低library cache的争用。
通过以上临时解决办法,数据库library cache的争用得到了极大的缓解。

3、 热点块争用
目前Oracle数据库存在着严重的热点块争用,即大量的并发会话同时读取表格中同一个block,导致会话间相互等待。由于会话间等待时间较高,进而加剧了事务行级锁(enq: TX - row lock contention)的发生。目前系统中等待事件主要如下:
Top 5 Timed Events
Event Waits Time(s) Avg Wait(ms) % Total Call Time Wait Class
read by other session 1,811,592 2,797 2 50.0 User I/O
enq: TX - row lock contention 311 895 2,879 16.0 Application
db file scattered read 428,596 857 2 15.3 User I/O
CPU time 561 10.0
db file sequential read 221,017 385 2 6.9 User I/O

Instance Efficiency Percentages (Target 100%)
Buffer Nowait %: 94.72 Redo NoWait %: 99.99
Buffer Hit %: 86.97 In-memory Sort %: 100.00
Library Hit %: 99.62 Soft Parse %: 99.43
Execute to Parse %: -16.93 Latch Hit %: 90.88
Parse CPU to Parse Elapsd %: 6.05 % Non-Parse CPU: 99.91
? 说明:
由红色字体标出可以看出目前系统中存在着大量的热点块争用,而这些热点块争用是主要是由于SQL语句执行效率不高(全表扫描,Buffer Hit为86.97)导致的。以下为引起该问题的SQL。
SQL1:
select 1 from hz_qyhznr where  trim(zch)=:1   and  qylxdl  not between21 and 26。
由于表格W_HZ_QYHZNR字段ZGH没有建立函数索引trim,导致了全表扫描。
解决办法:
在字段ZGH建立了函数索引trim(zch),SQL执行效率比原先得到了极大提高,但SQL中存在判断条件qylxdl  not between21 and 26,使得执行效率不理想。
在表格W_HZ_QYHZNR存在着如下数据分布,可以看到此判断条件显得多余,如由于业务逻辑关系,必需此判断条件,建议在程序代码中加以判断,而不是在SQL中判断。
SQL> select QYLXDL,count(*) from W_HZ_QYHZNR group by QYLXDL order by QYLXDL;

QYLXDL       COUNT(*)
---------- ----------
11              86698
12              13811
13               4517
14               2074
16                  3
31              29132
32                638
33               7268
34                129

9 rows selected.

SQL2:
select 1 from hz_qyhznr where  trim(zch) =:1  and  trim(qymc) = :2
解决办法:
SQL> select count(distinct qymc) from  W_HZ_QYHZNR;

COUNT(DISTINCTQYMC)
-------------------
             149858

SQL> select count(*) from W_HZ_QYHZNR;

  COUNT(*)
----------
149858
由于在列qymc选择性较好,在其上建立函数索引,效率得到极大提高。

SQL3:
SELECT T.ZCH, T.BGZXRQ FROM BF_QYHZNR T WHERE T.ZCH = :B1 AND T.ZT = 'D';
SELECT COUNT(1) FROM BF_QYHZNR T WHERE T.ZCH = :B1 AND T.ZT = 'X';
解决办法:
SQL> conn qn_yc/xxb1002
Connected.
SQL> select count(*) from BF_QYHZNR;

  COUNT(*)
----------
    527350

SQL> select zt,count(*) from BF_QYHZNR group by zt;

ZT   COUNT(*)
-- ----------
            9
D       54164
Q          41
B      338511
X      134621
C           4

6 rows selected.
SQL> explain plan for select  T.ZCH, T.BGZXRQ FROM BF_QYHZNR T WHERE T.ZCH = :B1 AND T.ZT = 'D';

Explained.

SQL> select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

----------------------------------------------------------------------
| Id  | Operation         | Name        | Rows  | Bytes | Cost (%CPU)|
----------------------------------------------------------------------
|   0 | SELECT STATEMENT  |             |     1 |    24 |  9428   (1)|
|*  1 |  TABLE ACCESS FULL| W_BF_QYHZNR |     1 |    24 |  9428   (1)|
----------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------


PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
   1 - filter("T"."ZCH"=:B1 AND "T"."ZT"='D')
可以看到ZT列选择性不佳,建议在程序代码中加以判断,而不是在SQL中判断。
否则执行计划为全表扫描,容易导致热点块冲突。
临时解决办法:
SQL> conn hz_yc/xxb1002
Connected.
SQL> select count(*) from W_BF_QYHZNR;

  COUNT(*)
----------
    527350

SQL> create index W_BF_QYHZNR_zch_zt on W_BF_QYHZNR(zch,zt);

Index created.
SQL> conn qn_yc/xxb1002
Connected.
SQL> explain plan for select  T.ZCH, T.BGZXRQ FROM BF_QYHZNR T WHERE T.ZCH = :B1 AND T.ZT = 'D';

Explained.

SQL>  select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
-------
| Id  | Operation                   | Name               | Rows  | Bytes | Cost
(%CPU)|
--------------------------------------------------------------------------------
-------
|   0 | SELECT STATEMENT            |                    |     1 |    24 |     4
   (0)|
|   1 |  TABLE ACCESS BY INDEX ROWID| W_BF_QYHZNR        |     1 |    24 |     4
   (0)|

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|*  2 |   INDEX RANGE SCAN          | W_BF_QYHZNR_ZCH_ZT |     1 |       |     3
   (0)|
--------------------------------------------------------------------------------
-------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("T"."ZCH"=:B1 AND "T"."ZT"='D')
目前在T"."ZCH"=:B1 AND "T"."ZT"='D'建立联合索引,执行计划效率较高。

SQL4:
仔细检查存储过程CALL pkg_check.chk_grade(:1,:2,:3),根据统计资料显示,该执行计划是引起数据库性能缓慢的主要原因,需要开发商进一步优化。
RECOMMENDATION 1: SQL Tuning, 64% benefit (3566 seconds)
      ACTION: Investigate the SQL statement with SQL_ID "57xrg07tjm0qn" for possible performance improvements.
              RELEVANT OBJECT: SQL statement with SQL_ID 57xrg07tjm0qn
               CALL pkg_check.chk_grade(:1,:2,:3)
    RATIONALE: SQL statement with SQL_ID "57xrg07tjm0qn" was executed 30
         times and had an average elapsed time of 117 seconds.
      RATIONALE: Waiting for event "read by other session" in wait class "User
         I/O" accounted for 49% of the database time spent in processing the
         SQL statement with SQL_ID "57xrg07tjm0qn".
      RATIONALE: Waiting for event "enq: TX - row lock contention" in wait
         class "Application" accounted for 26% of the database time spent in
         processing the SQL statement with SQL_ID "57xrg07tjm0qn".
      RATIONALE: Waiting for event "db file scattered read" in wait class
         "User I/O" accounted for 9% of the database time spent in processing
         the SQL statement with SQL_ID "57xrg07tjm0qn".

分享到:
评论
1 楼 hctech 2011-06-14  
关于version count过高的问题,不知博主是否看过eygle的这篇文章:
http://www.eygle.com/archives/2004/10/shared_pool-6.html

不知是否是一样的问题?

相关推荐

    数据库性能调优--原理与技术1.pdf

    - **ADDM (Automatic Database Diagnostic Monitor)**:自动数据库诊断监控器是一种基于AWR数据的分析工具,能够自动生成关于数据库性能问题的诊断报告。 ##### 3.2 SQL语句优化 SQL语句是与数据库交互的主要方式...

    2024分布式数据库金融关键业务场景应急处理研究报告.pptx

    这些场景通常涉及高并发、高可用性和高性能的需求,例如交易处理、清算结算、客户信息管理和风险控制。分布式数据库通过将数据分布在多个物理节点上,实现了数据的分散存储和处理,增强了系统的可扩展性、容错性和...

    用友t6-u8数据库字典

    3. 故障排查:当系统出现问题时,数据库字典可作为诊断工具,帮助找出问题所在,例如检查数据表结构、索引状态等。 4. 安全管理:字典能揭示数据库的敏感信息,从而制定合理的权限策略,防止未授权的访问和操作。 ...

    Oracle数据库基础知识

    - **段(Segment)**:表空间中的一个逻辑分区,对应于某一类数据库对象。 - **区(Extent)**:一系列相邻的数据块,组成段的一部分。 - **块(Block)**:数据库中最小的数据存储单位。 **1.3.2 表(Table)** - **列...

    服务器数据库维护方案.doc

    《服务器数据库维护方案》文档详细介绍了针对某一具体集团(以下简称“集团”)的信息化建设管理中心机房及其分支机构所涉及的服务器与网络系统的维护策略。本文将对该方案中的重要知识点进行深入解读。 #### 二、...

    某信息网电子商务建设Oracle方案建议书-精品创业书模板.rar

    Oracle Enterprise Manager提供全面的数据库监控、诊断和性能调优工具,帮助管理员有效管理数据库健康状态,预防和解决问题。 总结,采用Oracle方案建设某信息网的电子商务平台,不仅可以提供高性能、高安全性的...

    resume

    他还专注于数据库性能调优和故障排查。 【成就】: - 2003年6月至今,参与了xxx省移动通信公司呼叫中心的定制软件项目(现场实施),担任项目负责人和数据库DBA。成功实现了产品开发和增强,包括积极参与需求分析,...

    20210405-华创证券-道通科技-688208-深度研究报告:受益汽车后市场扩展,新品类打开成长空间.pdf

    凭借在汽车智能诊断分析与胎压监测领域的技术积累,道通科技研发出了四合一智能胎压传感器产品,该产品能够通过配套工具进行无线编程,并且可以与不同车型匹配,具有高覆盖率和优秀的兼容性能。这一创新产品体现了...

    《某咨询供应链管理流程与绩效》(中文版).pptx

    这与供应链CoE的观点一致,并与供应链库存数据库的诊断框架相呼应。此架构为分析问题和设定战略目标提供了基础。 在战略目标层面,文档指出应关注质量、时间和成本三个核心要素。这些目标与客户的需求紧密相关,...

    阿里云上护航服务解决方案.pptx

    1. 性能瓶颈解决方案:性能瓶颈限制(CPU/IO/PPS/CONN),OS 内核参数不合理,产品组合的限制,业务架构问题,数据库优化等。 2. 资源与灾备网络质量预案:资源扩容与部署,容灾级别直播量级保障,资源容量的规划...

    Oracle月度技术通讯

    文件"D.553810968.05005"可能是通讯中的具体文章或报告,内容可能更深入地探讨了上述某一方面的技术细节。由于无法直接查看文件内容,以上分析基于一般Oracle月度技术通讯的常规内容。若需了解具体信息,需要解压...

    asp.net某店POS积分管理系统-清除履历表、日志表、月购买额(源代码+论文).rar

    4. **数据库设计**:项目中可能涉及到的数据库表可能包括客户表、商品表、交易表、积分表等。每个表的设计需要考虑字段、数据类型、主键、外键以及适当的索引,以确保数据的完整性和高效查询。 5. **ASP.NET页面...

    某机房群控系统技术研究方案说明.pdf

    【某机房群控系统技术研究方案说明】 机房群控系统是现代建筑中不可或缺的一部分,主要用于管理和控制数据中心、通信中心或大型设施内的环境条件,确保设备高效、稳定运行。江森自控作为该领域的领导者,其技术研究...

    某医院信息化建设方案实用.pdf

    医院信息系统包括以病人为中心的业务系统和以管理为导向的管理系统,基于互联网的浏览器/服务器技术与大型数据库管理系统相结合,可以构建出高性能、开放和易于维护的系统,满足日益复杂的业务需求。 再者,...

    监控易:智慧园区智慧运维“未来守护者”.docx

    1. **自主研发高性能数据库**:采用64位Linux系统,大幅提高内存寻址空间,提升数据处理性能。 2. **高可靠性**:通过动态负载均衡和主备模式的服务器集群,保证监控系统的稳定运行和快速故障恢复。 3. **灵活性和...

    某医院信息化建设方案分享.pdf

    采用基于Internet的浏览器/服务器技术,结合大型数据库管理系统,如Oracle、SQL Server等,可以构建高性能、高开放性和可维护性的系统,适应不断变化的业务需求。 3. **图像处理技术**:医学影像信息系统的发展得益...

    NCR_pla_problems_ncr_zip_

    6. **性能优化**:对于性能下降的问题,可能涉及到调整系统设置、优化数据库查询、增加硬件资源等。 7. **兼容性问题**:NCR平台可能与其他软硬件产品有兼容性问题,如何识别并解决这些问题是关键。 8. **安全问题...

    服务器基础知识培训.pptx

    此外,服务器的用途广泛,通用型服务器可以处理多种任务,而功能服务器如数据库服务器、邮件服务器则专门针对某一特定服务进行优化。 服务器基础知识的掌握对于IT从业者至关重要,无论你是销售人员、技术支持还是...

    序列模式GSP算法

    序列模式挖掘在众多领域中有着广泛的应用,比如客户购买行为模式预测、Web访问模式预测、疾病诊断、自然灾害预测以及DNA序列分析等。 序列模式的概念最早由Agrawal和Srikant提出,其核心定义是给定一个由不同序列...

Global site tag (gtag.js) - Google Analytics