文章出處:http://www.dotblogs.com.tw/jimmyyu/archive/2009/07/03/9088.aspx
這是一個曾經發生過的案例,兩年前我在客戶家處理一個效能的案子時,客戶告知:你們的系統最近跑起來比過去慢了不少,每個動作平均大約慢了2-3秒鐘,我心想:我們最近不會改了什麼東西吧。
本著追根究柢的精神,開始跟客戶喇勒:最近有人做什麼嗎?有人版更嗎?DBA有改設定嗎?MIS有做系統調整嗎?這一連串的閒聊問答,最後得到的結果很好:沒有….
根據我在客戶家處理多年問題的經驗,客戶有這種回答也是很合理的,但我直覺問題並不單純,就開始進行問題的測試,從一些現象上看起來,最後把問題轉到DB上去了,最後找到DB中有個設定被修改了,這個設定叫作Auto Close(自動關閉),詳細的內容可以看這個連結,講的蠻清楚的:http://sharedderrick.blogspot.com/2009/02/autoclose.html
針對這個設定有個地方要特別注意,在SQL Server 2000以前,Create database時,這個值預設是ON;SQL Server 2005以上的版本預設值則是OFF。
http://sharedderrick.blogspot.com/2009/02/autoclose.html
=============================================================================================================認識 SQL Server Database 資料庫選項:AUTO_CLOSE(自動關閉)
資料庫 AUTO_CLOSE 選項
選項值 說明
ON(True)
當設定為:ON 時,資料庫會完全關閉,並在最後一個使用者結束之後釋放其資源。當使用者試圖重新使用資料庫時,會自動重新開啟資料庫。例如,藉由發出 USE database_name 陳述式。
這個選項可能會造成經常存取之資料庫的效能降低,因為在每一個連接之後都會增加開啟和關閉資料庫的負擔。 而且在每一個連接之後,啟用此選項也會排清程序快取。
對於桌面資料庫而言,啟用此選項非常有用,因為它可讓您將資料庫檔案當做一般檔案來管理。您可以移動它們、複製它們來建立備份,甚至可以用電子郵件將它們傳給其他使用者。
在舊版 SQL Server 中,AUTO_CLOSE 是同步處理序,當有重複建立和中斷與 Database Engine 之連接的應用程式存取資料庫時,該處理序可能會降低效能。從 SQL Server 2005 開始,AUTO_CLOSE 處理序是非同步的;重複開啟和關閉資料庫不再降低效能。
當啟用此選項時,sys.databases 目錄檢視中的某些資料行及 DATABASEPROPERTYEX 函數會傳回 NULL,因為資料庫無法擷取資料。若要解決這個問題,請執行 USE 陳述式來開啟資料庫。
此啟用使選項也會造成,當資料庫關閉的作業執行時,會自動清除 SQL Server 執行個體的計畫快取。
若清除計畫快取會導致重新編譯所有後續執行計畫,而且可能會導致查詢效能突然暫時下降。在 SQL Server 2005 Service Pack 2 中,針對每次清除計畫快取的快取存放區,SQL Server 錯誤記錄檔會包含下列參考訊息:「由於某些資料庫維護或重新設定作業,SQL Server 的 […]
近期留言