Aracılığıyla paylaş


sp_estimate_data_compression_savings (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

İstenen nesnenin mevcut boyutunu döndürür ve istenen sıkıştırma durumu için nesne boyutunu tahmin eder. Sıkıştırma, tüm tablolar veya tablo parçaları için değerlendirilebilir. Buna heaps, kümelenmiş indeksler, kümelenmiş indeksler, sütun deposu indeksleri, indekslenmiş görünümler ve tablo ile indeks bölümleri dahildir. Nesneler, satır, sayfa, columnstore veya columnstore arşiv sıkıştırmasıyla sıkıştırılabilir. Tablo, indeks veya bölüm zaten sıkıştırılmışsa, bu prosedürü kullanarak tablo, indeks veya bölme yeniden sıkıştırılırsa veya sıkıştırılmadan saklanırsa boyutunu tahmin edebilirsiniz.

Sistem sys.sp_estimate_data_compression_savings depolanmış prosedür Azure SQL Database ve Azure SQL Managed Instance içinde mevcuttur.

SQL Server 2022 (16.x) ile itibaren, xml veri tipini kullanarak satır dışı XML verilerini sütunlar halinde sıkıştırarak depolama ve bellek gereksinimlerini azaltabilirsiniz. Daha fazla bilgi için bkz. CREATE TABLE ve CREATE INDEX. sp_estimate_data_compression_savings XML sıkıştırma tahminlerini destekler.

Uyarı

Sıkıştırma ve sp_estimate_data_compression_savings SQL Server'ın her sürümünde bulunmuyor. SQL Server sürümleri tarafından desteklenen özelliklerin listesi için bkz. Sürümleri ve SQL Server 2022'nin desteklenen özellikleri.

İstenen sıkıştırma ayarı kullanılırsa nesnenin boyutunu tahmin etmek için, bu saklanan prosedür kaynak nesneyi örnekler ve bu verileri oluşturulan tempdbeşdeğer bir tablo ve indekse yükler. Oluşturulan tempdb tablo veya indeks daha sonra istenen ayara sıkıştırılır ve tahmini sıkıştırma tasarrufu hesaplanır.

Bir tablo, indeks veya bölümün sıkıştırma durumunu değiştirmek için ALTER TABLE veya ALTER INDEX ifadelerini kullanın. Sıkıştırma hakkında genel bilgi için bkz. Veri sıkıştırma.

Uyarı

Mevcut veri parçalanmışsa, dizini yeniden oluşturarak sıkıştırma kullanmadan boyutunu küçültebilirsiniz. İndeksler için, doldurma faktörü bir indeks yeniden yapısı sırasında uygulanır. Bu, endeksin boyutunu artırabilir.

Transact-SQL söz dizimi kuralları

Sözdizimi

sp_estimate_data_compression_savings
    [ @schema_name = ] N'schema_name'
    , [ @object_name = ] N'object_name'
    , [ @index_id = ] index_id
    , [ @partition_number = ] partition_number
    , [ @data_compression = ] N'data_compression'
    [ , [ @xml_compression = ] xml_compression ]
[ ; ]

Arguments

[ @schema_name = ] N'schema_name'

Tabloyu veya indekslenmiş görünümü içeren veritabanı şemasının adı. @schema_namesysname'dir, varsayılan yoktur. Eğer @schema_nameNULLise, mevcut kullanıcının varsayılan şeması kullanılır.

[ @object_name = ] N'object_name'

Indeksin olduğu tablonun veya indeksli görünümün adı. @object_namesysname'dir, varsayılan yoktur.

[ @index_id = ] index_id

Dizinin kimliği. @index_idint'dir ve aşağıdaki değerlerden biri olabilir:

  • bir indeksin ID numarası
  • NULL
  • 0 eğer object_id bir yığın ise

Bir temel tablo veya görünüm için tüm indeksler için bilgi döndürmek için NULL. Eğer belirtirsenizNULL, NULL için de belirtmeniz gerekir.

[ @partition_number = ] partition_number

Nesnedeki bölüm numarası. @partition_numberint'tir ve aşağıdaki değerlerden biri olabilir:

  • bir indeks veya yığının bölüm numarası
  • NULL
  • 1 bölünmemiş bir indeks veya yığın için

Bölümü belirtmek için $PARTITION fonksiyonunu da belirtebilirsiniz. Sahip nesnenin tüm bölümleri için bilgi döndürmek için NULL.

[ @data_compression = ] N'data_compression'

Değerlendirilecek sıkıştırma türünü belirtir. @data_compressionnvarchar(60)'dır ve aşağıdaki değerlerden biri olabilir:

  • NONE
  • ROW
  • PAGE
  • COLUMNSTORE
  • COLUMNSTORE_ARCHIVE

SQL Server 2022 (16.x) ve sonraki sürümler NULL için de olası bir değer vardır. @data_compressionNULLise olamazNULL.

[ @xml_compression = ] xml_compression

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği

XML sıkıştırma için tasarrufun hesaplanıp hesaplanmayacağını belirtir. @xml_compressionbittir ve aşağıdaki değerlerden biri olabilir:

  • NULL (varsayılan)
  • 0
  • 1

@xml_compressionNULLise olamazNULL.

Dönüş kodu değerleri

0 (başarı) veya 1 (başarısızlık).

Sonuç kümesi

Aşağıdaki sonuç kümesi, tablo, indeks veya bölüm için güncel ve tahmini boyut sağlamak üzere geri getirilir.

Sütun adı Veri türü Description
object_name sysname Tablonun adı veya indekslenmiş görünüm.
schema_name sysname Tablonun şeması veya indeksli görünüm.
index_id int Bir indeksin Indeks Kimliği:

0 = Yığın
1 = Kümelenmiş indeks
>1 = Kümelenmemiş indeks
partition_number int Bölüm numarası. Bölünmemiş bir tablo veya indeks için dönüşler 1 .
size_with_current_compression_setting (KB) bigint İstenen tablo, indeks veya bölümün mevcut boyutu.
size_with_requested_compression_setting (KB) bigint İstenen sıkıştırma ayarını kullanan tablo, indeks veya bölümün tahmini boyutu; ve varsayarsa, mevcut dolgu faktörünü ve parçalanma olmadığını varsayarsak.
sample_size_with_current_compression_setting (KB) bigint Mevcut sıkıştırma ayarıyla numunenin boyutu. Bu boyut herhangi bir parçalanmayı da kapsar.
sample_size_with_requested_compression_setting (KB) bigint İstenen sıkıştırma ayarı kullanılarak oluşturulan örneklemin boyutu; ve varsa, mevcut dolgu faktörü ve parçalanma yok.

Açıklamalar

Bir tablo veya bölüm etkinleştirdiğinizde satır, sayfa, columnstore, columnstore arşivi veya XML sıkıştırması için tasarruf yapabileceğiniz tasarrufları tahmin etmek için kullanın sp_estimate_data_compression_savings . Örneğin, sıranın ortalama boyutu %40 küçültülebilirse, nesnenin boyutunu da %40 küçültebilirsiniz. Yer tasarrufu almayabilirsiniz çünkü bu dolgu faktörüne ve sıranın büyüklüğüne bağlıdır. Örneğin, 8.000 bayt uzunluğunda bir satırınız varsa ve boyutunu %40 azaltıyorsanız, bir veri sayfasına sadece bir satır sığdırabilirsiniz. Birikim yok.

Sıkıştırılmamış bir tablo veya indeks üzerinde çalışmanın sp_estimate_data_compression_savings sonuçları boyutun artacağını gösteriyorsa, bu birçok satırın veri tiplerinin neredeyse tüm hassasiyetini kullandığı ve sıkıştırılmış format için gereken küçük ek yükün eklenmesi, sıkıştırmadan elde edilen tasarruftan daha fazla olduğu anlamına gelir. Bu nadir durumda, sıkıştırmayı etkinleştirmeyin.

Bir tablo zaten sıkıştırma için etkinleştirilmişse, tablo sıkıştırılmamışsa sıranın ortalama boyutunu tahmin etmek için kullanılabilir sp_estimate_data_compression_savings .

Bu işlem sırasında masada bir niyet paylaşımlı (IS) kilidi elde edilir. Eğer IS kilidi alınamazsa, işlem engellenir. Tablo, varsayılan okuma taahhüdü izolasyon seviyesi altında taranır.

İstenen sıkıştırma ayarı mevcut sıkıştırma ayarı ile aynıysa, saklanan prosedür kaynak nesnedeki mevcut indeksler için doldurma faktörü kullanılarak veri parçalanması olmadan tahmini boyutu döndürür.

İndeks veya bölüm kimliği yoksa, sonuç döndürülmez.

Permissions

Tablo SELECT ve VIEW DATABASE STATE tabloyu içeren veritabanı üzerinde ve üzerinde VIEW DEFINITIONizin gerektirirtempdb.

Sınırlamalar

SQL Server 2017 (14.x) ve daha önceki sürümlerde bu prosedür columnstore indeksleri için geçerli değildi ve bu nedenle veri sıkıştırma parametrelerini COLUMNSTORE ve COLUMNSTORE_ARCHIVE. SQL Server 2019 (15.x) ve sonraki sürümlerde, ayrıca Azure SQL Database ve Azure SQL Managed Instance'da, columnstore indeksleri hem tahmin için kaynak nesne olarak hem de istenen sıkıştırma türü olarak kullanılabilir.

Memory-Optimized TempDB Metaveri etkinleştirildiğinde, geçici tablolarda columnstore indeksleri oluşturulması desteklenmez. Bu sınırlama nedeniyle, sp_estimate_data_compression_savingsCOLUMNSTORECOLUMNSTORE_ARCHIVE TempDB Meta Verisi etkinleştirildiğinde ve veri sıkıştırma parametreleriyle desteklenmemektedirMemory-Optimized.

Columnstore indeksleri için dikkate alınanlar

SQL Server 2019 (15.x) ile başlayarak, Azure SQL Database ve Azure SQL Managed Instance ile hem sp_estimate_compression_savings columnstore arşiv sıkıştırmalarının tahmin edilmesini destekler. Sayfa ve satır sıkıştırmanın aksine, bir nesneye columnstore sıkıştırmasının uygulanması yeni bir columnstore indeksi oluşturulmasını gerektirir. Bu nedenle, bu prosedürün ve COLUMNSTORE seçenekleri kullanılırkenCOLUMNSTORE_ARCHIVE, prosedüre sağlanan kaynak nesnenin türü, sıkıştırılmış boyut tahmini için kullanılan columnstore indeksi türünü belirler. Aşağıdaki tablo, @data_compression parametresi ya veya COLUMNSTOREolarak ayarlandığındaCOLUMNSTORE_ARCHIVE, her kaynak nesne türü için sıkıştırma tasarrufunu tahmin etmek için kullanılan referans nesneleri gösterilmektedir.

Kaynak nesne Referans nesne
**Yığın Kümelenmiş sütun deposu dizini
Kümelenmiş Kümelenmiş sütun deposu dizini
Kümelenmemiş indeks Kümelenmiş olmayan columnstore indeksi (sağlanan kümelenmiş olmayan indeksin anahtar sütunları ve dahil edilen sütunları ile varsa tablonun bölüm sütunu dahil)
Kümelenmemiş columnstore indeksi Kümelenmiş olmayan columnstore indeksi (sunulan kümelenmiş olmayan columnstore indeksiyle aynı sütunlar dahil)
Kümelenmiş sütun deposu dizini Kümelenmiş sütun deposu dizini

Uyarı

Columnstore sıkıştırmasını bir sıra deposu kaynak nesnesinden (kümelenmiş indeks, kümelenmiş olmayan indeks veya yığın) tahmin ederken, kaynak nesnede columnstore indeksinde desteklenmeyen veri tipine sahip sütun varsa, sp_estimate_compression_savings hata ile başarısız olur.

Benzer şekilde, @data_compression parametresi , NONE, veya ROW olarak ayarlandığında PAGEve kaynak nesne bir columnstore indeksi olduğunda, aşağıdaki tablo kullanılan referans nesneleri özetler.

Kaynak nesne Referans nesne
Kümelenmiş sütun deposu dizini Yığın
Kümelenmemiş columnstore indeksi Kümelenmemiş indeks (kümelenmiş olmayan columnstore indeksindeki sütunlar anahtar sütunlar olarak ve varsa tablonun bölüm sütunu dahil edilen sütun olarak dahil)

Uyarı

Columnstore kaynak nesnesinden sıralı mağaza sıkıştırmasını (NONE, ROW veya PAGE) tahmin ederken, kaynak indeksin 32'den fazla anahtar sütun içermediğinden emin olun; çünkü bu, bir sıralı depo (kümelenmemiş) indekste desteklenen sınırdır.

Örnekler

Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.

A. ROW sıkıştırmasıyla tahmini tasarruf

Aşağıdaki örnek, sıkıştırma kullanılarak sıkıştırıldığında tablonun Production.WorkOrderRoutingROW boyutunu tahmin eder.

EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'WorkOrderRouting', NULL, NULL, 'ROW';
GO

B. PAGE ve XML sıkıştırma ile tahmini tasarruf

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri

Aşağıdaki örnek, sıkıştırma kullanılarak sıkıştırıldığında tablonun Production.ProductModelPAGE tahmin eder ve @xml_compression değeri etkinleştirilir.

EXECUTE sys.sp_estimate_data_compression_savings 'Production', 'ProductModel', NULL, NULL, 'PAGE', 1;
GO