SQL Server’da Tüm Tablolar için Veri Sıkıştırma Prosedürü

Herkese merhaba,

Bu yazıda SQL Server’da tüm tablolar için veri sıkıştırma prosedürü hakkında bilgi vereceğim.

İki tür veri sıkıştırma türü vardır.

Satır Düzeyinde Veri Sıkıştırma : Sabit uzunluktaki veri türlerini değişken uzunluktaki veri türlerine dönüştüren ve boş alanı boşaltan bir sıkıştırma yöntemidir. Ayrıca sıfır ve boş değerleri yok sayarak ek alan tasarrufu sağlar. Buna karşılık, tek bir veri sayfasına daha fazla satır sığdırabilir.

Sayfa Düzeyinde Veri Sıkıştırma : Satır düzeyinde veri sıkıştırma ile başlayan ve ardından veri sayfaları için bir önek ve bir sözlük sıkıştırması ekleyen bir sıkıştırma yöntemidir.

Aşağıdaki prosedür, ROW veya PAGE parametreden birini bekler. Hangi sıkıştırma türünü kullanmak istiyorsanız o parametreyi prosedüre yazarak çalıştırabilirsiniz.

CREATE PROCEDURE TumTablolaricinVeriSikistirmaProseduru
(@sikistirma_metodu CHAR(4))
AS
SET NOCOUNT ON;
BEGIN
    DECLARE @schema_name sysname,
            @table_name sysname;
    CREATE TABLE #compress_report_tb
    (
        ObjName sysname,
        schemaName sysname,
        indx_ID INT,
        partit_number INT,
        size_with_current_compression_setting BIGINT,
        size_with_requested_compression_setting BIGINT,
        sample_size_with_current_compression_setting BIGINT,
        sample_size_with_requested_compression_setting BIGINT
    );
    DECLARE c_sch_tb_crs CURSOR FOR
    SELECT TABLE_SCHEMA,
           TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_TYPE LIKE 'BASE%'
          AND TABLE_CATALOG = UPPER(DB_NAME());
    OPEN c_sch_tb_crs;
    FETCH NEXT FROM c_sch_tb_crs
    INTO @schema_name,
         @table_name;
    WHILE @@Fetch_Status = 0
    BEGIN
        INSERT INTO #compress_report_tb
        EXEC sp_estimate_data_compression_savings @schema_name = @schema_name,
                                                  @object_name = @table_name,
                                                  @index_id = NULL,
                                                  @partition_number = NULL,
                                                  @data_compression = @sikistirma_metodu;
        FETCH NEXT FROM c_sch_tb_crs
        INTO @schema_name,
             @table_name;
    END;
    CLOSE c_sch_tb_crs;
    DEALLOCATE c_sch_tb_crs;
    SELECT schemaName AS [schema_name],
           ObjName AS [table_name],
           AVG(size_with_current_compression_setting) AS avg_size_with_current_compression_setting,
           AVG(size_with_requested_compression_setting) AS avg_size_with_requested_compression_setting,
           AVG(size_with_current_compression_setting - size_with_requested_compression_setting) AS avg_size_saving
    FROM #compress_report_tb
    GROUP BY schemaName,
             ObjName
    ORDER BY schemaName ASC,
             avg_size_saving DESC;
    DROP TABLE #compress_report_tb;
END;
SET NOCOUNT OFF;


--Kullanımı
--İlgili veritabanını seçtikten sonra çalıştırın. Aksi durumda sorumluluk size aittir.

EXEC TumTablolaricinVeriSikistirmaProseduru @sikistirma_metodu = 'PAGE';
GO

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

248 Kez Okundu