频繁变化的表无效索引造成的热点块争用

简介:

客户号码办理系统出现会话连接数超高告警,造成数据库性能问题,影响了全网业务办理。告警发生在11月7日20点--21点时间段,查询当时等待事件最高的buffer busy waits。

查询该等待事件对应的sql;

select sql_idcount(*)

  from v$active_session_history

 where sample_time >=

       to_date('2016-11-07 20:00:00''yyyy-mm-dd hh24:mi:ss')

   and sample_time <=

       to_date('2016-11-07 21:00:00''yyyy-mm-dd hh24:mi:ss')

   and event = 'buffer busy waits'

 group by sql_id order by 2 desc ;

wKiom1hA4KTh2DU0AAAwbRdgTgk817.jpg-wh_50


根据SQL_id查看对应时间点所产生的阻塞热点块

select a.BLOCKING_SESSION,count(*) from gv$active_session_history a where sql_id='5qhcs0sc47t5t' and  sample_time >=

       to_date('2016-11-07 20:00:00', 'yyyy-mm-dd hh24:mi:ss')

   and sample_time <=

       to_date('2016-11-07 21:00:00', 'yyyy-mm-dd hh24:mi:ss')

   and event = 'buffer busy waits' group by a.BLOCKING_SESSION;

wKiom1hA4OqQQDltAABlGVNSjeA208.jpg-wh_50


找出主要的BLOKING_SESSION为2830,3994,4252,4107.

 

根据找到的BLOKING_SESSION找到当时争用的热点块

   select sql_id,p1,a.p1text,p2,p2text,p3,p3text,count(*) from v$active_session_history a where  sample_time >=

       to_date('2016-11-07 20:00:00', 'yyyy-mm-dd hh24:mi:ss')

   and sample_time <=

       to_date('2016-11-07 21:00:00', 'yyyy-mm-dd hh24:mi:ss')

       and a.SESSION_ID in (2830,3994,4252,4107)

 group by sql_id,p1,a.p1text,p2,p2text,p3,p3text;

wKioL1hA4SqhFVBXAACL0NX7zhE975.jpg

找出对应的热点块为:21463、16199、16215


根据热点块找到到底是表还是索引引起的争用

select * from DBA_EXTENTS where FILE_ID = &AFN and &BL between BLOCK_ID and BLOCK_ID + BLOCKS - 1;

&AFN$BL代入上面查到的值AFN=169,BL为21463、16199、16215是UCR_TRADE_03.IDX_SYNC_PHCODE_IDLE_1索引


通过抓取当时20点--21点AWR快照信息也印证了这一点;

wKioL1hA4bywD-I-AACvGIEpoVw555.jpg

查看此索引创建的列为'ALTER_TYPE', 'SERIAL_NUMBER'查看该表的数据量信息怀疑该表变化特别频繁:

wKiom1hA4gyBUdFHAABBIzFfJRI050.jpg

该表在7号22点已经收集过统计信息。但是实际上的表内数据为14行数据:

wKiom1hA4mOB5szIAADC31u-OjE585.jpg

看见了吗,只有14行数据,但是统计信息收集后显示NUW_ROWS为11228。说明这个表变化还是特别频繁的。

随即决定删除该无用索引,一个表内仅有14条数据。且该表insert、delete特别频繁。走索引反而适得其反,删除该无效索引UCR_TRADE_03.IDX_SYNC_PHCODE_IDLE_1。

wKioL1hA4uPyTe1-AAFPFf56zTI101.jpg


附录:ADDM建议信息:

 

