查询基准测试

bil*_*nkc 3 sql-server benchmarking

前言

我有一个关于使用本机 SQL 聚合函数和 SSIS 中提供的聚合之间的性能差异的假设(数据库会破坏 SSIS)。我想开发一个经验过程来测试它。

对于初始测试,我唯一关心的是执行速度。以后的迭代将涵盖 CPU 和内存成本。

为了实现这一点,我建立了一个小表(100M 行)并想要捕捉时间的差异。我计划通过比较 OnPreExecute 和 OnPostExecute 的时间在 SSIS 包中完成所有操作。

第一个数据流将采用以下形式,SELECT * FROM TABLE而后者将是SELECT Aggregate(col1) FROM TABLE

SSIS 聚合 对比 数据库聚合

类似的问题,但不是我想要的

tl;博士;

为了使评估尽可能均匀,我应该

  • 在步骤之间刷新缓存
  • 通过预先执行查询来预热缓存
  • 别的东西

如果决定是冲洗,就dbcc freeproccache足够了还是我需要冲洗dbcc dropcleanbuffers

JNK*_*JNK 5

我认为您确实想在两次运行之间清除页面缓存。

如果是我,我会运行类似的东西:

DBCC FREEPROCCACHE
CHECKPOINT
DBCC DROPCLEANBUFFERS
Run Code Online (Sandbox Code Playgroud)

FREEPROCCACHE仅清除计划缓存,并没有任何与数据页。

CHECKPOINT将刷新所有脏页到磁盘。

DROPCLEANBUFFERS会清除数据页的缓冲池。

我也会考虑SET STATISTICS IO ON,并SET_STATISTICS TIME ON在SSMS任何运行。