一条简单的sql语句导致的系统问题(r4笔记第51天)
新年,给大家拜年了。祝大家工作顺利,万事如意。今天照例简单检查了系统的情况,发现在客户的服务器在下午的3-5点这个时间段,数据库负载略有上升,但是幅度不大,因为生产的awr抓取频率是10分钟,所以还是能够通过awr分析出一些问题。负载情况如下:抓取了一个最新时间段的awr报告。查看数据库负载,比平时的负载要高一些。
Host Name | Platform | CPUs | Cores | Sockets | Memory (GB) |
---|---|---|---|---|---|
xxxxx | Linux x86 64-bit | 80 | 40 | 4 | 346.22 |
Snap Id | Snap Time | Sessions | Cursors/Session | |
---|---|---|---|---|
Begin Snap: | 33108 | 19-Feb-15 15:40:21 | 5147 | 5.4 |
End Snap: | 33109 | 19-Feb-15 15:50:22 | 5256 | 5.5 |
Elapsed: | 10.01 (mins) | |||
DB Time: | 533.14 (mins) |
从这个概览来看还是看不出特别之处,只能对整体的情况有一个把握。这是一个10分钟的报告。Load profile是我查看awr报告的重点部分。能够发现user calls和executions的值很高。
Load Profile
Convert to CSV
Per Second | Per Transaction | Per Exec | Per Call | |
---|---|---|---|---|
DB Time(s): | 53.3 | 0.9 | 0.00 | 0.00 |
DB CPU(s): | 10.3 | 0.2 | 0.00 | 0.00 |
Redo size: | 2.2 MB | 37.4 KB | ||
Logical reads: | 10.3 GB | 179.3 MB | ||
Block changes: | 10,738.9 | 182.2 | ||
Physical reads: | 1.2 GB | 21.5 MB | ||
Physical writes: | 7.8 MB | 136.0 KB | ||
User calls: | 20,256.8 | 343.7 | ||
Parses: | 2,447.3 | 41.5 | ||
Hard parses: | 4.3 | 0.1 | ||
W/A MB processed: | 72.5 | 1.2 | ||
Logons: | 4.6 | 0.1 | ||
Executes: | 11,414.1 | 193.7 | ||
Rollbacks: | 0.6 | 0.0 | ||
Transactions: | 58.9 |
这个时候基本能够从load profile里面找到问题的方向了,user calls和executions的部分需要注意,首先问题的方向很可能是从sql语句级别导致的,语句执行的如此频繁,势必会对buffer gets有较大的影响,这个报告中parses的值很低,至少说明问题不是由于绑定变量导致的。我们可以查看等待事件基本确定时间都去哪了,哪些等待事件是需要重点关注的。然后在sql语句部分来分析了,基本可以从order by Elapsed time, order by Gets, order by Executions这三个部分来佐证了。等待事件如下:
Top 5 Timed Foreground Events
Event | Waits | Time(s) | Avg wait (ms) | % DB time | Wait Class |
---|---|---|---|---|---|
db file sequential read | 13,019,569 | 15,375 | 1 | 48.06 | User I/O |
enq: TX - row lock contention | 403 | 7,779 | 19303 | 24.32 | Application |
DB CPU | 6,185 | 19.34 | |||
direct path read | 425,941 | 1,882 | 4 | 5.88 | User I/O |
read by other session | 1,126,812 | 774 | 1 | 2.42 | User I/O |
从这个等待事件可以看出,大部分的等待事件都集中在IO部分,当然导致的原因也是多方面的。第2个等待事件至少可以说明表中存在着锁,这个也可能是导致数据库负载增加的一个原因,在通过监控记录查看,或者抓取一个ash报告就能够基本定位出那个时间段的锁细节。已经做了确认,发现某一个process存在很多的并发dml操作,抓取了相应的信息交给了开发处理。
SQL ordered by Elapsed Time
Elapsed Time (s) Executions Elapsed Time per Exec (s) %Total %CPU %IO SQL Id SQL Module SQL Text 01:39:59 1,344 4.46 18.75 0.33 0.00 dch8sxwt6ujvc JDBC Thin Client /* CL_ProcessController_update...
01:25:38 95 54.08 16.06 6.94 96.79 6csnjz5kqcffm bl1extract@ccbdbpr1 (TNS V1-V3) SELECT /*+ leading (list payp...
2,612.67 206 12.68 8.17 8.55 94.69 ffnjuh9qz1wy8 bl1extract@ccbdbpr1 (TNS V1-V3) SELECT /*+ leading (cust rate ...
1,800.85 519 3.47 5.63 0.01 0.00 ffv3am85ccm25 JDBC Thin Client /* AC_AcCloseUpdateAcControl_u...
1,554.22 13 119.56 4.86 17.15 86.22 fg5mc598u799u JDBC Thin Client select /*+ leading (bpm_ai bpm...
1,476.63 13 113.59 4.62 30.53 66.68 4gz51fphuarsw JDBC Thin Client /* CL_ProcInstScanner_selectAv...
952.12 361,344 0.00 2.98 12.69 92.74 62h1u7vsgjx9p bl1extract@ccbdbpr1 (TNS V1-V3) /* */ SELECT CUSTOMER_ID, SUBS...
924.90 13 71.15 2.89 30.09 66.53 6fu3z8pqd2y9g JDBC Thin Client /* CL_WaitScanner_selectWorkab...
600.66 0 1.88 8.85 94.53 1taqbbq0mw35u JDBC Thin Client SELECT OK.BAN, OK.MSISDN, OK.P...
565.49 0 1.77 4.19 97.80 cqrms45fqwvr3 JDBC Thin Client /* Formatted on 2012/04/26 16:...
514.37 2,552,072 0.00 1.61 99.27 0.00 0mynq29fmat7d getdate_int@ccbdbpr1 (TNS V1-V3) select TO_CHAR(LOGICAL_DATE, '...
SQL ordered by Gets
Buffer Gets Executions Gets per Exec %Total Elapsed Time (s) %CPU %IO SQL Id SQL Module SQL Text 1.2 TB 2,552,072 486.9 KB 19.12 514.37 99.27 0.00 0mynq29fmat7d getdate_int@ccbdbpr1 (TNS V1-V3) select TO_CHAR(LOGICAL_DATE, '...
705.8 GB 25 28.2 GB 11.39 105.95 72.71 27.95 1hg2wcuapy3y3 JDBC Thin Client select bl1_run_request.run_mod...
234.0 GB 13 18.0 GB 3.78 1,476.63 30.53 66.68 4gz51fphuarsw JDBC Thin Client /* CL_ProcInstScanner_selectAv...
228.4 GB 13 17.6 GB 3.69 924.90 30.09 66.53 6fu3z8pqd2y9g JDBC Thin Client /* CL_WaitScanner_selectWorkab...
190.4 GB 335 582.0 MB 3.07 192.38 99.90 0.00 aty7a3bvqfxxx JDBC Thin Client SELECT COUNT(1) FROM (/* null_...
SQL ordered by Executions
Executions Rows Processed Rows per Exec Elapsed Time (s) %CPU %IO SQL Id SQL Module SQL Text 2,552,072 2,551,077 1.00 514.37 99.27 0.00 0mynq29fmat7d getdate_int@ccbdbpr1 (TNS V1-V3) select TO_CHAR(LOGICAL_DATE, '...
445,868 445,865 1.00 14.05 90.20 0.20 fa311gg43yjyf JDBC Thin Client Select CSM_TRX_1SQ.NEXTVAL fro...
380,095 380,041 1.00 101.08 21.71 83.42 aprfnw5vk6szs java_q4p@ccbappr7 (TNS V1-V3) SELECT ch_objects.obj_id, ch_o...
这个时候通过这三个部分,能够基本定位出问题发生在sql_id 0mynq29fmat7d这个语句上,这个语句就是 一个简单的select查询,查询的表也很小。但是问题就是在10分钟的时间范围内执行了2百多万次,这确实很不正常。从sql order by elapased部分可以看出这个语句占用的 db time比例不高,从sql语句的执行上还是没有问题的,但是通过sql order by gets和execution这两个部分,可以很明显的看到,这条语句是top 1的语句,使用的buffer gets高达1T,这个表中的数据量就几千条数据,大小都是MB级别的,但是在10分钟内却能使用1T的buffer gets,确实让我感觉很意外。
一条简单的sql语句导致的系统问题(r4笔记第51天)相关推荐
- 一条简单的sql语句运行15天的原因分析(r5笔记第17天)
在测试环境中,可能一个测试库中会有几十上百套环境在运行,一般DBA不会去主动干涉测试环境中的一些使用细节,可能问题都是开发测试来反馈给DBA采取做一个被动的处理.今天也算主动了一把,在测试环境中发现了 ...
- 一条简单的更新语句,MySQL是如何加锁的?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Java_老男孩 来源:https://urlify.cn/ ...
- mysql执行一条语句会加锁吗_一条简单的更新语句,MySQL是如何加锁的?
看如下一条sql语句: # table T (id int, name varchar(20)) delete from T where id = 10: MySQL在执行的过程中,是如何加锁呢? 在 ...
- delete语句与reference约束冲突怎么解决_一条简单的更新语句,MySQL是如何加锁的?...
看如下一条sql语句: # table T (id int, name varchar(20)) delete from T where id = 10: MySQL在执行的过程中,是如何加锁呢?在看 ...
- mysql查询第10到第20条记录_“取出数据表中第10条到第20条记录”的sql语句+selecttop用法...
1.首先,select top用法: 参考问题 select top n * from和select * from的区别 select * from table -- 取所有数据,返回无序集合 sel ...
- mysql更新加锁_一条简单的更新语句,MySQL是如何加锁的?
看如下一条sql语句: #tableT(idint,namevarchar(20))deletefromTwhereid=10: MySQL在执行的过程中,是如何加锁呢? 再看下面这条语句: sele ...
- Java学习的第七周之简单的SQL语句
Java学习的第七周之简单的SQL语句 一 简单SQL语句: 1.查询表结构 desc 表名; 2.插入数据 --方式一: 默认全部插入数据INSERT INTO 表名 VALUES (值1,值2,值 ...
- * 执行多条更新的Sql语句
/** * 执行多条更新的Sql语句 */ public boolean UpdataSql(String sql[]){ TestConnect.Connect(); try { sta = Tes ...
- mysql 取出20条数据_“取出数据表中第10条到第20条记录”的sql语句+select top 使用方法...
1.首先.select top使用方法: select * from table -- 取全部数据.返回无序集合 select top n * from table -- 依据表内数据存储顺序取前n ...
最新文章
- 【转】Struts2中转换Date类型的问题
- 【观点】“另类”设计模式
- [JVM-1]Java运行时数据区域
- Java设计模式(7)装饰模式(Decorator模式)
- pythonjson实例_python:JSON的两种常用编解码方式实例解析
- LeetCode 1130. 叶值的最小代价生成树(区间DP/单调栈贪心)
- 计算机窗口设计java实验,Java银行取款异常处理计算器设计图形用户界面设计实验报告.doc...
- 行为型设计模式(1)—— 责任链模式(Chain of Responsibility Pattern)
- Zilliqa的设计构思 第1部分:网络分片
- 根据dpr设置html fontsize,如何为不同移动设备设置html不同的font-size?
- spark加载数据的方式
- Android中AndFix使用
- JavaScript 弹窗
- 体育健身类毕业论文文献有哪些?
- 按键精灵文字识别插件_【买三赠一】iOS按键精灵VIP夏季特惠进行中
- 分布式、高并发、高性能场景(抢购、秒杀、抢票、限时竞答)数据一致性解决方案
- Excel图表设置X轴位置为最底部
- python处理停用词(stopwords)
- 1031 查验身份证 (15 分)
- 语料库资源————(三)