【问题标题】:SQL Server 2008: A *Data File IO counter* for SQL ServerSQL Server 2008:SQL Server 的*数据文件 IO 计数器*
【发布时间】:2011-03-29 13:19:06
【问题描述】:

我对 SQL Server 2008 进行了压力测试,由于使用了临时表和变量,我想知道到 tempdb 的数据流是什么。

统计信息也显示在活动监视器中:

是否有可能以某种方式记录数据并随后对其进行分析? 我想到了 2 个案例:

  1. 记录一个 SQL Server 计数器(我不知道它的名称)
  2. 以某种方式从活动监视器记录数据

【问题讨论】:

  • select * from sys.fn_virtualfilestats(db_id(),null)对你有好处吗?

标签: sql-server performance sql-server-2008 tempdb


【解决方案1】:

写入数据库并不等于 1 到 1 与磁盘 IO。数据库只更新脏的内存页面,这些页面后来被惰性写入器或在检查点复制到磁盘。唯一写入磁盘的是预写日志活动,每个数据库都有一个特定的计数器:Log Bytes Flushed/sec。请注意,tempdb 具有特殊的日志记录要求,因为它永远不会恢复,因此它只需要撤消信息。每当脏页被实际刷新时,无论是在检查点还是由惰性写入器,也有特定的计数器:Checkpoint pages/secLazy writes/sec。这些不是每个数据库,因为这些活动本身不是“每个数据库”。最后是虚拟文件统计数据 DMV:sys.dm_io_virtual_file_stats,它提供每个数据库(包括 tempdb)的每个单独文件的 IO 操作总数和字节数。

您提到您想要衡量临时表和表变量的具体影响,但您无法将它们与其他 tempdb 活动(排序假脱机、工作表等)分开。我建议您使用 Working with tempdb in SQL Server 2005,因为它仍然适用于 SQL 2008。

【讨论】:

    【解决方案2】:

    如果您使用性能监视器 (perfmon.exe) 来监控 SQL Server 计数器,您可以将其配置为记录到 .csv 文件以在 Excel 中分析(例如)

    有问题的性能计数器是 SQLServer:Databases 下的 Data File(s) Size

    【讨论】:

    • 感谢您的回答,不幸的是,数据文件大小不是我想要的。我想要数据流(MB/秒读取和写入)。
    【解决方案3】:

    我会定期将一些“快照”(使用以下 DMV)加载到表中,以确定您对 tempDB 的内部使用情况。

    sys.all_objects 
    sys.dm_db_file_space_usage
    sys.dm_db_task_space_usage
    

    sys.dm_db_task_space_usage 将按 SPID 等细分使用情况。

    【讨论】:

    • 不幸的是,这些视图没有提供 tempdb 的数据流,即 MB/sec 读取和写入。但总的来说,深入研究 DMV 是个好主意,他们可能有这些信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2010-12-04
    • 2023-04-08
    相关资源
    最近更新 更多