日期:2014-05-18  浏览次数:20449 次

优化!!同一查询语句,两台机器执行计划不同、并行度问题
两台服务器,CPU及内存不同,但多是多核

相同查询如句,一台上执行计划是索引查询,另一台则被分为 索引扫描+并行度(信息提示什么分区列) ,两库、表统计信息、结构完全一样。

被分为 索引扫描+并行度 的CPU时长在1000ms左右,而使用索引查询的只有10ms左右

是什么原因引起了不同的执行计划?如何解决???




------解决方案--------------------
先MARK考虑一下
------解决方案--------------------
并行度

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

------解决方案--------------------
是不是你并行部分没有用到索引 检查一下
------解决方案--------------------
不行的话建立包含性列 用索引覆盖试下
------解决方案--------------------
站位学习!
------解决方案--------------------
正常,不同的硬件就是会引起执行计划的不同。
------解决方案--------------------
这样的问题我遇到过多次了,就算是内存相同,cpu只要不同,就有可能产生不同的执行计划。
------解决方案--------------------
信息提示什么分区列)

是因为有分区列?这东西太深奥
------解决方案--------------------
可以限制一下并行度试试
如使用
select * from tbname option(maxdop 1)
------解决方案--------------------
with (index(xxx)) 
一般都是统计信息的问题导致计划不同
更新统计信息基本都能解决
或者干脆帮他指定索引
------解决方案--------------------
尝试两种解决办法:
1.显示配置option(maxdop 1)
2.修改全局:
SQL code

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

------解决方案--------------------
学习中!帮顶。。。