当前位置: 首页 > news >正文

Oracle临时表空间为何暴涨?

        昨天在做测试的时候发现一个非常奇怪的问题:在程序的查询模块中做查询的时候,开始速度很快,但是过了一段时间以后速度就变慢,最后干脆就报错,不工作了。在排错的过程中,发现Oracle临时表空间暴涨,达到了几十个GB,在Oracle中对Session进行跟踪,发现磁盘空间还在不停的消耗,几乎是每隔5s,临时表空间就会增长500MB左右,最后报错的原因应该是因为没有磁盘空间可以分配造成的。这是一件十分恐怖的事情。

        我们知道Oracle临时表空间主要是用来做查询和存放一些缓存的数据的,磁盘消耗的一个主要原因是需要对查询的结果进行排序,如果没有猜错的话,在磁盘空间的(内存)的分配上,Oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB,如果还有增长,那么依此类推,临时表空间始终保持在一个最大的上限。像上文提到的恐怖现象经过分析可能是以下几个方面的原因造成的。
        1. 没有为临时表空间设置上限,而是允许无限增长。但是如果设置了一个上限,最后可能还是会面临因为空间不够而出错的问题,临时表空间设置太小会影响性能,临时表空间过大同样会影响性能,至于需要设置为多大需要仔细的测试。
        2.查询的时候连表查询中使用的表过多造成的。我们知道在连表查询的时候,根据查询的字段和表的个数会生成一个迪斯卡尔积,这个迪斯卡尔积的大小就是一次查询需要的临时空间的大小,如果查询的字段过多和数据过大,那么就会消耗非常大的临时表空间。
       3.对查询的某些字段没有建立索引。Oracle中,如果表没有索引,那么会将所有的数据都复制到临时表空间,而如果有索引的话,一般只是将索引的数据复制到临时表空间中。
       针对以上的分析,对查询的语句和索引进行了优化,情况得到缓解,但是需要进一步测试。

       总结:
       1.SQL语句是会影响到磁盘的消耗的,不当的语句会造成磁盘暴涨。
       2.对查询语句需要仔细的规划,不要想当然的去定义一个查询语句,特别是在可以提供用户自定义查询的软件中。
       3.仔细规划表索引。
       如果有那位高人遇到过类似的问题,请给予您的建议。

相关文章:

  • 对一个日期型对象怎么加一年,或加一个月
  • VS中使用git
  • 开始关注D语言
  • 4、Linux常用命令
  • 跨域的环境下 onbeforunload事件
  • Kubernetes哪一点最打动你?或者,它发布过的哪一项特性让你认为最厉害?
  • 老外写的正则表达式的类
  • Cookie和Session
  • 浙江金华 图论整理
  • [转]成功创业家的心理
  • linux安装jdk
  • 经典英语摘录
  • Message Loop 原理及应用
  • JVM内存区域划分
  • [转载]我的个人信息雷达——580k使用手记
  • JavaScript-如何实现克隆(clone)函数
  • 【node学习】协程
  • 2017届校招提前批面试回顾
  • Centos6.8 使用rpm安装mysql5.7
  • css属性的继承、初识值、计算值、当前值、应用值
  • Docker 笔记(2):Dockerfile
  • If…else
  • Java IO学习笔记一
  • Javascript基础之Array数组API
  • JS数组方法汇总
  • Redux 中间件分析
  • Terraform入门 - 1. 安装Terraform
  • Vue2.x学习三:事件处理生命周期钩子
  • VuePress 静态网站生成
  • yii2中session跨域名的问题
  • 翻译--Thinking in React
  • 分类模型——Logistics Regression
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 技术胖1-4季视频复习— (看视频笔记)
  • 十年未变!安全,谁之责?(下)
  • 算法之不定期更新(一)(2018-04-12)
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 仓管云——企业云erp功能有哪些?
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (10)STL算法之搜索(二) 二分查找
  • (13)Hive调优——动态分区导致的小文件问题
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (42)STM32——LCD显示屏实验笔记
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (SpringBoot)第二章:Spring创建和使用
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (七)Knockout 创建自定义绑定
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (算法)Game
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)重识new
  • (转载)Linux 多线程条件变量同步