2012-04-06 53 views
0

我正在做一些性能测试,发现SQL似乎在一个全新的数据库上执行得比在一段时间内执行速度要慢得多,我想知道为什么会这样,以及我该如何处理我的数据库创建后好一点,所以我的性能测试更准确。在数据库创建完成后,sql如何直线运行?

为了证明我的观点我有一个测试程序here它具有以下功能:

  1. 创建数据库和测试表
  2. 插入一些行
  3. 截断表
  4. 插入更多的行

2需要约1.5x只要4

+0

我要猜测缓存 – mowwwalker 2012-04-06 05:51:12

+0

缓存可以解释选择,但我不确定它解释插入速度较慢? – 2012-04-06 05:51:44

+8

你如何创建你的数据库?你让文件自动增长吗? – lnu 2012-04-06 06:05:06

回答

0

我试过Inu关于自动增长的注意事项,它看起来像这就是问题发生的原因。

1

这可能是由于数据库不在RAM中。仅仅因为数据库被创建并不意味着它被加载到RAM中。 SQL Server很可能只在数据库正在使用时才会这样做,甚至可能在一段时间内未使用的情况下释放它们。类似于缓存。

创建数据库后,尝试从表中选择count(*),以确保所有内容都在ram中。那么我会期望2和4在大致相同的时间范围内表现。

刚刚看到了关于汽车增长的评论。这可以解释很多,并且截断表格会留下可用空间,以便服务器不必分配新页面。 - 好意见lnu。

编辑尝试在测试之前将您的数据和日志文件设置为500 MB,以确保文件增长不成问题。类似的东西。

CREATE DATABASE [TestDB] ON PRIMARY 
(NAME = N'TestDB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL\data\TestDB.mdf' , SIZE = 512000KB , FILEGROWTH = 10%) 
LOG ON 
(NAME = N'TestDB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL\data\TestDB_log.ldf' , SIZE = 512000KB , FILEGROWTH = 10%) 
GO 
+0

添加一个计数(*)到我的样本没有任何区别的结果,我仍然得到一个1.5倍的差距1376ms vs 915ms – 2012-04-06 06:08:17

+1

尝试数据日志大小设置为500以避免任何增长问题。 – 2012-04-06 06:17:20

+1

我认为这是为你工作的吗?它确实是为了回应Inu的提交,所以他应该回答问题并获得一些信用。 – 2012-04-06 07:28:36

相关问题