標籤:
Sql server 7.0/2000下 SqlCacheDependency使用輪詢的方式進行緩衝失效檢查, 雖然ms說對伺服器壓力不大, 但還是有一些的, 而且對於不常改動的混存內容無休止的輪詢感覺有點浪費, 不很經濟.
Sql server 2005/2008下增加使用查詢通知方式進行緩衝失效檢查, 它通過Sql Server內部的訊息佇列進行非同步通知, 這樣就大大減輕了伺服器的壓力, 實現的很經濟, 下面就是具體的步驟:
1.檢測是否已經啟用Service Broker
Select DATABASEpRoPERTYEX(‘資料庫名稱‘,‘IsBrokerEnabled‘) -- 1 表示已經啟用 0 表示沒有啟用
2.啟用Service Broker
ALTER DATABASE 資料庫名稱 SET ENABLE_BROKER;
注意:如果執行此語句處於假死狀態,請重啟(restart)資料庫,然後什麼都別做, 先執行上面啟用Service Broker這個語句就行了!
3.給您的資料庫訪問帳號授予許可權
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO test
注意:這一步非常重要, 如果沒有許可權, 資料庫改變的通知將無法接收, cache永遠都不會被重新整理,我開始是用的sa帳號,死活都不重新整理,花了我兩天時間調試這個問題, 還是無法給sa授此許可權(ms禁止), 所以,換個資料庫訪問帳號即可.
4.檢查是否有以前的緩衝錯誤
隱藏行號 複製代碼 ? 這是一段程式碼。
USE [master]
GO
ALTER DATABASE Northwind SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE Northwind SET SINGLE_USER
GO
ALTER DATABASE Northwind SET ENABLE_BROKER
GO
ALTER DATABASE Northwind SET MULTI_USER
GO
5、啟動SqlDependency監聽.
在Global.ascx裡的Application_Start和Application_End裡增加如下代碼:
隱藏行號 複製代碼 ? 這是一段程式碼。
void Application_Start(object sender, EventArgs e)
{
string connString2 = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["NorthwindConnectionString1"].ConnectionString;
System.Data.SqlClient.SqlDependency.Start(connString2);
}
void Application_End(object sender, EventArgs e)
{
string connString2 = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["NorthwindConnectionString1"].ConnectionString;
System.Data.SqlClient.SqlDependency.Stop(connString2);
}
6、主體程式
webfrom1: 單表緩衝
webfrom2: LINQ TO SQL 緩衝
webfrom3: LINQ TO SQL 多表緩衝
【緩衝】Sql Server 2005/2008 SqlCacheDependency查詢通知的使用總結