使用ash分析ORA-01652问题(r4笔记第36天)
今天在检查生产库的问题的时候,收到开发的邮件,他们在运行一个job的时候报出了ora的错误,想让我们来看一下是什么原因。 ora错误是01652的错误,单纯来看是由于临时表空间不足造成的。
ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
因为问题发生在上午,从shared pool里查看对应的sql已经查不到了,这个时候使用ash是一个很方便的方式。 参考问题发生的时间点,抓取了一个4分钟的ash报告。 首先看到时间基本都消耗在了两个程序上,其中一个还是toad连接进来的session.
Module |
Action |
%Activity |
||
---|---|---|---|---|
USG01 |
EnvelopeMT@ccbdbpr2 (TNS V1-V3) |
72.81 |
UNNAMED |
72.81 |
TOAD 11.0.0.116 |
21.58 |
UNNAMED |
21.58 |
想看看具体的session情况,可以结合等待事件来分析一下,这个时候就可以很清楚的看到那个时间段的操作了。
% Activity |
% Event |
Program |
XIDs |
||||
---|---|---|---|---|---|---|---|
6937, 1129 |
27.91 |
db file sequential read |
21.29 |
USG1C |
EnvelopeMT@...2 (TNS V1-V3) |
148/240 [ 62%] |
0 |
CPU + Wait for CPU |
6.04 |
42/240 [ 18%] |
0 |
||||
3992,34841 |
21.58 |
direct path read |
18.99 |
XXXXXX |
Toad.exe |
132/240 [ 55%] |
0 |
CPU + Wait for CPU |
2.59 |
18/240 [ 8%] |
0 |
||||
6844,29137 |
10.50 |
db file sequential read |
10.22 |
USG1C |
EnvelopeMT@...2 (TNS V1-V3) |
71/240 [ 30%] |
0 |
384, 4043 |
9.93 |
db file sequential read |
6.62 |
PRDUSG1C |
pm1EnvelopeMT@...2 (TNS V1-V3) |
46/240 [ 19%] |
23 |
CPU + Wait for CPU |
3.31 |
23/240 [ 10%] |
14 |
||||
7130, 5817 |
5.18 |
db file sequential read |
5.04 |
PRDUSG1C |
pm1EnvelopeMT@...2 (TNS V1-V3) |
35/240 [ 15%] |
0 |
但是分析sql语句的时候却没有发现toad相关的session执行的sql语句。
Planhash |
% Activity |
% Event |
% RwSrc |
Event |
||||
---|---|---|---|---|---|---|---|---|
28kbzsqpfpp7j |
421773076 |
1 |
27.91 |
db file sequential read |
21.29 |
TABLE ACCESS - BY LOCAL INDEX ROWID |
18.56 |
SELECT RE.L3_NET_START_TIME, R... |
CPU + Wait for CPU |
6.04 |
SORT - ORDER BY |
3.02 |
|||||
0g5pzj39xvd1a |
2387198001 |
30 |
7.77 |
db file sequential read |
6.76 |
UPDATE |
6.47 |
UPDATE RATED_EVENT SET L3_NET_... |
CPU + Wait for CPU |
1.01 |
UPDATE |
0.86 |
|||||
gqy0gxb05ycg4 |
958688106 |
28 |
5.76 |
CPU + Wait for CPU |
5.76 |
SELECT STATEMENT |
3.45 |
/* */ SELECT CYCLE_CODE, CYCLE... |
cwwa33b2a8byf |
421773076 |
1 |
5.32 |
db file sequential read |
5.32 |
TABLE ACCESS - BY LOCAL INDEX ROWID |
5.18 |
SELECT RE.L3_NET_START_TIME, R... |
2c88v51gn6zxt |
421773076 |
1 |
5.04 |
db file sequential read |
4.89 |
TABLE ACCESS - BY LOCAL INDEX ROWID |
4.89 |
SELECT RE.L3_NET_START_TIME, R... |
从以上问题可以简单的分析出,资源的消耗在一个job和toad相关的session上,至于toad的进程在那个时间点在做什么通过ash还没有抓取到更详细的信息。但是可以从等待事件来看,是在做一个大查询。
根据系统的负载最后给出了几点建议。 首先是根据报告对那个时间点操作的客户进行确认,是否做了一些额外的操作。 然后从目前的系统角度来看,这个库的temp空间本身也存在着一定的不足,目前只有8G,需要做一定的扩展,因为库中有几个大表,都在百G级别,一些排序操作可能会消耗相当大的temp空间。 最后和开发确认资源消耗较多的sql语句。(28kbzsqpfpp7j)
开发给出的反馈是这个job的程序很久没有更新了。我简单检查了一下最近的执行历史做了确认。 所以问题就锁定在两个方面,一个是toad相关的session导致的,一个是temp空间不足造成的(一种可能甚至是toad对应的session消耗了一部分的temp空间,到了sql_id(28kbzsqpfpp7j) temp空间或者说sql_id在做排序操作的时候消耗的temp空间过大) 排除了其他原因之后,再次尝试跑就没有问题了。对于临时表空间的扩展也在稍后做了添加。
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构
- 糟糕了!这次新版微信,要干死所有小游戏了!
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(59)-BLL层重构
- 除了奇奇怪怪的机器人们,2017年人工智能还干了哪些“蠢事”?
- 区块链搬砖的坑及有效鉴别方法
- 英伟达回应禁令:研究人员放心用不更新驱动就没影响
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(88)-Excel导入和导出-主从表结构导出
- WCF中的Binding模型之六(完结篇):从绑定元素认识系统预定义绑定
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(57)-插件---ueditor使用
- 何为正则表达式?要他有何用?
- 向silverlight传递自定义参数
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(87)-MVC Excel导入和导出
- sl从程序集中读取xaml文件
- WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[实现篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一行能装逼的 JavaScript 代码
- python 技术篇-时间戳的获取,记录程序处理时间
- 基于SpringBoot AOP面向切面编程实现Redis分布式锁
- Python+Selenium 技巧篇-svg标签内元素的xpath定位方式
- 小书MybatisPlus第5篇-Active Record模式精讲
- Python 语法问题-module ‘pip._internal‘ has no attribute ‘pep425tags‘. 原因及解决办法,32位、64位查看pip支持万能方法
- 总在说 Spring Boot 内置了 Tomcat 启动,那它的原理你说的清楚吗?
- JavaScript 技巧篇-js增加延迟时间解决单击双击事件冲突,双击事件触发单击事件
- Python 技术篇-sha256()加密的使用方法,sha1、md5加密方法
- Python 技术篇-如何打印一段文字,用友云霸气控制台颜文字打印
- Python 技术篇-获取秒级时间戳、毫秒级时间戳
- Python 技术篇-基于随机数的uuid码的生成
- BAT 脚本技术-利用bat批处理脚本静态指定ip地址、自动获取ip地址设置
- Oracle 技巧篇-快速批量删除当前数据库连接的用户,一键清空所有session会话方法
- Spring Security 中如何细化权限粒度?