依据开发反馈。近期每天早上7:30应用会报警。应用的日志显示数据库连接池满了。新的连接被拒绝。

首先。我做了ASH报告(报告区间:7:25 ~ 7:35),从ASH的等待事件发现enq: TX - row lock contention竟然高达76.54%。例如以下所看到的:

Top User Events

Event Event Class % Event Avg Active Sessions
enq: TX - row lock contention Application 76.54 0.81
CPU + Wait for CPU CPU 12.76 0.14
db file sequential read User I/O 7.40 0.08

enq: TX - row lock contention等待事件是一种行的等待事件,也就是说同一时刻有多个session请求改动同一行。

下一步就是找这个等待事件主要由哪些SQL引起的:

Top SQL with Top Events

SQL ID Planhash Sampled # of Executions % Activity Event % Event Top Row Source % RwSrc SQL Text
4rm17788qwxuy 1272661853 54 69.45 enq: TX - row lock contention 69.45 UPDATE 69.45 update shift_case set expertId...
1cqbcdr0ufyk6 1272661853 10 5.20 enq: TX - row lock contention 5.20 UPDATE 5.20 update shift_case set daySecti...
1anu5c146v8d7 1272661853 4 1.89 enq: TX - row lock contention 1.89 UPDATE 1.89 update shift_case set daySecti...
gbw4zk8jv0n0u 2588599834 10 1.57 CPU + Wait for CPU 0.79 TABLE ACCESS - BY GLOBAL INDEX ROWID 0.47 select sc.scId, sc.estId, ct.c...
dvmk92c1umc97 905317021 9 1.42 CPU + Wait for CPU 1.42 CONNECT BY - NO FILTERING WITH START-WITH 0.63 select h.hospitaluuid id, h.pl...

从上表能够得出。SQL_ID=4rm17788qwxuy的SQL语句是罪魁祸首,改SQL语句例如以下:

4rm17788qwxuy update shift_case set expertId = :1 , shiftDate = :2 , daySection = :3 , rcLimit = :4 , orderingCount = :5 , shareRccount = :6 , clinicTypeUuid = :7 , fee = :8 , isTimeDivision = :9 , state = :10 , isopen=:11 , stateTime = :12 , updateTime = sysdate where scId
=:13

scid是shift_case的主键。也就是说同一时刻有许多的session在请求更新同一行。

好了,既然已经定位到问题就好办了,立即把应用开发者找来一问,真相大白:原来该应用须要从外部系统获取数据,为了让内部的数据库和外部的尽量保持一致,每次查询外部系统时,会在数据库里运行update语句。

解决的方法也简单:因为每次的Update都会把前一次的update覆盖(等于前面的update做的都是无用功),所以根本不是必需每次查询都update。仅仅要最后一次查询做update就能够了。

最新文章

  1. 温故而知新 css + html 超级牛逼的居中策略
  2. [CentOS 7] 安装nginx
  3. iOS 线性滚动
  4. Servlet 3.0 异步模式
  5. 写js写傻了,明天研究一下异步
  6. 基于TF-IDF值的汉语语义消歧算法
  7. 解决rhel相关系统下yum找不到安装包的解决方法
  8. List 去处自定义重复对象方法
  9. iOS基础 - UITableView的数据源(dataSource)和代理(delegate)
  10. Linux运维常用的命令详解
  11. selenium chromedriver与谷歌浏览器版本映射表 (更新至v2.32)
  12. foreach循环里不能remove/add元素的原理
  13. python-算法基础
  14. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习5
  15. kafka集群环境搭建(Linux)
  16. 【Pyhon】获取文件MIME类型,根据文件类型自定义文件后缀
  17. apache虚拟主机配置及常用安全配置
  18. C#中获取用户登录IP地址
  19. 用CSS的方法如何让一个元素不可见?(面试题目)
  20. 矩阵经典题目四:送给圣诞夜的礼品(使用m个置换实现对序列的转变)

热门文章

  1. 兼容各种浏览器下调用iframe里面的函数
  2. Table 'hd_online' is marked as crashed and should be repaired索引损坏
  3. LinkedList源码及解析
  4. Linux限制某些用户或IP登录SSH、允许特定IP登录SSH
  5. FeignClient与RestTemplate的区别比较简单研究
  6. 我告诉你MSDN
  7. GG同步到sqlserver报错一例 Invalid date format
  8. ylbtech-LanguageSamples-Indexers_2(索引器)
  9. delphi 调用 java
  10. RawCap抓取本地回环接口数据包