3.4 重新生成索引任務
重新生成索引任務(Rebuild Index Task)旨在通過重新組織數據庫中所有的表索引而清除碎片。此任務對於確保查詢性能和應用程序響應不會退化非常有用。因此,當需要對SQL執行索引掃描和查找的時候,系統運行會非常順暢。另外,此任務能夠優化數據和可用空間的再索引頁的分配,使數據庫增長更加快速。
對於可用空間,重新生成索引任務包含以下兩個選項:
采用默認可用空間大小來重新組織索引頁——刪除數據庫裡的表索引,並重新生成索引,生成索引的同時就指定填充因子(fill factor)的值。
改變每個索引頁的可用空間比例——刪除數據庫裡的表索引,並指定一個自動計算得到的新填充因子值來重新生成索引,因此能夠保留索引頁上指定的有用空間大小。填充因子的有效值范圍從0到100,數值越大,索引頁上保留的有用空間就越多,索引就可以增長得越大。
重新生成索引的高級選項包括:
指定是否在tempdb中存儲排序結果——這是重新生成索引的第一個高級選項,相當於索引中的SORT_IN_TEMPDB選項,如果激活這個選項,那麼中間排序結果將會在重新生成索引的過程中存儲到tempdb中。
指定重新生成索引操作中是否保持索引聯機——如果設置值為ON,那麼這個選項允許用戶在重新生成索引操作過程中對基礎表、聚集索引數據和相關聯的索引進行查詢和數據修改操作。
為了更深入了解這個任務,下面舉一個TSQL語法實例用來重新生成與AdventureWorks 數據庫中的[Sales]. [SalesOrderDetail]表關聯的索引,例子中采用默認可用空間大小選項,同時將排序結果存儲在tempdb中,並在操作過程中保持索引聯機:
USE [AdventureWorks]
GO
ALTER INDEX [AK_SalesOrderDetail_rowguid]
ON [Sales].[SalesOrderDetail]
REBUILD WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, SORT_IN_TEMPDB = ON, IGNORE_DUP_KEY = OFF, ONLINE = ON )
GO
USE [AdventureWorks]
GO
ALTER INDEX [IX_SalesOrderDetail_ProductID]
ON [Sales].[SalesOrderDetail]
REBUILD WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, SORT_IN_TEMPDB = ON, ONLINE = ON )
GO
USE [AdventureWorks]
GO
ALTER INDEX [PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID]
ON [Sales].[SalesOrderDetail]
REBUILD WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, SORT_IN_TEMPDB = ON, ONLINE = ON )
3.5 更新統計信息任務
更新統計信息任務(pdate Statistics Task)通過對用戶表創建的每個索引統計信息分布進行重新抽樣,以確保在一個或多個SQL Server數據庫內表和索引中的數據都是最新的。
此任務的選項有很多,下面為您一一介紹:
數據庫——首先選擇受此任務影響的數據庫。這個選項范圍包括所有數據庫、所有系統數據庫、所有用戶數據庫或指定數據庫。
對象——選擇完數據庫後,就該在對象框中選擇限定顯示表、顯示視圖還是兩者同時顯示。
選擇——選擇受此任務影響的表或索引。如果在對象框中選擇了同時顯示表和視圖選項的話,此選項不可用。
更新——“更新”框提供了三個選項。如果需要更新列和索引的統計信息那就選擇全部現有統計信息,如果只需要更新列統計信息那就選擇僅限列統計信息,如果只更新索引統計信息那就選擇僅限索引統計信息。
掃描類型——此選項使用戶可以對收集已更新統計信息進行完全掃描或通過在抽樣選項鍵入特定值進行掃描。抽樣選項的值可以是要抽樣的表或索引視圖的百分比,也可以是指定的行數。
下面是用來更新AdventureWorks 數據庫中的[Sales]. [SalesOrderDetail]表的索引統計信息的TSQL語法,例子中選擇更新全部現有信息,並執行完全掃描:
use [AdventureWorks]
GO
UPDATE STATISTICS [Sales].[SalesOrderDetail]
WITH FULLSCAN
3.6 清除歷史記錄任務
清除歷史記錄任務(History Cleanup Task)用幾個簡單的步驟就可以完全清除數據庫表中舊的歷史信息。任務支持刪除多種類型的數據。下面介紹與此任務相關的幾個選項:
即將刪除的歷史數據——使用維護計劃向導來清除備份和還原歷史記錄,SQL Server代理作業歷史記錄和維護計劃歷史記錄。
移除歷史數據,如果其保留時間超過——同樣是通過維護計劃向導實現,用於指定需要刪除的數據所保留的最早日期。例如您可以選擇以天數、周數、月數或年數為單位作為間隔周期來刪除舊數據,系統將自動將該間隔單位轉換為日期。
當清除歷史記錄任務完成後,點擊“下一步”,調用“選擇報告選項”界面,激活檢查框中的將報告寫入文本文檔選項,然後選擇保存路徑就可以選擇將結果報告保存到一個文本文檔或用電子郵件發送這份報告給操作人員。
下面的TSQL實例顯示如何清除保留了超過四星期的備份和還原歷史、SQL Server代理作業歷史以及維護計劃歷史等數據:
declare @dt datetime select @dt = cast(N'2007-10-21T09:26:24' as datetime)
exec msdb.dbo.sp_delete_backuphistory @dt
GO
EXEC msdb.dbo.sp_purge_jobhistory @oldest_date='2007-10-21T09:26:24'
GO
EXECUTE msdb..sp_maintplan_delete_log null, null,'2007-10-21T09:26:24'
3.7 執行SQL Server代理作業任務
執行SQL Server代理作業任務(Execute SQL Server Agent Job task)可以讓您把運行已有的SQL Server代理作業和SSIS程序包作為維護計劃的一部分。通過在“定義執行SQL Server代理作業任務”界面的可用SQL Server代理作業選項卡選擇完成這項任務。同樣,也可以通過TSQL語法來通過輸入與已有的作業相應的作業ID來執行這項任務。
執行此任務的語法如下:
EXEC msdb.dbo.sp_start_job @job_id=N'35eca119-28a6-4a29-994b-0680ce73f1f3'