最近在给客户做数据表分析过后发现业务系统运行时,执行部份SQL时CPU使用率很高达到100%,在分析之前根本不会发生这种情况的,网上搜了一下说分析表后可能会导致系统执行计划的改变,在哪位对analyze table精通的过来帮小弟解释下呢!

解决方案 »

  1.   

    就是执行计划变了。
    现在的任务就是找出占cpu最多的sql是什么。
    select * from v$sqlarea order by cpu_time desc,然后调整其执行计划。
      

  2.   

    关键还是找出占CPU过高的SQL
    再根据情况进行改进
    和分析表没太大关系
    分析表只是收集下统计数据而已
      

  3.   

    正是因为表分析,导致了sql使用了错误的执行计划,从而引起cpu高消耗。
      

  4.   

    错误的执行计划?这个"错误的"你是如何来理解的呢?
    分析表了以后oracle自然会根据收集来的表的现有统计数据作出执行计划的判断啊你说的"错误的"是指仅仅因为新的执行计划执行比较慢 就认为是错误的?望指点一下~
      

  5.   

    做一些Oracle的监控吧。找出占用资源多的地方分析一下
      

  6.   

    先找出TOP CPU的SQL,然后看看其执行计划。
    再用HINT和优化器模式改变其执行计划,看看有什么不妥。
      

  7.   

    可以做个AWR分析一下。
    抓出占用cpu多的top sql,查看执行计划。看sql是否有问题。
    1.analyze table最好在业务不繁忙的时候做
    2.analyze table 不一定能提高效率。
    3.检查top sql中的表是否产生了行迁移
    select table_name, num_rows, chain_cnt
      from user_tables
     where num_rows > 1000
       and chain_cnt > 1
     order by chain_cnt desc
      

  8.   

    谢谢各位了,是SQL执行计划在表ANALYZE后改变了。