ITPub博客

首页 > 数据库 > Oracle > Oracle的奇葩设置之自动统计信息更新

Oracle的奇葩设置之自动统计信息更新

原创 Oracle 作者:清风艾艾 时间:2015-02-28 11:03:43 0 删除 编辑
    目前,oracle数据库版本已经到达12C了,数据库SQL的执行基本都是基于CBO开销模式的。但是,对于应用维护人员不尽理解数据库的工作原理,他们为了最求数据库的高性能,创建完数据库,却禁用了数据库统计信息自动更新的JOB。在联通,通过如下方法查看,发现很多数据库的统计信息更新作业都被禁用了。
SQL> select owner,job_name,enabled from dba_scheduler_jobs where job_name='GATHER_STATS_JOB';
OWNER                     JOB_NAME                 ENABL
------------------------------ ------------------------------  -----
SYS                         GATHER_STATS_JOB     FALSE
    这样,虽然能暂时换来数据库的高性能,但是这并不是应用最求应用系统最好性能的根本方法。反而,他们关闭了数据库统计信息自动更新任务,却又忘记关注数据库对象的统计信息,更容易导致锁表、全表扫描、表的高水位问题。因为,数据库对象的统计信息不再自动更新,SQL执行失去了CBO开销模式评估的最有效的信息,导致SQL执行发生一系列的问题。今天,ERP项目管理就发现一个奇特的问题:表只有143M,使用select进行记录数统计时执行20多分钟没有结果,却被数据库强制断开了连接;在综合网管系统中发现很多ORA-01555的报错,找到一个SQL执行老失败,查看SQL涉及的表的统计信息也是2年前的,再一看数据库的对象统计信息自动更新任务也是被禁用了的。
    其实,如果想从统计信息平衡应用的好性能,可以人为的做个crontab,人为判断数据库空闲时间,开启数据库统计信息更新功能,执行数据库统计信息更新。在其他的时间段可以暂时停止该任务的执行。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29357786/viewspace-1443509/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
个人喜欢IT行业,目前从事数据库工作,包括Oracle、mysql、mongodb、sqlserver等数据库的维护,喜欢专研开发技术,尤其对java程序的开发感兴趣。工作经历上,在中国联通系统集成公司、中公网医疗信息技术有限公司做过数据库技术支持;目前在海量数据,负责华东区oracle、mysql、mongodb的维护工作。

注册时间:2015-01-30

  • 博文量
    251
  • 访问量
    544818