2

如何查询 Sql Server 2005 中的读/写比率?有什么我应该注意的警告吗?

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

我为什么在乎?

我正在花时间提高我的网络应用数据层的性能。它处理数百万条记录和数以千计的用户。

我正在研究的要点之一是数据库并发性。默认情况下,Sql Server 使用悲观并发——适合写入繁重的应用程序。如果我的应用程序读取量很大,我可能会将其切换为乐观并发(隔离级别:),read committed snapshot就像Jeff Atwood 对 StackOverflow 所做的那样

4

4 回答 4

4

所有应用程序都是重度只读的。

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

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

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

为什么你需要知道?

另外:如何找出 SQL Server 表的读/写统计信息?

编辑,根据问题更新...

在您需要更改它之前,我会保留数据库并发性。对于我们的 600 万行 + 大量读取,我们没有进行任何开箱即用的更改

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

于 2010-05-06T05:23:02.940 回答
2

查看sys.dm_db_index_usage_stats

  • 搜索、扫描、查找都是读取
  • 更新是写

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

还有一些性能计数器可以帮助您:

从这些速率中,您可以很好地估计请求的读:写比率。

更新后

打开版本存储可能是处理并发的最佳途径。我建议不要显式使用快照隔离,而是打开已提交的读取快照:

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

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

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

需要注意的是,版本存储并非完全免费。请参阅行版本控制资源使用情况。您应该阅读SQL Server 2005 Row Versioning-Based Transaction Isolation

于 2010-05-06T03:58:19.980 回答
2

如何在 中找到num_of_writes&num_of_reads计数器的比率sys.dm_io_virtual_file_stats

于 2012-03-26T05:58:37.780 回答
0

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

于 2010-05-06T03:24:42.523 回答