消除临时表空间暴涨的方法

  

  ,关于消除临时ts暴涨的方法   
  ,,经常有人问临时表空间暴涨的问题,以及如何回收临时表空间,由于版本的不同,方法显然也多种多样,但这些方法显示是治标不治本的办法,只有深刻理解临时表空间快速增加的原因,才能从根本上解决临时ts的问题。   

  

  是什么操作在使用临时ts吗?   
  ——索引创建或重创建又是;   
  ——订单或组BY    
  ——不同的操作又是;   
  ——工会,相交,MINUS    
  ——分类合并连接只;   
  ——分析操作   
  ——有些异常将会引起临时暴涨   

  

  ,   

  

  ,,所以,在处理以上操作时,dba需要加倍关注临时的使用情况,v $ sort_segment字典可以记载临时的比较详细的使用情况,而v sort_usage美元将会告诉我们是谁在做什么。   

  

  完成选择tablespace_name current_user、total_blocks used_blocks, free_blocks从v $ sort_segment;   
  TABLESPACE_NAME current_user TOTAL_BLOCKS USED_BLOCKS FREE_BLOCKS   
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  临时1 63872 30464 33408   
  完成选择用户名、session_addr sqladdr, sqlhash v sort_usage美元   
  用户名SESSION_ADDR SQLADDR SQLHASH   
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  网吧C0000000D7EF99E8 C0000000E1BFE970 4053158416   

  

  然后通过多表联接,我们可以找出更详细的操作:   
  完成选择se.username se.sid、su.extents su.blocks * to_number(空白(p.value))空间,表空间,segtype, sql_text从v $ sort_usage苏,v $参数p, v $会话,v $ sql年代p.name=& # 39; db_block_size& # 39;和su.session_addr=addr和苏s.hash_value=https://www.yisu.com/zixun/su.sqlhash和s.address=qladdr order by se.username se.sid;   
  用户表空间SEGTYPE SID扩展空间   
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
  SQL_TEXT   
  -------------------------------------------------------------------------   
  网吧42 238 249561088临时排序   
  从系统选择1。流美元_prepare_ddl p (p。global_flag=1,: 1是null)或(p。global_flag=0和p.usrid=: 2))和rownum=1   

  

  本例应该是由一些异常引起的,其实大多数情况下排序都会在几乎内结束,如果在某种操作的若干秒内刚好就捕获了该SQL,应该走狗屎运的事情,即你知道某个SQL将会发生排序操作,当你想捕抓它们时,发现它们已排序完经了,排序完毕后排序段会被smon清除。但很多时间,我们则会遇到临时段没有被释放,临时表空间几乎满的状况,这时该如何处理呢?   

  

  metalink上推荐的方法收集整理如下   
  ——重启实例   
  重启实例重启时,smon进程会完成临时段释放,不过很多的时侯我们的库是不允许的,   
  所以这种方法缺应用机会不多,不过这种方法还是很好用的,如果你的实例在重启后段   
  没有被释放,这种情况就需要慎重对待。   
  ——修改参数(仅适用于8日及8我以下版本)   
  完成修改表空间临时增加1;   
  完成修改表空间临时增加0;   
  ——合并碎片   
  完成修改表空间临时合并;   
  ——诊断事件   
  完成改变会话设置事件& # 39;即时跟踪名称DROP_SEGMENTS四级& # 39;,   
  说明:temp表空间的TS #为3,所以TS # + 1=4   
  ——重建临时   
  完成修改数据库tempfile & # 39;……& # 39;下降;   
  完成修改表空间临时添加tempfile & # 39;……& # 39;;   

  

  可以说,以上的方法都是治标不治本的,因为临时增长过快显然是由于磁盘排序过的多,造成磁盘排序的原因也很多,比如排序面积较小等原因,当然,排序区设置多大才合理?这个当然需要满足内存排序大于99%以上哦。   

  

  目标实例效率百分比(100%)   
  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~   
  缓冲Nowait %: 100.00重做Nowait %: 99.99   

消除临时表空间暴涨的方法