两台服务器,CPU及内存不同,但多是多核相同查询如句,一台上执行计划是索引查询,另一台则被分为 索引扫描+并行度(信息提示什么分区列) ,两库、表统计信息、结构完全一样。被分为 索引扫描+并行度 的CPU时长在1000ms左右,而使用索引查询的只有10ms左右是什么原因引起了不同的执行计划?如何解决???

解决方案 »

  1.   

    DBCC   CHECKDB   (数据库名)   
          
      DBCC   CHECKTABLE   (表名)   
        
      DBCC   CHECKDB有多个修复选项,其中一个是REPAIR_ALLOW_DATA_LOSS   
        
      执行由   REPAIR_REBUILD   完成的所有修复,包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误,以及删除已损坏的文本对象。这些修复可能会导致一些数据丢失。修复操作可以在用户事务下完成以允许用户回滚所做的更改。如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。修复完成后,备份数据库。   
        
      不过,需要先备份数据库,用这个选项可以修复,但可能丢失一部分数据。   
      
      

  2.   

    这样的问题我遇到过多次了,就算是内存相同,cpu只要不同,就有可能产生不同的执行计划。
      

  3.   

    可以限制一下并行度试试
    如使用
    select * from tbname option(maxdop 1)
      

  4.   

    with (index(xxx)) 
    一般都是统计信息的问题导致计划不同
    更新统计信息基本都能解决
    或者干脆帮他指定索引
      

  5.   

    尝试两种解决办法:
    1.显示配置option(maxdop 1)
    2.修改全局:
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    sp_configure 'max degree of parallelism', 1;
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE WITH OVERRIDE;
    GO