Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何计算Sql Server中的读/写比率?_Sql Server_Sql Server 2005_Isolation Level_Read Committed Snapshot_Optimistic Concurrency - Fatal编程技术网

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

Sql server 如何计算Sql Server中的读/写比率?,sql-server,sql-server-2005,isolation-level,read-committed-snapshot,optimistic-concurrency,Sql Server,Sql Server 2005,Isolation Level,Read Committed Snapshot,Optimistic Concurrency,如何在Sql Server 2005中查询读/写比率?有什么需要注意的吗 也许可以在DMV查询、标准报告、自定义报告(即性能仪表板)或检查Sql分析器跟踪中找到它。我不太清楚 我为什么在乎? 我正在花时间改进我的web应用程序数据层的性能。它处理数百万条记录和数千名用户 我要检查的一点是数据库并发性。默认情况下,Sql Server使用悲观并发,这对于写操作繁重的应用程序来说是很好的。如果我的应用程序读取量很大,我可能会将其切换到乐观并发(隔离级别:readcommitted snapshot)

如何在Sql Server 2005中查询读/写比率?有什么需要注意的吗

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

我为什么在乎?

我正在花时间改进我的web应用程序数据层的性能。它处理数百万条记录和数千名用户


我要检查的一点是数据库并发性。默认情况下,Sql Server使用悲观并发,这对于写操作繁重的应用程序来说是很好的。如果我的应用程序读取量很大,我可能会将其切换到乐观并发(隔离级别:
readcommitted snapshot
),就像。

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

签出:

  • 搜索、扫描、查找都是读取
  • 更新是写入
请记住,每次服务器重新启动时计数器都会重置,只有在代表性负载运行后才需要查看它们

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

  • :每秒接收的Transact-SQL命令批处理数
  • :写入数据库并提交的事务数
  • :为数据库启动的事务数
从这些速率可以很好地估计请求的读写比

更新后

打开版本存储可能是处理并发性的最佳途径。与其显式使用快照隔离,我建议启用读提交快照:

alter database <dbname> set allow_snapshot_isolation on;
alter database <dbname> set read_committed_snapshot on;
alter数据库设置允许\u快照\u隔离打开;
将数据库设置为读取已提交快照打开;
这将使读取提交读取(即默认读取)改为使用快照,因此它实际上不需要在应用程序中进行任何更改,并且可以快速测试

您还应该调查您的读取是否在序列化读取隔离级别下执行,这是在使用TransactionScope而不显式指定隔离级别时发生的情况


值得注意的是,版本存储并非完全免费。看见你应该阅读。

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

  • 更新是对WHERE子句的读操作,后跟写操作
  • INSERT必须检查唯一索引和FK,这是读取,以及为什么索引FK列
大多数情况下,您有15%的写入。我曾经看过一篇讨论它的文章,但再也找不到了。更有可能是1%

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

你为什么要知道

此外:

编辑,基于问题更新

我将保留DB并发,直到您需要更改它为止。我们还没有为我们的600万行+大量阅读更改任何现成的内容


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

sys.dm\u io\u虚拟文件统计数据中找到
num\u写入数
num\u读取数
的比率如何?

您的答案很模糊。您是否在跟踪中求和(读取)/求和(写入)以获得比率?这是需要知道的重要信息。如果某个方面很繁重,您可以为此优化SQL Server。读写比率=求和(查找、扫描、查找)/求和(更新)?在谈论SQL负载时,我不知道“读/写比率”的正式定义。许多人使用这个术语,但并没有很好的定义。就个人而言,我更愿意使用(写事务/批处理请求)之类的东西。使用索引统计数据会使比率更偏向于夸大读取,因为单个只读操作(例如一条SELECT语句)通常会导致许多查找/扫描/查找,而写入操作通常会导致很少的更新,通常只有一次。好的,我来看看这些统计数据。这是我从.的作者那里找到的一个很好的读写比率候选值:sys.dm_exec_query_stats:
total_logical_reads/total_logical_write
。为什么需要
允许快照隔离?在你发布之前,我只是在考虑阅读快照。谢谢你提供的信息。好东西。简洁的。我更新了我的问题来解释为什么我关心这个比率。