Krav: I SQL Server-databasen finns det en tabell (t.ex. loggtabell, begäran loggtabell) som tar upp ett mycket stort diskutrymme, kanske hundratals GB, hur kan man minska användningen av tabellutrymmet? Datakomprimering (utrymmesbesparing) kan aktiveras för mycket repetitiv text (t.ex. HTML, JSON, loggar).
ROW-kompression
Komprimering kommer att förändra den fysiska lagringen av datan, men inte den logiska strukturen av datan. Processen för linjekompression:
Identifiera datatypen för varje kolumn och konvertera den till en variabel längd Slutligen reduceras mängden lagringsutrymmesförfrågningar till faktisk efterfrågan Efter komprimering ökar mängden lagrad data på varje sida Efter komprimering, minska mängden metadata Till exempel, om datatypen för en kolumn är smallint, allokerar systemet som standard 2 byte Men i verkligheten används bara 1 byte utrymme, och om komprimering är aktiverat i tabellen kan det allokeras på begäran
PAGE-komprimering
Sidkomprimering utför ytterligare operationer för att förbättra radkomprimeringen Huvudoperationer: radkomprimering, prefixkomprimering, ordbokskomprimering
CPU-förbrukning: PAGE-komprimering > radkomprimering
Test
Skapa nya Users1- och Users2-tabeller, båda infogar 100 000 data, och SQL-skriptet är följande:
För att se bordsutrymmets beläggning, som alla är 3,27 MB, är kommandot följande:
Som visas nedan:
För att se komprimeringsstatusen för Users2-tabellen är kommandot följande:
Som visas nedan:
sp_estimate_data_compression_savingsUppskatta de besparingar som kan uppstå när du aktiverar tabeller eller partitioner för rader, sidor, kolumnlager, kolumnarkiv eller XML-komprimering. Kommandot är följande:
Resultatet är följande:
object_name schema_name index_id partition_number size_with_current_compression_setting(KB) size_with_requested_compression_setting(KB) sample_size_with_current_compression_setting(KB) sample_size_with_requested_compression_setting(KB) Users2 dbo 1 1 3368 1296 3448 1328
size_with_current_compression_setting (KB) 3368 KB Indexet upptar ≈ 3,29 MB med nuvarande komprimeringsinställningar size_with_requested_compression_setting (KB) 1296 KB Uppskattad fotavtryck ≈ 1,27 MB om du aktiverar den nya komprimeringsmetoden du begär, såsom PAGE eller ROW För att utföra sidkomprimering är kommandot följande:
Jämförelse av effekter:Users2-tabellen är 3,27 MB före komprimering och 1,23 MB efter komprimering, som visas i figuren nedan:
Visualiseringen är följande:
Hänvisning:
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig. |