• 如何排查Oracle表空间不足问题


    给业务采集数据的过程中,执行脚本报错,Ora-01652:unable to extend temp segment by 128 in tablespace TEMP。

    查阅了oracle的错误代码说明:意思是指temp表空间无法自动扩展temp段。

    这种问题一般有两种原因:

    一是临时表空间空间太小,二是不能自动扩展。

    分析过程:
    temp表空间主要是用作需要排序的操作。
    1.临时表空间 是用于在进行排序操作(如大型查询,创建索引和联合查询期间存储临时数据)每个用户都有一个临时表空间。
    2.对于大型操作频繁,(大型查询,大型分类查询,大型统计分析等),应指定单独的临时表空间,以方便管理。
    3.分配用户单独临时表空间,一般是针对大型产品数据库,OLTP数据库,数据库仓库对于小型产品不需要单独制定临时表空间,使用默认临时表空间。
    正常情况下,一个sql执行之后,返回结果后系统会自动收回分配给这个用户的空间。以便可以把此部分空间再分配给其他用户。
     
    查看临时表空间信息:
    select * from dba_tablespaces;
    select * from dba_temp_files;
    select * from v$tempfile
     
    看一个执行计划的例子:
    PLAN_TABLE_OUTPUT                                                              
    ----------------------------------------------------------------------------------------------------                                    
    | Id  | Operation                     |  Name                  | Rows  | Bytes |TempSpc| Cost  |                                   
    |   0 | SELECT STATEMENT  |                             |  9023K|  9130M|       |  3579K|                                   
    |   1 |  SORT ORDER BY       |                             |  9023K|  9130M|    19G|  3579K|
    |*  2 |   HASH JOIN                 |                             |  9023K|  9130M|       |   439 |                                   
    |   3 |    TABLE ACCESS FULL          | ENROL_EXAMINEE              | 15146 |   310K|       |   231 |                                   
    |*  4 |    TABLE ACCESS BY INDEX ROWID| ENROL_EXAMINEE              |   596 |   591K|       |     2 |                                   
    |   5 |     NESTED LOOPS              |                             |  4171 |  4236K|       |   170 |         
    |   6 |      TABLE ACCESS FULL        | BASE_SPECIALITY             |    84 |  2016 |       |     2 |       
    |*  7 |      INDEX RANGE SCAN         | EXAMINEE_DEFAULTSPEC_INDEX  |   202 |       |       |     1 |         
    PLAN_TABLE_OUTPUT                                                              
    --------------------------------------------------------------------------------
    Predicate Information (identified by operation id):                            
    ---------------------------------------------------                            
     
    由上面的执行计划可以看出,临时表空间已经扩展到了19G。这会把临时表空间全部吃掉。
    如果再进行排序、分组等操作,会更加消耗资源,这时应该从sql语句本身来找问题。
     
    总结,这种报错,90%以上的概率是执行计划太差导致的,重点检查脚本性能
     
     
                                          
  • 相关阅读:
    B+树的Copy-on-Write设计
    so库链接和运行时选择哪个路径下的库?
    Xapian索引-文档检索过程分析之匹配百分比
    Xapian索引-文档检索过程分析
    Xapian的内存索引-添加文档
    Xapian的内存索引
    Xapian使用入门
    一个std::sort 自定义比较排序函数 crash的分析过程
    编译GCC4.8.2
    使用C++11的一点总结
  • 原文地址:https://www.cnblogs.com/yuanjia2717/p/10447863.html
Copyright © 2020-2023  润新知