优化!!同一查询语句,两台机器执行计划不同、并行度问题

贾桂权 2010-01-13 04:47:44
两台服务器,CPU及内存不同,但多是多核

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

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

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


...全文
282 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
DB牛牛 2012-04-16
  • 打赏
  • 举报
回复
并行查询到第采用多少进程数除了跟操作的复杂程度相关外,还直接跟当时的服务器状态相关,如是否有足够的进程数等等。所以,在不同的时间,即使是相同的数据、相同的操作,其并行查询所用的进程数也可能不同。其所需要的时间也就不同了。因为只有在并行查询真正进行的时候,数据库引擎才去收集当前系统的工作负荷,如进程数,和其他对一些配置信息,然后数据库才确定最佳的并行进程数。从查询开始,到这个查询作业结束,将一直采用这个进程数。如果下次要继续查询,则数据库引擎会继续收集这些信息。此时,如果系统工作负荷有所改善,在数据库可能会采用更多的进程数来执行这个查询。从而查询作业的性能会更加的高。相反,如果此时系统的负荷比前一次查询要重了,则数据库就可能会采用比较少的进程来处理这个作业。此时,第二次查询的速度反而更慢了。所以,如果在数据库服务器中同时部署了其他应用,则其他应用所占用系统资源的多少也会对并行执行产生难以估测的影响。
jack15850798154 2010-01-14
  • 打赏
  • 举报
回复
学习中!帮顶。。。
nzperfect 2010-01-13
  • 打赏
  • 举报
回复
尝试两种解决办法:
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
贾桂权 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 perfectaction 的回复:]
这样的问题我遇到过多次了,就算是内存相同,cpu只要不同,就有可能产生不同的执行计划。
[/Quote]

主要是因为主服务器上的被并行度了,效率较低,不然也不弄这个。
lweia 2010-01-13
  • 打赏
  • 举报
回复
with (index(xxx))
一般都是统计信息的问题导致计划不同
更新统计信息基本都能解决
或者干脆帮他指定索引
nzperfect 2010-01-13
  • 打赏
  • 举报
回复
可以限制一下并行度试试
如使用
select * from tbname option(maxdop 1)
SQL77 2010-01-13
  • 打赏
  • 举报
回复
信息提示什么分区列)

是因为有分区列?这东西太深奥
nzperfect 2010-01-13
  • 打赏
  • 举报
回复
这样的问题我遇到过多次了,就算是内存相同,cpu只要不同,就有可能产生不同的执行计划。
贾桂权 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fredrickhu 的回复:]
不行的话建立包含性列 用索引覆盖试下
[/Quote]

两台机器都用到这个索引,但别一台为扫描+并行度
nzperfect 2010-01-13
  • 打赏
  • 举报
回复
正常,不同的硬件就是会引起执行计划的不同。
mxc1225 2010-01-13
  • 打赏
  • 举报
回复
站位学习!
贾桂权 2010-01-13
  • 打赏
  • 举报
回复
--小F-- 2010-01-13
  • 打赏
  • 举报
回复
不行的话建立包含性列 用索引覆盖试下
--小F-- 2010-01-13
  • 打赏
  • 举报
回复
是不是你并行部分没有用到索引 检查一下
--小F-- 2010-01-13
  • 打赏
  • 举报
回复
DBCC   CHECKDB   (数据库名)   

DBCC CHECKTABLE (表名)

DBCC CHECKDB有多个修复选项,其中一个是REPAIR_ALLOW_DATA_LOSS

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

不过,需要先备份数据库,用这个选项可以修复,但可能丢失一部分数据。
SQL77 2010-01-13
  • 打赏
  • 举报
回复
并行度

这个不懂,帮顶
--小F-- 2010-01-13
  • 打赏
  • 举报
回复
先MARK考虑一下
"plist图片查看工具 v1.2"是一款专为Mac用户设计的应用程序,旨在帮助开发者和设计师更方便地管理和查看.plist格式的图片资源。在iOS和Cocos2d-x游戏开发中,.plist文件通常用于存储图像序列,如动画帧或精灵表,以便于程序加载和播放。这款工具的最新更新v1.2版增强了用户体验和功能性。 更新后的功能之一是允许用户通过双击图块列表上的图块名称或大图上的图块来快速复制图块名称到剪贴板。这一改进极大地提升了工作效率,用户不再需要手动输入或复制这些名称,尤其在处理大量图块时,节省了宝贵的时间。 新添加的“导出图块”功能是这次更新的亮点。这个功能使得用户能够将查看的图块直接导出为所需的文件格式,这可能是PNG、JPG或其他常用的图像格式。这对于需要将单个图块用于其他项目,或者进行进一步编辑的开发者来说非常实用。它简化了从.plist文件中提取特定图像的过程,避免了在不同软件之间切换的繁琐操作。 Cocos2d-x是一个广泛使用的开源2D游戏开发框架,支持多种平台,包括iOS、Android和Mac等。.plist图片查看工具与Cocos2d-x的结合,为开发者提供了一个直观的界面,以管理他们在游戏中使用的图像资源。通过这款工具,开发者可以预览和调整Cocos2d-x项目中的精灵表和动画,确保游戏视觉效果的准确性和流畅性。 在实际应用中,例如在创建角色动作或游戏场景的动画时,开发者可以利用此工具快速检查每个帧的细节,然后轻松导出需要的图块进行微调。此外,这个工具还可以用于教学和学习,帮助初学者理解.plist文件的结构和工作原理。 "plist图片查看工具 v1.2"是一款针对Cocos2d-x开发者和设计师的强大辅助工具,其最新的更新提升了用户交互性和实用性,为.plist文件的管理和使用提供了便利。无论是快速复制图块名称还是导出单个图块,这些功能都大大提高了工作效率,降低了开发过程中的复杂性。对于那些频繁处理.plist格式图像资源的人来说,这无疑是一个不可或缺的利器。

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