在测试环境中,可能一个测试库中会有几十上百套环境在运行,一般DBA不会去主动干涉测试环境中的一些使用细节,可能问题都是开发测试来反馈给DBA采取做一个被动的处理。今天也算主动了一把,在测试环境中发现了一个大案。首先通过ash查看了下正在运行的session情况,可以很明显看到有几条sql语句竟然已经执行了15天,没错不是15个小时,是15天。对于这种情况,很让人有一种立马出手的冲动。不过先来看看问题,已经15天了,也不在这几分钟着急了。> ksh getash.sh I SID SER# USERNAME OSUSER STA RPID SPID MACHINE PROGRAM ELAP_SEC TEMP_MB UNDO_MB SQL_ID TSPS SQL-- ------ ------ ------------ ---------- --- ------- ------ ---------- -------------------- ----------- ------- ------- ------------- ------ ------------------------------------------------- 1 3030 8253 xxxx xxxxxxxx ACT 1234 19645 testser JDBC Thin Client 15 16:54:42 dch8sxwt6ujvc /* CL_ProcessController_updateProcessById_2 */ UP 1 4353 2389 xxxx xxxxxxxx ACT 1234 7945 testser JDBC Thin Client 15 16:54:42 dch8sxwt6ujvc /* CL_ProcessController_updateProcessById_2 */ UP 1 4921 483 xxxx xxxxxxxx ACT 1234 29822 testser JDBC Thin Client 15 16:54:42 dch8sxwt6ujvc /* CL_ProcessController_updateProcessById_2 */ UP 1 7375 14169 xxxx xxxxxxxx ACT 1234 4290 testser JDBC Thin Client 15 16:54:39 dch8sxwt6ujvc /* CL_ProcessController_updateProcessById_2 */ UP 1 4538 221 xxxx xxxxxxxx ACT 1234 17126 testser JDBC Thin Client 15 16:46:38 dch8sxwt6ujvc /* CL_ProcessController_updateProcessById_2 */ UP 1 957 17975 xxxx xxxxxxxx ACT 16397 18807 testser rman@xxxx (TNS V 00 00:00:11 0004568 STARTED62, 1 2277 47527 xxxx xxxxxxxx ACT 17531 17748 testser rman@xxxx (TNS V 00 00:00:02 0003367 STARTED62, 1 3790 34667 xxxx xxxxxxxx ACT 32656 32658 testser sqlplus@xxxx (TN 00 00:00:01 4k5y59ywjtuhs SELECT /* use_hash(sess,proc,undo,tmp) use_nl(s)*首先让我好奇的是这么长时间的语句,是不是表里的数据量太多了,执行计划出现了很大的性能问题?之前碰到过几次语句问题导致sql运行了好几天的情况,带着疑问来看了下对应的sql语句,是一个简单的update操作。SQL_ID dch8sxwt6ujvc, child number 0-------------------------------------/* CL_ProcessController_updateProcessById_2 */ UPDATE CL1_PROC_CTRL SETCL1_PROC_CTRL.PROC_CTRL_ID = :1 , CL1_PROC_CTRL.HEARTBEAT = :2 ,CL1_PROC_CTRL.STATUS = :3 , CL1_PROC_CTRL.PROC_TYPE = :4 , OPERATOR_ID= :5 , APPLICATION_ID = :6 , DL_SERVICE_CODE = :7 , DL_UPDATE_STAMP =:8 , SYS_UPDATE_DATE = SYSDATE WHERE PROC_CTRL_ID = :9看来核心因素就聚集在表CL1_PROC_CTRL 上了,这是个什么级别的表,是不是数据太多了啊。一查让我大吃一惊,不是数据多,而是只有5条数据。查看执行计划一看也是无可挑剔的。-----------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost |-----------------------------------------------------------------------| 0 | UPDATE STATEMENT | | | | 1 || 1 | UPDATE | CL1_PROC_CTRL | | | ||* 2 | INDEX UNIQUE SCAN| CL1_PROC_CTRL_PK | 1 | 47 | 1 |-----------------------------------------------------------------------好了问题到了这,很多人已经猜出问题所在了,我就继续卖个关子,机会难得,来先看看等待事件吧,这种情况下看等待事件还是一个很有效的方式,直接关联v$session_event来查看。set linesize 200col event format a30col sql_text format a50set pages 50select distinct s.sql_id,s.sid,se.event,se.TOTAL_WAITS,sa.sql_textfrom v$session s left join v$session_event se on s.sid=se.sidleft join v$sqlarea saon s.sql_id=sa.sql_idwhere sa.SQL_TEXT is not nulland sa.sql_id='dch8sxwt6ujvc'order by se.total_waits desc;SQL_ID SID EVENT TOTAL_WAITS ------------- ---------- ------------------------------ ----------- dch8sxwt6ujvc 4538 SQL*Net message from client 7371 dch8sxwt6ujvc 4538 SQL*Net message to client 7371 dch8sxwt6ujvc 3030 SQL*Net message from client 3634 dch8sxwt6ujvc 3030 SQL*Net message to client 3634 dch8sxwt6ujvc 7375 SQL*Net message from client 1398 dch8sxwt6ujvc 7375 SQL*Net message to client 1398 dch8sxwt6ujvc 4353 SQL*Net message from client 1386 dch8sxwt6ujvc 4353 SQL*Net message to client 1386 dch8sxwt6ujvc 4921 SQL*Net message to client 1318 dch8sxwt6ujvc 4921 SQL*Net message from client 1318 dch8sxwt6ujvc 4538 log file sync 1111 dch8sxwt6ujvc 3030 log file sync 908 dch8sxwt6ujvc 4538 SQL*Net more data to client 704 dch8sxwt6ujvc 4538 direct path read 661 dch8sxwt6ujvc 7375 log file sync 349 dch8sxwt6ujvc 4353 log file sync 346 dch8sxwt6ujvc 4921 log file sync 329 dch8sxwt6ujvc 4538 db file sequential read 191 dch8sxwt6ujvc 4538 Disk file operations I/O 19 dch8sxwt6ujvc 4353 db file sequential read 5 dch8sxwt6ujvc 3030 db file sequential read 5 dch8sxwt6ujvc 4353 Disk file operations I/O 4 dch8sxwt6ujvc 3030 Disk file operations I/O 4 dch8sxwt6ujvc 4921 Disk file operations I/O 4 dch8sxwt6ujvc 7375 Disk file operations I/O 4 dch8sxwt6ujvc 4921 db file sequential read 3 dch8sxwt6ujvc 7375 db file sequential read 2 dch8sxwt6ujvc 4538 db file scattered read 2 dch8sxwt6ujvc 4921 enq: TX - row lock contention 1 dch8sxwt6ujvc 4538 enq: TX - row lock contention 1 dch8sxwt6ujvc 3030 enq: TX - row lock contention 1 dch8sxwt6ujvc 7375 enq: TX - row lock contention 1 dch8sxwt6ujvc 4353 enq: TX - row lock contention 1 可以从top等待事件中看出,时间都基本在“SQL*Net message from clien”和“SQL*Net message to client",这些等待事件对于这个问题似乎说明不了什么细节的问题,继续往下看,关键在于最后的几个等待事件,是关于”enq: TX - row lock contention“的。这个问题就能说明原因了。SID_SERIAL ORACLE_USERN OBJECT_NAME LOGON_TIM SEC_WAIT OSUSER MACHINE PROGRAM STATE STATUS LOCK_ MODE_HELD1357778 xxxxxxxx xxxxxxxx JDBC Thin Client WAITING ACTIVE DML Row-X (SX)1357778 xxxxxxxx xxxxxxxx JDBC Thin Client WAITING ACTIVE DML Row-X (SX)1357777 xxxxxxxx xxxxxxxx JDBC Thin Client WAITING ACTIVE DML Row-X (SX)1357774 xxxxxxxx xxxxxxxx JDBC Thin Client WAITING ACTIVE DML Row-X (SX)1357293 xxxxxxxx xxxxxxxx JDBC Thin Client WAITING ACTIVE DML Row-X (SX)1519 IS BLOCKING 3030,82531519 IS BLOCKING 4353,2389可以从blocking session中看出,这个罪魁祸首的session是1519的session.我们来看看这个session,状态是inactive的,登录时间是半个月之前了。 SID SERIAL# USERNAME OSUSER MACHINE PROCESS TERMINAL TYPE LOGIN_TIME STATUS---------- ---------- --------------- --------------- -------------------- --------------- --------------- ---------- ------------------- -------- 1519 995 XXXXXXX XXXXXXX XXXXXXX 1234 unknown USER 2015-04-08 17:19:08 INACTIVE看来这个session是由于某种原因没有正常终止,导致剩下的几个session都挂在这个点上了。把这个问题放大,就是15天,从测试的反馈来看似乎这个环境也没有用到,所以没有得到任何反馈。 我还是和对应的team做个简单的沟通为好,然后就开始kill掉这个session.SQL> alter system kill session '1519,995';System altered.kill的过程很快,再次查看v$lock中的等待哪些session等待就正常了,但是查看ash的时候发现这几个session还是存在,在blocking session的内容中,发现出现了一个新的session 380,这个session是今天创建的,看来和我kill的操作也有一定关联。Blocking Session Details380 IS BLOCKING 3030,8253380 IS BLOCKING 4353,2389380 IS BLOCKING 4538,221380 IS BLOCKING 4921,483380 IS BLOCKING 7375,14169做了确认,kill掉,操作完成之后发现这个问题就修复了。那几个active的session很快就处理了,这个时候结果似乎已经不重要了。这个案例带给我们的启示就是任何细小的问题都放大都可能造成很严重的影响,有些问题我们关注就会及时处理,有些问题忽略或者疏忽就会不断膨胀,成为一个大麻烦。DBA也需要在这个过程中去取舍,不断调整自己的状态,主动发现问题还相比于得到反馈来说要更加从容。

