1

如果我想对不同的表定义如何影响 SQL Server 中的行插入速度进行基准测试,我想仅将事务从 BEGIN 计时到 COMMIT 是不够的:这仅测量将 INSERT 附加到(顺序)日志所花费的时间。正确的?

但是真正的 I/O 命中是在将 INSERT 实际应用于实际表(在 INSERT 之后可能会稍微重组的聚​​集索引)时出现的。我如何衡量使用的总时间,包括所有时间?也就是说,所有 INSERT(写入日志)的时间 + 用于更新“真实”数据结构的时间?在停止计时器之前执行“检查点”是否足够?

4

2 回答 2

1

由于缺乏回应,我将自己回答这个问题。

据我在各种文档中看到的,我将all related disk activity通过发出CHECKPOINT. 这将强制将所有脏页写入磁盘。

如果只执行要测量的查询,则唯一的脏页将是查询所触及的那些。所进行的实验似乎支持这一“理论”。

于 2011-08-08T10:53:11.900 回答
0

SET STATISTICS TIME ON将为您在设置后运行的每个语句在 MS 中提供运行时间和 CPU 时间

编辑:使用下面的查询,您可以准确找出执行时缓冲池中有多少页面是脏的,以及它们的大小(以 MB 为单位)以及服务器上配置的最大/最小内存和总数。

SELECT
ISNULL((CASE WHEN ([database_id] = 32767) THEN 'Resource Database' ELSE DB_NAME (database_id) END),'Total Pages') AS [Database Name],
SUM(CASE WHEN ([is_modified] = 1) THEN 1 ELSE 0 END)  AS [Dirty Page Count],
SUM(CASE WHEN ([is_modified] = 1) THEN 0 ELSE 1 END)  AS [Clean Page Count],
COUNT(*) * 8.0 / 1024.0 [Size in MB], a.value_in_use [Min Server Memory], 
b.value_in_use [Max Server Memory]
FROM sys.dm_os_buffer_descriptors
INNER JOIN sys.configurations a on a.configuration_id = 1543
INNER JOIN sys.configurations b on b.configuration_id = 1544
GROUP BY [database_id],a.value_in_use,b.value_in_use WITH CUBE
HAVING A.value_in_use IS NOT NULL AND B.value_in_use IS NOT NULL
ORDER BY 1;
于 2011-08-03T22:11:39.990 回答