2012-04-06 49 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

相關問題