SQL statements consuming significant database time were found.

 

   RECOMMENDATION 1: SQL Tuning, 88% benefit (726535 seconds)

      ACTION: Investigate the SQL statement with SQL_ID "5qhcs0sc47t5t" for

         possible performance improvements.

         RELEVANT OBJECT: SQL statement with SQL_ID 5qhcs0sc47t5t and

         PLAN_HASH 2432174272

         UPDATE  TF_R_PHCODE_IDLE R              SET     R.UPDATE_TIME =

         SYSDATE,                     R.SALE_SYSTEM_TAG = '2'

         WHERE   R.SERIAL_NUMBER = :1             AND     R.PROVINCE_CODE = :2

      RATIONALE: SQL statement with SQL_ID "5qhcs0sc47t5t" was executed 3887

         times and had an average elapsed time of 186 seconds.

      RATIONALE: Waiting for event "buffer busy waits" in wait class

         "Concurrency" accounted for 92% of the database time spent in

         processing the SQL statement with SQL_ID "5qhcs0sc47t5t".

      RATIONALE: Waiting for event "enq: TX - row lock contention" in wait

         class "Application" accounted for 5% of the database time spent in

         processing the SQL statement with SQL_ID "5qhcs0sc47t5t".

      RATIONALE: Waiting for event "enq: TX - contention" in wait class

         "Other" accounted for 1% of the database time spent in processing the

         SQL statement with SQL_ID "5qhcs0sc47t5t".

 

   RECOMMENDATION 2: SQL Tuning, 87% benefit (721075 seconds)

      ACTION: Investigate the SQL statement with SQL_ID "b08xxahpxcak4" for

         possible performance improvements.

         RELEVANT OBJECT: SQL statement with SQL_ID b08xxahpxcak4

         INSERT INTO SYNC_PHCODE_IDLE (CHNL_NO ,ROW_ID ,ALTER_TIME ,ALTER_TYPE

         , SERIAL_NUMBER ,CODE_REVERSE ,NET_TYPE_CODE ,BRAND_CODE ,IMSI ,

         SIM_CARD_NO ,CODE_STATE ,TRADE_CATE ,CODE_GRADE ,LIMIT_ID , NICE_RULE

         ,GROUP_ID ,PROVINCE_CODE ,EPARCHY_CODE ,CITY_CODE , DEPART_ID

         ,CHANNEL_ID ,STAFF_ID ,STOCK_ID ,STOCK_LEVEL , POOL_ID ,ECS_TAG

         ,BATCH_DEF_TAG ,BATCH_ID ,STAFF_IN ,TIME_IN , STAFF_UPSHELF

         ,TIME_UPSHELF ,STAFF_DOWNSHELF ,TIME_DOWNSHELF , OCCUPY_TIME

         ,REUSE_COUNT ,OPER_BATCH_ID ,OPER_DEPART_ID , OPER_STAFF_ID

         ,OPER_TIME ,ASSIGN_BATCH_ID ,ASSIGN_TAG , CONFIRM_TAG

         ,ASSIGN_STAFF_ID ,ASSIGN_TIME ,OPEN_DEPART_ID , OPEN_STAFF_ID

         ,BACK_STAFF_ID ,BACK_TIME ,UPDATE_STAFF , UPDATE_TIME ,RSVALUE1

         ,RSVALUE2 ,RSVALUE3 ,RSVALUE4 , RSVALUE5 ,RSVALUE6

         ,WIRELESS_CARD_TYPE ,RELEASE_TIME ,SYS_CODE , PROC_KEY ,PROC_KEY_MODE

         ,USE_TYPE) VALUES (SUBSTR(:B1 ,-2) ,:B2 ,TO_CHAR(SYSTIMESTAMP

         ,'YYYYMMDDHH24MISSFF') ,'UPD' , :B1 ,:B3 ,:B4 ,:B5 ,:B6 , :B7 ,:B8

         ,:B9 ,:B10 ,:B11 , :B12 ,:B13 ,:B14 ,:B15 ,:B16 , :B17 ,:B18 ,:B19

         ,:B20 ,:B21 , :B22 ,:B23 ,:B24 ,:B25 ,:B26 ,:B27 , :B28 ,:B29 ,:B30

         ,:B31 , :B32 ,:B33 ,:B34 ,:B35 , :B36 ,:B37 ,:B38 ,:B39 , :B40 ,:B41

         ,:B42 ,:B43 , :B44 ,:B45 ,:B46 ,:B47 , :B48 ,:B49 ,:B50 ,:B51 ,:B52 ,

         :B53 ,:B54 ,:B55 ,:B56 ,:B57 , :B58 ,:B59 ,:B60 )

      RATIONALE: SQL statement with SQL_ID "b08xxahpxcak4" was executed 9774

         times and had an average elapsed time of 73 seconds.

 

本文转自yangjunfeng 51CTO博客,原文链接:http://blog.51cto.com/yangjunfeng/1878793


相关文章
|
2月前
|
存储 安全 Java
JVM锁的膨胀过程与锁内存变化解析
在Java虚拟机(JVM)中,锁机制是确保多线程环境下数据一致性和线程安全的重要手段。随着线程对共享资源的竞争程度不同,JVM中的锁会经历从低级到高级的膨胀过程,以适应不同的并发场景。本文将深入探讨JVM锁的膨胀过程,以及锁在内存中的变化。
49 1
|
3月前
|
存储 关系型数据库 MySQL
MySQL索引失效及避免策略:优化查询性能的关键
MySQL索引失效及避免策略:优化查询性能的关键
394 3
|
6月前
|
存储 缓存 NoSQL
缓存分区及其透明性的处理方式
【6月更文挑战第8天】该文探讨了Redis缓存分区的重要性与方法。分区通过在多台服务器上分散缓存,提升可用性、性能和可伸缩性。最后,强调技术的双刃剑特性,需根据实际情况谨慎选用。
86 5
缓存分区及其透明性的处理方式
|
5月前
|
数据处理 数据库 索引
数据库索引策略如何影响数据的读取效率?
【7月更文挑战第3天】数据库索引策略如何影响数据的读取效率?
40 2
|
5月前
|
存储 数据处理 数据库
数据库索引策略如何影响数据更新操作的性能?
【7月更文挑战第3天】数据库索引策略如何影响数据更新操作的性能?
100 1
|
7月前
|
并行计算 索引 Python
讨论如何优化 DataFrame 操作,减少内存占用和提高执行速度
【5月更文挑战第19天】优化 DataFrame 操作涉及选择合适的数据类型、避免复制、使用向量化、高效迭代和设置索引。通过这些策略,如使用 `np.int8` 节省内存,直接修改列数据,利用 `itertuples`,设置分类数据类型,以及分块和并行计算,可以显著减少内存占用和提高执行速度,从而更好地处理大规模数据。实践中需结合具体情况综合运用,不断测试和优化。
241 2
|
存储 小程序 编译器
数据在内存中存储的现象
数据在内存中存储的现象
126 0
|
存储 NoSQL 测试技术
rediskey值内存消耗以及性能影响
rediskey值内存消耗以及性能影响
198 0
|
SQL 关系型数据库 MySQL
[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响
[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响
140 0
[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响