performance - 只读对 SQL Server 没有影响吗?

标签 performance sql-server-2005

我的任务是优化遗留系统中一个相当讨厌的存储过程。它是一个专门用于搜索的数据库,每天都在生成一个新副本,其中有很多复杂的连接被去规范化。没有执行写入,只有 SELECT,所以我认为可以通过将整个数据库设置为只读并将恢复模型更改为“简单”来进行一些简单的改进。

令我惊讶的是,这根本没有帮助!存储过程仍然需要相同的时间才能完成。事实上,我很惊讶我认为我做错了!

我的问题:

  • 除了将“数据库只读”设置为“true”之外,我还需要做其他事情吗?
  • 我期望通过将数据库设置为只读来显着提高性能是否错误?
  • 恢复模型也一样:“简单”不应该有一些显着的影响吗?
  • 是否有其他类似的数据库范围配置可以提高这种情况下的性能?

存储过程非常庞大,有临时表,40 多个表连接在 20 多个查询中。但我想在编辑此过程之前优化数据库本身。

最佳答案

由于您的 SP 不执行任何写入操作,因此没有理由期望通过更改恢复模型和读写模式来显着提高性能。

正如其他人提到的,您应该查看查询计划并优化您的查询。

另一个提示:当数据库被填满时,数据库中的索引可能会变得碎片化。由于数据不会再被修改,因此可能有助于使用 fillfactor 100 重建所有索引 - 这可能有助于消除碎片并压缩数据。
为数据库中的每个表调用此方法:ALTER INDEX ALL ON table_name REBUILD WITH (FILLFACTOR = 100)
通常,我不会期望从中获得太多性能提升,但这取决于特定的数据库。

说到查询优化,SQL Server 2005 及更高版本中有一些非常有用的功能:Execution RelatedIndex-Related动态管理 View 。特别是,sys.dm_exec_query_statsmissing indexes很有趣。
它们为您提供与 Tuning Advisor 几乎相同的信息,但使用的是真实工作负载,因此您无需模拟它并提供给 Advisor。

关于performance - 只读对 SQL Server 没有影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5011807/

相关文章:

SQL Server - 使用 Join 仅显示第二个表中的条目

javascript - 为什么迭代 Set 的值会分配并产生垃圾?

python - 如何在 Python 中获得读/写磁盘速度?

java - 识别数组中的连接元素

javascript - 如何在Jmeter中使用TCP采样器

sql-server-2005 - 为什么我不能将 DBNull.Value 插入到 sql server 2005 中的可为 null 的图像字段中?

sql - 选择所有不在Top 'n'中的数据为 'Other'

javascript - DOM 中的元素或 Javascript 对象中的元素哪个对性能更好?

sql - 索引和插入操作

sql - 执行storedproc时可以将表作为参数传递吗?