從 SQL Server 回收驅(qū)動(dòng)器空間

言鼎科技 2023-04-30 381
從 SQL Server 回收驅(qū)動(dòng)器空間

任何工作過程中,大事小事無時(shí)不在,駕駛空間也不例外。對許多人來說,擁有最美好回憶的駕車地點(diǎn)確實(shí)令人惱火和煩惱。我們的客戶——中國領(lǐng)先的垂直市場軟件供應(yīng)商,為有限的公共和私人市場的客戶提供服務(wù),我們的戰(zhàn)略合作伙伴,努力管理駕駛空間,導(dǎo)致速度緩慢,從而降低工作效率。 

擁有5年以上經(jīng)驗(yàn)的高級.NET開發(fā)人員高文豪先生加入了西貢科技根據(jù)言鼎科技的客戶服務(wù)模型為我們的客戶建立的離岸開發(fā)團(tuán)隊(duì),成功地徹底解決了這種情況,并按照步驟進(jìn)行了具體說明下面,這些信息可能對您有用: 

 問題

我們最近收到來自監(jiān)控系統(tǒng)的警報(bào),通知我們數(shù)據(jù)庫服務(wù)器運(yùn)行速度極慢……第一個(gè)警報(bào)到達(dá)時(shí),SQL Server 所依賴的磁盤已接近滿,緊接著第二個(gè)警報(bào)出現(xiàn)。

 解決方案之旅

首先,我嘗試RD到服務(wù)器,驚奇地發(fā)現(xiàn)SQL Server安裝在D盤,總共只有10Gb左右。

確定服務(wù)器上的數(shù)據(jù)庫大小

我使用下面的 SQL 腳本列出了所有服務(wù)器數(shù)據(jù)庫的大小: 

 

fs

AS (選擇database_id ,

           類型,

           大小8.0 1024 大小,

           文件編號

    系統(tǒng)主文件

選擇 名稱,

       (

           選擇總和大小

           fs

           其中 類型0

                 fs 數(shù)據(jù)庫 ID =數(shù)據(jù)庫。數(shù)據(jù)庫編號

       )數(shù)據(jù)文件大小MB ,

       (

           選擇總和大小

           fs

           其中 類型1

                 fs 。數(shù)據(jù)庫 ID =數(shù)據(jù)庫。數(shù)據(jù)庫編號

       )日志文件大小MB

系統(tǒng)數(shù)據(jù)庫數(shù)據(jù)庫

ORDER BY DataFileSizeMB DESC ;

正如我們所見,msdb 已占用 5 Gb,而磁盤僅占用 10 Gb。

msdb數(shù)據(jù)庫SQL Server Agent Service)是用于SQL Server服務(wù)器各個(gè)組件的系統(tǒng)數(shù)據(jù)庫。除了 SQL Server 代理設(shè)置和任務(wù)信息之外,復(fù)制、日志傳送和維護(hù)計(jì)劃數(shù)據(jù)都保存在 msdb 數(shù)據(jù)庫中。

接下來,我們將確定數(shù)據(jù)庫中每個(gè)表的大小。

確定 msdb 中的表大小

我們可以使用下面的腳本來獲取 msdb 數(shù)據(jù)庫中每個(gè)表的大小。

使用[msdb] ;

選擇 頂部10 )

       --o.[object_id],

       obj SCHEMA_NAME [schema_id] '.' +。名字

       哦。[類型] ,

       我。總行數(shù)

       我。總大小

系統(tǒng)。對象o

    加入

    (

        選擇[object_id] ,

               total_size CAST SUM total_pages 8. 1024 AS DECIMAL 18 )),

               total_rows SUM CASE  

                                       當(dāng)。index_id IN )

                                            一個(gè)。[類型] 1那么

                                           p [行]

                                   結(jié)尾

                               )

        系統(tǒng)。指數(shù)

            加入系統(tǒng)分區(qū)p

                。[object_id] [object_id]

                   。index_id 。索引號

            加入系統(tǒng)allocation_units

                。[partition_id] =一個(gè)。容器編號

        哪里 is_disabled 0

              is_hypothetical 0

         i分組。[object_id]

    )

        [object_id] =。[object_id]

