2011-03-29 53 views
0

我做了一个SQL Server 2008的压力测试,我想知道什么是因为使用临时表和变量的数据流到tempdb。SQL Server 2008:A *数据文件IO计数器* SQL Server的

的统计数据也显示在活动监视器:

enter image description here

是否有可能以某种方式来记录数据和事后分析的呢? 我有2例记:

  1. 记录的SQL Server的计数器(我不知道这是它的名字)
  2. 记录某种方式从活动监视器
+0

'select * from sys.fn_virtualfilestats(db_id(),null)'对你有什么好处? – 2011-03-29 16:36:41

回答

2

写入到数据库中不等于1比1与磁盘IO。数据库只更新稍后被惰性写入程序或检查点复制到磁盘的脏内存页面。写入磁盘的唯一东西是Write Ahead Log活动,对此,有一个特定的每个数据库计数器: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.

+0

最好的答案,谢谢! – Tim 2011-03-31 08:38:45

0

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

性能计数器是数据文件大小下SQLServer:数据库

+0

感谢您的答案,不幸的是,数据文件大小不是我想要的。我想要有数据流(MB /秒读取和写入)。 – Tim 2011-03-29 14:47:17

0

我会采取一些定期间隔“快照”(使用以下DMVs)加载到表中,以确定您的内部使用tempDB。

sys.all_objects 
sys.dm_db_file_space_usage 
sys.dm_db_task_space_usage 

sys.dm_db_task_space_usage将SPID打破惯例等

+0

不幸的是,这些视图没有提供什么样的数据流到tempdb,即MB /秒的读和写。但总的来说,深入研究DMV可能是一个好主意,可能他们可能拥有这些信息。 – Tim 2011-03-29 14:52:28