當您刪除包含 FILESTREAM 欄位的資料列時,您也會刪除其基礎檔案系統的檔案。
因此,刪除資料列與檔案的唯一方法,是使用 Transact-SQL DELETE 陳述式。
雖然系統已經不再使用這些相關聯的檔案,但這些檔案可能不是即時執行回收作業。
依據文件的說明:
「基礎檔案(underlying file)」會由 FILESTREAM 記憶體回收行程所移除。 The underlying files are removed by the FILESTREAM garbage collector.
應該是使用「記憶體回收器(garbage collector,GC)」來執行回收作業。
-- 01_FileSteam_使用的基礎檔案
可能作法如下
-- 執行 CHECKPOINT 來即時回收 FILESTREAM 不再使用的基礎檔案 /* 將目前資料庫的所有「中途分頁(Dirty Page)」 寫入磁碟中。 「中途分頁」是已進入緩衝區快取中,也已修改過,但尚未寫入磁碟的資料頁面。 */ USE [目標資料庫]; GO CHECKPOINT; GO
FILESTREAM 概觀
FILESTREAM 會將 SQL Server Database Engine 與 NTFS 檔案系統整合,其方式是將 varbinary(max) 二進位大型物件 (BLOB) 資料當做檔案儲存在檔案系統上。
Transact-SQL 陳述式可以插入、更新、查詢、搜尋及備份 FILESTREAM 資料。
Win32 檔案系統介面提供了資料的資料流方式存取。
FILESTREAM 會使用 NT 系統快取來儲存檔案資料。
如此可減少 FILESTREAM 資料可能對 Database Engine 效能產生的任何影響。
並不會使用 SQL Server 緩衝集區;因此,此記憶體可用於查詢處理。
即使啟用了透明資料加密,FILESTREAM 資料也不會加密。
--
FILESTREAM 儲存體
FILESTREAM 儲存體會實作為 varbinary(max) 資料行,該資料行中的資料會當做 BLOB 儲存在檔案系統上。
BLOB 的大小只受到檔案系統磁碟區大小的限制。
標準 varbinary(max) 限制 (2-GB 檔案大小) 不適用於檔案系統中所儲存的 BLOB。
若要指定資料行應該將資料儲存在檔案系統上,請在 varbinary(max) 資料行上指定 FILESTREAM 屬性。
如此會讓 Database Engine 將該資料行的所有資料都儲存在檔案系統上,而不是儲存在資料庫檔案中。
FILESTREAM 資料必須儲存在 FILESTREAM 檔案群組中。
FILESTREAM 檔案群組是包含檔案系統目錄 (而非檔案本身) 的特殊檔案群組,這些檔案系統目錄稱為「資料容器」(Data Container)。
資料容器是 Database Engine 儲存體與檔案系統儲存體之間的介面。
認識 CHECKPOINT (Transact-SQL)
將目前資料庫的所有「中途分頁(Dirty Page)」 寫入磁碟中。
「中途分頁」是已進入緩衝區快取中,也已修改過,但尚未寫入磁碟的資料頁面。
藉由建立一個點來確保所有中途分頁都已寫入磁碟中,檢查點可讓稍後的復原節省時間。
語法:
CHECKPOINT [ checkpoint_duration ]
引數:
checkpoint_duration
指定所要求的檢查點作業完成的時間 (以秒為單位)。
當指定 checkpoint_duration 時,SQL Server Database Engine 會嘗試在要求的持續時間內執行檢查點。
checkpoint_duration 必須是 int 類型的運算式,且必須大於零。
當省略這個參數時,SQL Server Database Engine 會自動調整檢查點持續時間,使資料庫應用程式受到的效能影響降到最低。
在 SQL Server 2000 中,檢查點處理序的時間範圍會以 sp_configure RECOVERY INTERVAL 設定為基礎。
--
基於效能的考量,Database Engine 會修改記憶體中的資料庫頁面,但並不會在每次變更之後,將頁面寫入磁碟中。
不過,Database Engine 必須定期執行檢查點,將這些中途分頁寫入磁碟中。
將中途分頁寫入磁碟中,會建立一個已知的恰當起點,使 Database Engine 在發生非預期的關機或損毀之後,能夠從這裡開始套用復原期間包含在記錄中的變更。
檢查點可以同時出現在任意數目的資料庫中。
Database Engine 無法從中斷的檢查點進行復原。
如果檢查點中斷,且需要復原,Database Engine 就必須從先前執行成功的檢查點開始復原。
--
引起檢查點的事件
在資料庫備份之前,Database Engine 會自動執行檢查點,使備份能夠包含資料庫頁面的所有變更。
另外,當發生下列中的任何情況時,也會自動執行檢查點:
1. 記錄之使用中的部份,超出伺服器在 recovery interval 伺服器組態選項所指定的時間中,所能復原的大小。
2. 記錄已填滿 70%,資料庫處於記錄截斷模式中。
當下面這兩個條件都是 TRUE 時,資料庫就會進入記錄截斷模式:
資料庫在使用簡單復原模式,以及在執行參考資料庫的 BACKUP DATABASE 陳述式之後,發生下列事件之一:
2.1 在資料庫中執行記錄最少的作業,例如,執行記錄最少的大量複製作業,或記錄最少的 WRITETEXT 陳述式。
2.2 執行在資料庫中新增或刪除檔案的 ALTER DATABASE 陳述式。
--
另外,停止伺服器也會在伺服器的每個資料庫中發出檢查點。
下列停止 SQL Server 的方法會執行每個資料庫的檢查點作業:
1. 使用 SQL Server 組態管理員。
2. 使用 SQL Server Management Studio。
3. 使用 SHUTDOWN 陳述式。
SHUTDOWN WITH NOWAIT 陳述式會關閉 SQL Server,但不會在每個資料庫中執行檢查點作業。
這可能造成後來重新啟動時,在正常時間之外,花更多時間來復原伺服器中的資料庫。
4. 在 [命令提示字元] 視窗中,使用 net stop mssqlserver 命令。
5. 使用 [控制台] 中的 [服務],選取 [mssqlserver],再按一下 [停止]。
6. 讓叢集中的執行個體離線。
--
影響檢查點作業持續時間的因素
一般而言,檢查點作業必須寫入的中途分頁數愈多,檢查點作業所需要的時間也會愈長。
為了儘量避免影響其他應用程式的效能,依預設,SQL Server 會調整檢查點作業所執行的寫入頻率。
在自動檢查點及未指定 checkpoint_duration 值的 CHECKPOINT 陳述式上,SQL Server 都會使用這個策略。
降低寫入頻率會增加完成檢查點作業所需要的時間。
您可以利用 checkpoint_duration 來要求檢查點作業在特定時間之內完成。
checkpoint_duration 對效能的影響,會隨著中途分頁數、系統活動數及所指定的實際持續時間而不同。
例如,如果檢查點通常會在 120 秒之內完成,將 checkpoint_duration 指定為 45 秒,會使 SQL Server 用超出預設指派的資源數量來執行檢查點作業。
相對地,將 checkpoint_duration 指定為 180 秒,會使 SQL Server 指派低於預設指派的資源數量。
一般而言,checkpoint_duration 愈短,檢查點作業所花的資源愈多,checkpoint_duration 愈長,檢查點作業所花的資源愈少。
可能的話,SQL Server 一律會完成檢查點作業,檢查點作業完成時,CHECKPOINT 陳述式會立即傳回。
因此,在某些情況下,檢查點作業的完成會比指定的持續時間快,執行時間也有可能超出指定的持續時間。
--
權限
CHECKPOINT 權限預設會授與系統管理員 (sysadmin) 固定伺服器角色以及 db_owner 和 db_backupoperator 固定資料庫角色的成員,這些權限不能轉讓。
參考資料:
CHECKPOINT (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms188748.aspx
設計和實作 FILESTREAM 儲存體
http://msdn.microsoft.com/zh-tw/library/bb895234.aspx
使用 Transact-SQL 來管理 FILESTREAM 資料
http://msdn.microsoft.com/zh-tw/library/cc645962(v=sql.100).aspx
SQL Server 2008 – Manage unstructured data using FILESTREAM Feature
http://archive.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=Manage%20unstructured%20data%20using%20FILESTREAM%20Feature%20in%20SQL%20Server%202008
SharePoint 2010 的 FILESTREAM
http://blogs.msdn.com/b/sharepoint_cht/archive/2011/06/15/sharepoint-2010-filestream.aspx
管理 RBS (SharePoint Foundation 2010)
http://technet.microsoft.com/zh-tw/library/ee748592.aspx
維護 RBS (SharePoint Foundation 2010)
http://technet.microsoft.com/zh-tw/library/ff943566.aspx
沒有留言:
張貼留言