Vereisten: In een SQL Server-database is er een tabel (bijvoorbeeld logtabel, verzoek-logtabel) die een zeer grote schijfruimte inneemt, misschien honderden GB, hoe kun je het gebruik van tabelruimte verminderen? Datacompressie (ruimtebesparing) kan worden ingeschakeld voor sterk repetitieve tekst (bijv. HTML, JSON, logs).
ROW-compressie
Compressie verandert de fysieke opslag van de data, maar niet de logische structuur van de data. Het proces van lijncompressie:
Identificeer het datatype van elke kolom en zet dit om naar een variabele lengte Ten slotte wordt het aantal opslagruimteverzoeken teruggebracht tot de daadwerkelijke vraag Na compressie wordt de hoeveelheid opgeslagen data op elke pagina vergroot Na compressie verminder je de hoeveelheid metadata Als bijvoorbeeld het datatype van een kolom smallint is, wijst het systeem standaard 2 bytes toe Maar in werkelijkheid wordt er slechts 1 byte ruimte gebruikt, en als compressie op de tafel is ingeschakeld, kan deze op aanvraag worden toegewezen
PAGE-compressie
Paginacompressie voert extra bewerkingen uit om de rijcompressie te verbeteren Belangrijkste bewerkingen: lijncompressie, prefixcompressie, woordenboekcompressie
CPU-verbruik: PAGE-compressie > rijcompressie
Test
Maak een nieuwe Users1- en Users2-tabel aan, beide voegen 100.000 datastukken in, en het SQL-script is als volgt:
Om de bezetting van de tafel te bekijken, die allemaal 3,27 MB bedraagt, volgt het commando:
Zoals hieronder getoond:
Om de compressiestatus van de Users2-tabel te bekijken, is het commando als volgt:
Zoals hieronder getoond:
sp_estimate_data_compression_savingsSchat de besparingen die kunnen ontstaan wanneer je tabellen of partities inschakelt voor rijen, pagina's, kolomopslagplaatsen, kolomopslagarchieven of XML-compressie. Het commando is als volgt:
De output is als volgt:
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 De index beslaat ≈ 3,29 MB met de huidige compressie-instellingen size_with_requested_compression_setting (KB) 1296 KB Geschatte footprint ≈ 1,27 MB als je de nieuwe compressiemethode inschakelt die je aanvraagt, zoals PAGE of ROW Om paginacompressie uit te voeren, is het commando als volgt:
Vergelijking van effecten:De Users2-tabel is 3,27 MB vóór compressie en 1,23 MB na compressie, zoals getoond in de onderstaande figuur:
De visualisatie is als volgt:
Referentie:
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar.
De hyperlink-login is zichtbaar. |