哪里[類型] IN 'V' 'U' 'S' )

訂購。total_size DESC ;

 

以上結(jié)果表明,大部分記錄都是備份歷史的一部分。

現(xiàn)在讓我們看看兩個(gè)表,它們是什么?他們現(xiàn)在是什么?

dbo.backupset為每個(gè)備份集包含一行。備份集包含來自單個(gè)成功備份操作的備份。

dbo.backupfile為數(shù)據(jù)庫的每個(gè)數(shù)據(jù)或日志文件包含一行。

此外,我們還可以通過閱讀幾個(gè)知識點(diǎn)站點(diǎn)來了解更多或查找有關(guān)其他表的更多信息。  

減少備份和恢復(fù)歷史表的大小

通過刪除備份條目,我們可以最小化這些表的大小。幸運(yùn)的是,微軟為我們提供了一個(gè)存儲過程來處理這些工作,我們不需要在每個(gè)數(shù)據(jù)庫中手動(dòng)刪除數(shù)據(jù)。

假設(shè)我們要?jiǎng)h除超過 3 個(gè)月的備份記錄,那么腳本是:

使用數(shù)據(jù)庫  

  

-- 刪除所有超過3個(gè)月的歷史日志訂單

聲明@oldest_date DATETIME DATEADD MONTH GETDATE ())

EXEC sp_delete_backuphistory @oldest_date ;   

 

讓我們看看執(zhí)行腳本后的結(jié)果。

表的大小從 5Gb 顯著減少到不到 400Mb。好的!

盡管如此,這還不是結(jié)束!

我們知道,在每次備份或還原操作之后,備份和還原歷史表中都會添加更多的行,并且每天都會擴(kuò)展。因此,通常需要sp_delete_backuphistory 。

這次將實(shí)施維護(hù)計(jì)劃?,F(xiàn)在讓我們繼續(xù)配置歷史記錄的清理任務(wù)。 

SQL Server 維護(hù)計(jì)劃歷史清理任務(wù)

我們要清理歷史??梢酝ㄟ^Wizard維護(hù)計(jì)劃和Designer維護(hù)計(jì)劃來設(shè)計(jì)。要設(shè)計(jì)它,讓我們使用向?qū)А?/span>

在 SSMS 中遵循以下過程以啟動(dòng)向?qū)В?/span>

轉(zhuǎn)到Management > Maintenance Plans并右鍵單擊,然后選擇Maintenance Plan Wizard

維護(hù)計(jì)劃向?qū)? src=

點(diǎn)擊“下一步”

填寫任務(wù)的名稱和描述,然后單擊“更改... ”以設(shè)置計(jì)劃。

選擇您合適的時(shí)間表,然后單擊“確定

仔細(xì)檢查計(jì)劃信息是否正確,然后單擊“下一步”

 

之后,我們顯然選擇“ Clean Up History ”任務(wù),點(diǎn)擊“ Next ”:

在下一個(gè)窗口中,我們設(shè)置任務(wù)的配置。正如我們所看到的,我們可以選擇需要清理哪種歷史數(shù)據(jù)備份和還原歷史記錄、SQL Server 代理作業(yè)歷史記錄維護(hù)計(jì)劃歷史記錄。此外,我們可以設(shè)置要保留的數(shù)據(jù)量:

我們將從msdb中清除所有提到的超過三個(gè)月的歷史數(shù)據(jù)記錄類型。然后,我們點(diǎn)擊“下一步

最后,我們點(diǎn)擊完成創(chuàng)建計(jì)劃:

維護(hù)計(jì)劃向?qū)? src=

這樣,我們的清理任務(wù)就創(chuàng)建成功了:

 

維護(hù)計(jì)劃向?qū)? src=

如果我們刷新 Maintenance Plans 和 SQL Server Agent Jobs,我們可以找到新創(chuàng)建的計(jì)劃和對應(yīng)的作業(yè)。

 

從此以后,我們再也不用擔(dān)心產(chǎn)生不必要的信息而導(dǎo)致磁盤又滿了。

言鼎科技

The End