一条简单的sql语句运行15天的原因分析(r5笔记第17天)相关推荐

  1. sql语句查询过慢的原因分析

    有时候你在使用sql语句查询数据库,sql语句写得好正确,但则发现执行查询的时候很慢呢?数据量也不是太大,你知道其中的原因吗?本文给大家讲解一下sql查询过慢的48种原因分析,请阅读. 1.没有索引或 ...

  2. 一条简单的sql语句导致的系统问题(r4笔记第51天)

    新年,给大家拜年了.祝大家工作顺利,万事如意.今天照例简单检查了系统的情况,发现在客户的服务器在下午的3-5点这个时间段,数据库负载略有上升,但是幅度不大,因为生产的awr抓取频率是10分钟,所以还是 ...

  3. mysql 取出20条数据_“取出数据表中第10条到第20条记录”的sql语句+select top 使用方法...

    1.首先.select top使用方法: select * from table --  取全部数据.返回无序集合 select top n * from table -- 依据表内数据存储顺序取前n ...

  4. mysql查询第10到第20条记录_“取出数据表中第10条到第20条记录”的sql语句+selecttop用法...

    1.首先,select top用法: 参考问题 select top n * from和select * from的区别 select * from table -- 取所有数据,返回无序集合 sel ...

  5. Java学习的第七周之简单的SQL语句

    Java学习的第七周之简单的SQL语句 一 简单SQL语句: 1.查询表结构 desc 表名; 2.插入数据 --方式一: 默认全部插入数据INSERT INTO 表名 VALUES (值1,值2,值 ...

  6. 一条简单的更新语句,MySQL是如何加锁的?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Java_老男孩 来源:https://urlify.cn/ ...

  7. mysql执行一条语句会加锁吗_一条简单的更新语句,MySQL是如何加锁的?

    看如下一条sql语句: # table T (id int, name varchar(20)) delete from T where id = 10: MySQL在执行的过程中,是如何加锁呢? 在 ...

  8. delete语句与reference约束冲突怎么解决_一条简单的更新语句,MySQL是如何加锁的?...

    看如下一条sql语句: # table T (id int, name varchar(20)) delete from T where id = 10: MySQL在执行的过程中,是如何加锁呢?在看 ...

  9. mysql更新加锁_一条简单的更新语句,MySQL是如何加锁的?

    看如下一条sql语句: #tableT(idint,namevarchar(20))deletefromTwhereid=10: MySQL在执行的过程中,是如何加锁呢? 再看下面这条语句: sele ...

最新文章

  1. linux 提取字符串一部分,Linux Shell 截取字符串的方法示例
  2. 关于数据库的增删改查
  3. AI:2020年6月22日北京智源大会演讲分享之认知神经基础专题论坛——15:00-15:40刘嘉教授《From Representation to Comp: the Cognitive N》
  4. 一分钟带你看懂UML图
  5. POJ3277(矩形切割)
  6. (3)Python3笔记之变量与运算符
  7. 转:GridView 模板列中的数据绑定
  8. python函数之作用域
  9. 【Kubernetes系列】Kubernetes组件介绍
  10. mysql优化-面试题
  11. linux 工业 网络协议,简单了解Linux TCP/IP协议栈
  12. 初探facebook的iOS/Mac OS X动画框架pop
  13. tf.slim构建vgg16和resnet网络实现图像分类,亲测准确率99%
  14. web前端网页制作课作业:使用HTML+CSS技术制作中华传统文化网站【文房四宝】学生网页设计作品 简单静态HTML网页作品
  15. Python数据分析项目-微信好友数据分析
  16. caj格式如何转成pdf格式
  17. 不忘初心,不负韶华,17款迈巴赫S400升级20款迈巴赫S680包围
  18. 【论文阅读】 BPR: Bayesian Personalized Ranking from Implicit Feedback
  19. GXNNCTF 2018 We_ax WriteUp 第三届南宁市网络安全技术大赛
  20. 案例分享:建设企业网上办公综合平台

热门文章

  1. mac谷歌浏览器怎么登陆账户_mac怎么下chrome浏览器
  2. linux find命令忽略权限不够的目录
  3. DNS 隧道数据集调研
  4. 地铁隧道维修检测三维扫描_隧道维修3D扫描_隧道3D激光扫描建模
  5. map、multimap
  6. 少儿学编程系列 --- 如何使用 turtle 画风车
  7. 【东方博宜】【基础】棋盘里的麦子?
  8. 超级旋风1.6.140发布(10.09)
  9. Python修改pip镜像源为国内镜像源(永久方法)
  10. 【Shopee市场周报】虾皮拉美市场运动品类选品攻略