如何在Sql Server中计算读/写比率?

时间:2010-05-06 03:16:15

标签: sql-server sql-server-2005 isolation-level read-committed-snapshot optimistic-concurrency

如何在Sql Server 2005中查询读/写比率?我应该注意哪些警告?

也许可以在DMV查询,标准报告,自定义报告(即性能仪表板)或检查Sql Profiler跟踪中找到它。我不确定。

我为什么关心?

我花时间来改善网络应用数据层的性能。它涉及数百万条记录和数千名用户。

我正在研究的一点是数据库并发。默认情况下,Sql Server使用悲观并发 - 适用于写入量大的应用程序。如果我的应用程序读取量很大,我可能会将其切换为乐观并发(隔离级别:read committed snapshot),如Jeff Atwood did with StackOverflow

4 个答案:

答案 0 :(得分:4)

所有应用都很重读。

  • UPDATE是WHERE子句的读取,后跟写入
  • INSERT必须检查唯一索引和FK,它们是读取以及索引FK列的原因

最多,您有15%的写入次数。我看过一篇文章曾经讨论过,但再也找不到了。更可能是1%。

我知道在我们每天600万个新行中,我们仍然有至少95%以上的读数(当然是估计值)。

为什么你需要知道?

另外:How to find out SQL Server table’s read/write statistics?

根据问题更新编辑...

我会留下数据库并发,直到你需要更改它。我们的600万行+重读也没有改变任何东西

为了调整我们的网络应用程序,我们将其设计为减少往返次数(一次呼叫=一次操作,每次呼叫多个记录集等)

答案 1 :(得分:1)

结帐sys.dm_db_index_usage_stats

  • 寻找,扫描,查找都是读取
  • 更新是写入

请记住,每次重启服务器都会重置计数器,只有在代表性负载运行后才需要查看它们。

还有一些性能指标可以帮助您:

根据这些费率,您可以很好地估算您的请求的写入比率。

更新后

打开版本存储可能是处理并发的最佳途径。我没有明确地使用快照隔离,而是建议启用read committed snapshot:

alter database <dbname> set allow_snapshot_isolation on;
alter database <dbname> set read_committed_snapshot on;

这将使读取提交的读取(即默认值)成为使用快照,因此它实际上不需要对应用程序进行任何更改,并且可以快速测试。

您还应该调查您的读取是否在序列化读取隔离级别下执行,这是在使用TransactionScope时未发生的事情,而没有明确指定隔离级别。

有一点需要注意的是版本存储并不是完全免费的。见Row Versioning Resource Usage。你应该阅读SQL Server 2005 Row Versioning-Based Transaction Isolation

答案 2 :(得分:1)

如何找到num_of_writes&amp;的比率num_of_reads中的sys.dm_io_virtual_file_stats个计数器?

答案 3 :(得分:0)

我是使用SQL Server Profiler完成的。我只是在运行应用程序之前打开它并测试了在应用程序中执行某些操作时执行的查询类型。但我认为最好只是为了确保查询工作,不知道这样测量服务器工作负载是否方便。 Profiler还可以保存您可以在以后分析的跟踪,因此它可能有用。