新聞中心
如今,數(shù)據(jù)庫已經(jīng)成為了企業(yè)信息化建設(shè)的核心和基石。為了更好地存儲和管理數(shù)據(jù),開發(fā)人員一直在不斷改進(jìn)和完善數(shù)據(jù)庫的設(shè)計(jì)和管理技術(shù)。其中,壓縮數(shù)據(jù)庫表的方法是一種非常常用的技術(shù),其不僅可以減小數(shù)據(jù)庫的空間占用,提高數(shù)據(jù)庫的查詢效率,同時(shí)也能節(jié)約企業(yè)的存儲成本。本文將從以下兩個(gè)方面介紹壓縮數(shù)據(jù)庫表的方法:尺寸縮減和不損失數(shù)據(jù)。

一、尺寸縮減
壓縮數(shù)據(jù)庫表的主要目的是減小數(shù)據(jù)庫的存儲空間。對于一個(gè)大型的數(shù)據(jù)庫來說,數(shù)據(jù)量巨大往往會導(dǎo)致查詢速度變慢,甚至無法快速響應(yīng)用戶的請求。因此,在壓縮數(shù)據(jù)庫表的過程中,首要目標(biāo)就是要減小表的尺寸,提高查詢和更新效率。以下是一些常見的方法:
1. 數(shù)據(jù)庫壓縮工具
現(xiàn)代數(shù)據(jù)庫管理系統(tǒng)通常都配備有壓縮工具,這些工具可以在不影響數(shù)據(jù)完整性的前提下,通過各種壓縮算法將表壓縮到更小的尺寸,從而減少數(shù)據(jù)庫文件的大小。數(shù)據(jù)庫壓縮工具有的是內(nèi)置的,有的需要額外的插件或軟件來實(shí)現(xiàn)。使用數(shù)據(jù)庫壓縮工具的優(yōu)點(diǎn)是,操作簡單方便,容易上手,且減少的存儲空間相對較大。缺點(diǎn)是,不同的壓縮算法可能對不同類型的表不太一樣,有些算法可能用于某些類型的表會導(dǎo)致一些嚴(yán)重的副作用,比如查詢效率降低等。
2. 清理不必要的數(shù)據(jù)和索引
在數(shù)據(jù)庫中,有些數(shù)據(jù)和索引可能已經(jīng)過時(shí)或者根本就不使用了,而這些數(shù)據(jù)卻一直占用著數(shù)據(jù)庫的存儲空間。清理這些不必要的數(shù)據(jù)和索引可以顯著減少表的大小。此外,對于一些過期的操作日志和緩存數(shù)據(jù),也應(yīng)當(dāng)及時(shí)清理。這些數(shù)據(jù)雖然不能算作存儲表數(shù)據(jù)的一部分,但是卻占用了寶貴的存儲空間。清理不必要的數(shù)據(jù)和索引需要管理員有一些數(shù)據(jù)庫管理經(jīng)驗(yàn),需要慎重操作,防止誤刪數(shù)據(jù)。
3. 分離文本和二進(jìn)制字段
在一些表中可能存在大量的文本數(shù)據(jù)和二進(jìn)制數(shù)據(jù),這些數(shù)據(jù)占用了大量的存儲空間。如果將這些數(shù)據(jù)和表的其他列分離開來,存儲在單獨(dú)的表中,可以顯著減少表的大小。此外,對于一些長文本字段和二進(jìn)制字段,使用壓縮算法進(jìn)行壓縮存儲也是一個(gè)不錯(cuò)的選擇。
二、不損失數(shù)據(jù)
在進(jìn)行壓縮數(shù)據(jù)庫表的時(shí)候,尺寸縮減是不可避免的,但是必須保證壓縮過程中不會丟失或者改變原有數(shù)據(jù),否則會導(dǎo)致數(shù)據(jù)的不完整或者不準(zhǔn)確,從而影響業(yè)務(wù)流程。以下是一些保證不損失數(shù)據(jù)的方法:
1. 備份數(shù)據(jù)庫表
在進(jìn)行壓縮數(shù)據(jù)庫表的過程中,一定要預(yù)先備份原有數(shù)據(jù)庫表。如果在壓縮過程中出現(xiàn)了錯(cuò)誤,可以恢復(fù)到原有的狀態(tài)。此外,還可以備份存儲區(qū)域,備份增量和備份日志,這樣即使備份的表是失效了,也可以通過備份的存儲區(qū)域來恢復(fù)原有的狀態(tài)。
2. 使用較為保險(xiǎn)的算法
在壓縮數(shù)據(jù)庫表的同時(shí),必須采用穩(wěn)定和安全的壓縮算法,這些算法在壓縮的同時(shí)保證數(shù)據(jù)的不變性。在選擇算法的時(shí)候,需要根據(jù)具體的表結(jié)構(gòu)和數(shù)據(jù)類型來選擇最合適的算法。一些常用的算法包括:gzip、bzip2、zip等。
3. 進(jìn)行壓力測試
在對壓縮數(shù)據(jù)庫表進(jìn)行優(yōu)化之后,必須進(jìn)行壓力測試以驗(yàn)證優(yōu)化結(jié)果是否滿足要求。壓力測試可以模擬真實(shí)的生產(chǎn)環(huán)境,并通過模擬各種數(shù)據(jù)讀寫場景的方式來測試表是否能夠正常工作。如果在壓力測試期間發(fā)現(xiàn)了問題,可以及時(shí)改正,從而保證數(shù)據(jù)庫的正常使用。
在中,尺寸縮減和不損失數(shù)據(jù)是壓縮數(shù)據(jù)庫表的兩個(gè)主要方面。為了使壓縮過程更加簡單,可以使用數(shù)據(jù)庫管理系統(tǒng)自帶的壓縮工具。但是需要注意,在壓縮過程中應(yīng)該使用最安全和保險(xiǎn)的算法,以保證數(shù)據(jù)的完整性和準(zhǔn)確性,同時(shí)還需要進(jìn)行壓力測試以驗(yàn)證是否滿足要求。壓縮數(shù)據(jù)庫表是一項(xiàng)重要的優(yōu)化工作,必須謹(jǐn)慎操作,以確保數(shù)據(jù)的完整性和業(yè)務(wù)流程的正常運(yùn)行。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220如何壓縮SQL Server 2023指定數(shù)據(jù)庫文件和日志的大小
下面有兩個(gè)SQL語句可以達(dá)到在SQL Server 2023/2023壓縮指定數(shù)據(jù)庫文件和日志的大小的效果:
1、DBCC SHRINKDATABASE (Transact-SQL)
收縮指定數(shù)據(jù)庫中的數(shù)據(jù)文件和日志文件的大小。
語法
DBCC SHRINKDATABASE
( ‘database_name’猛者悔 | database_id | 0
)
參數(shù)
‘database_name’ | database_id | 0 要收縮的數(shù)據(jù)庫的名稱或 ID。如果指定 0,枝正則使用當(dāng)前數(shù)據(jù)庫。
target_percent 數(shù)據(jù)庫收縮后的數(shù)據(jù)庫文件中所需的剩余可用空間百分比。
NOTRUNCATE 通過將已分配的頁從文件末尾移動(dòng)到文件前面的未分配頁來壓縮數(shù)據(jù)文件中的數(shù)據(jù)。target_percent 是可選參數(shù)。 文件末尾的可用空間不會返回給操作系統(tǒng),文件的物理大小也不會更改。因此,指定 NOTRUNCATE 時(shí),數(shù)據(jù)庫看起來未收縮。 NOTRUNCATE 只適用于數(shù)據(jù)文件。日志文件不受影響。
TRUNCATEON 將文件末尾的所有可用空間釋放給操作系統(tǒng),但不在文件內(nèi)部執(zhí)行任何頁移動(dòng)。數(shù)據(jù)文件只收縮到最近分配的區(qū)。如果與 TRUNCATEON 一起指定,將忽略 target_percent。 TRUNCATEON 只適用于數(shù)據(jù)文件。日志文件不受影響。
WITH NO_INFOMSGS 取消嚴(yán)重級別從 0 到 10 的所有信息性消息。
結(jié)果集
列名 說明
DbId 數(shù)據(jù)庫引擎試圖收縮的文件的數(shù)據(jù)庫標(biāo)識號。
FileId 數(shù)據(jù)庫引擎嘗試收縮的文件的文件標(biāo)識號。
CurrentSize 文件當(dāng)前占用的嫌明 8 KB 頁數(shù)。
MinimumSize 文件更低可以占用的 8 KB 頁數(shù)。這與文件的最小大小或最初創(chuàng)建時(shí)的大小相對應(yīng)。
UsedPages 文件當(dāng)前使用的 8 KB 頁數(shù)。
EstimatedPages 數(shù)據(jù)庫引擎估計(jì)文件能夠收縮到的 8 KB 頁數(shù)。
備注
若要收縮特定數(shù)據(jù)庫的所有數(shù)據(jù)和日志文件,請執(zhí)行 DBCC SHRINKDATABASE 命令。若要一次收縮一個(gè)特定數(shù)據(jù)庫中的一個(gè)數(shù)據(jù)或日志文件,請執(zhí)行 DBCC SHRINKFILE 命令。
若要查看數(shù)據(jù)庫中當(dāng)前的可用(未分配)空間量,請運(yùn)行 sp_spaceused。
可在進(jìn)程中的任一點(diǎn)停止 DBCC SHRINKDATABASE 操作,任何已完成的工作都將保留。
收縮后的數(shù)據(jù)庫不能小于數(shù)據(jù)庫的最小大小。最小大小是在數(shù)據(jù)庫最初創(chuàng)建時(shí)指定的大小,或是使用文件大小更改操作(如 DBCC SHIRNKFILE 或 ALTER DATABASE)顯式設(shè)置的最后大小。例如,如果數(shù)據(jù)庫最初創(chuàng)建時(shí)的大小為 10 MB,后來增長到 100 MB,則該數(shù)據(jù)庫最小只能收縮到 10 MB,即使已經(jīng)刪除數(shù)據(jù)庫的所有數(shù)據(jù)也是如此。
運(yùn)行 DBCC SHRINKDATABASE 而不指定 NOTRUNCATE 選項(xiàng)或 TRUNCATEON 選項(xiàng)等價(jià)于帶 NOTRUNCATE 運(yùn)行 DBCC SHRINKDATABASE 操作,然后再帶 TRUNCATEON 運(yùn)行 DBCC SHRINKDATABASE 操作。
要收縮的數(shù)據(jù)庫不必在單用戶模式下;其他的用戶仍可以在數(shù)據(jù)庫收縮時(shí)對其進(jìn)行工作。這也包括系統(tǒng)數(shù)據(jù)庫。
不能在備份數(shù)據(jù)庫時(shí)收縮數(shù)據(jù)庫。反之,也不能在數(shù)據(jù)庫執(zhí)行收縮操作時(shí)備份數(shù)據(jù)庫。
DBCC SHRINKDATABASE 的工作原理
DBCC SHRINKDATABASE 以每個(gè)文件為單位對數(shù)據(jù)文件進(jìn)行收縮。然而,DBCC SHRINKDATABASE 在對日志文件進(jìn)行收縮時(shí),它將視為所有的日志文件都存在于一個(gè)連續(xù)的日志池中。文件始終從末尾開始收縮。
假設(shè)名為 mydb 的數(shù)據(jù)庫有一個(gè)數(shù)據(jù)文件和兩個(gè)日志文件。數(shù)據(jù)文件和日志文件分別是 10 MB,并且數(shù)據(jù)文件包含 6 MB 數(shù)據(jù)。
Microsoft SQL Server 2023 數(shù)據(jù)庫引擎對每個(gè)文件計(jì)算一個(gè)目標(biāo)大小。這就是文件將要收縮到的大小。將 target_percent 與 DBCC SHRINKDATABASE 一起指定時(shí),數(shù)據(jù)庫引擎計(jì)算的目標(biāo)大小是收縮后文件中的 target_percent 可用空間大小。例如,如果在收縮 mydb 時(shí)將 target_percent 指定為 25,則數(shù)據(jù)庫引擎將此文件的目標(biāo)大小計(jì)算為 8 MB(6 MB 數(shù)據(jù)加上 2 MB 可用空間)。因此,數(shù)據(jù)庫引擎將任何數(shù)據(jù)從數(shù)據(jù)文件的后 2 MB 中移動(dòng)到數(shù)據(jù)文件前 8 MB 的可用空間中,然后對該文件進(jìn)行收縮。
假設(shè) mydb 的數(shù)據(jù)文件包含 7 MB 的數(shù)據(jù)。將 target_percent 指定為 30,以允許將此數(shù)據(jù)文件收縮到可用空間為 30%。但是,將 target_percent 指定為 40 卻不會收縮數(shù)據(jù)文件,因?yàn)閿?shù)據(jù)庫引擎收縮文件的目標(biāo)大小不能小于數(shù)據(jù)當(dāng)前占用空間大小。您還可以用另一種方法來考慮此問題:所要求的 40% 可用空間加上整個(gè)數(shù)據(jù)文件大小的 70%(10 MB 中的 7 MB),超過了 100%。因?yàn)樗蟮目捎冒俜直燃由蠑?shù)據(jù)文件占用的當(dāng)前百分比大于 100%(多出 10%),所以任何大于 30 的 target_size 都不會收縮此數(shù)據(jù)文件。
對于日志文件,數(shù)據(jù)庫引擎使用 target_percent 來計(jì)算整個(gè)日志的目標(biāo)大??;因此,target_percent 是收縮操作后日志中的可用空間大小。之后,整個(gè)日志的目標(biāo)大小轉(zhuǎn)換為每個(gè)日志文件的目標(biāo)大小。
DBCC SHRINKDATABASE 嘗試立即將每個(gè)物理日志文件收縮到其目標(biāo)大小。如果虛擬日志中的所有邏輯日志部分都沒有超出日志文件的目標(biāo)大小,則該文件將成功截?cái)?,DBCC SHRINKDATABASE 完成且不顯示任何消息。但是,如果部分邏輯日志位于超出目標(biāo)大小的虛擬日志中,則數(shù)據(jù)庫引擎將釋放盡可能多的空間,并發(fā)出一條信息性消息。該消息說明需要執(zhí)行哪些操作來將邏輯日志移出位于文件末尾的虛擬日志。執(zhí)行該操作以后,DBCC SHRINKDATABASE 可用于釋放剩余空間。有關(guān)詳細(xì)信息,請參閱收縮事務(wù)日志。
因?yàn)槿罩疚募荒苁湛s到虛擬日志文件邊界,所以不可能將日志文件收縮到比虛擬日志文件更?。词宫F(xiàn)在沒有使用該文件)。虛擬日志文件的大小在創(chuàng)建或擴(kuò)展這些日志文件時(shí)由數(shù)據(jù)庫引擎動(dòng)態(tài)選擇。有關(guān)虛擬日志文件的詳細(xì)信息,請參閱事務(wù)日志物理體系結(jié)構(gòu)。
如何壓縮數(shù)據(jù)庫表大小不變的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于如何壓縮數(shù)據(jù)庫表大小不變,壓縮數(shù)據(jù)庫表的方法:尺寸縮減不損失數(shù)據(jù),如何壓縮SQL Server 2023指定數(shù)據(jù)庫文件和日志的大小的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計(jì),成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營銷讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。
分享名稱:壓縮數(shù)據(jù)庫表的方法:尺寸縮減不損失數(shù)據(jù)(如何壓縮數(shù)據(jù)庫表大小不變)
轉(zhuǎn)載來源:http://www.dlmjj.cn/article/cdihchc.html


咨詢
建站咨詢
