【发布时间】:2011-02-16 02:09:33
【问题描述】:
我的任务是优化遗留系统中一个相当讨厌的存储过程。它是一个专门用于搜索的数据库,每天都会生成一个新副本,其中许多复杂的连接都被反规范化了。没有执行写入,只有 SELECT,所以我认为可以通过将整个数据库设置为只读并将恢复模型更改为“简单”来进行一些简单的改进。
令我惊讶的是,这根本没有帮助!存储过程仍然需要相同的完成时间。事实上,我很惊讶我认为我做错了!
我的问题:
- 除了将“Database read-only”设置为“true”之外,我还需要执行其他操作吗?
- 我期望通过将数据库设置为只读来显着提高性能是错误的吗?
- 恢复模型也是如此:“简单”不应该有一些明显的影响吗?
- 是否有其他类似的数据库范围配置可以提高这种情况下的性能?
存储过程很大,有临时表,40 多张表加入了 20 多个查询。但是我想在编辑这个过程之前优化数据库本身。
【问题讨论】:
-
Some graphs on
readonlyvsreadwrite表明您应该只期待适度的收益。大概这个查询没有做任何会被记录的数据修改,所以恢复模型不会有任何区别。您需要查看执行计划以确定实际的瓶颈。 -
也许您应该从查看索引开始?创建索引会产生巨大的性能影响。
-
@Martin,感谢您的指点,这是一篇有趣的文章。我想我对性能显着提升的期望是错误的。
-
我会说你的 2 个中间假设/问题是错误的;在只读的简单恢复模型数据库中,查询计划开销可能远远超过任何小的增量收益。修复坏掉的东西。
-
@LukLed,所有“明显”的索引似乎都设置正确,所以那里也没有简单的改进。
标签: performance sql-server-2005