Aracılığıyla paylaş


Veri ambarında kolon deposu dizinleri

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAnaliz Platformu Sistemi (PDW)Microsoft Fabric'te SQL veritabanı

Bölümleme ile birlikte Columnstore dizinleri, SQL Server veri ambarı oluşturmak için gereklidir. Bu makale, SQL Veritabanı Altyapısı ile veri ambarı tasarımları için önemli kullanım örneklerine ve örneklere odaklanmaktadır.

Veri ambarı için temel özellikler

SQL Server 2016 (13.x), columnstore performans geliştirmeleri için şu özellikleri kullanıma sunar:

  • Always On kullanılabilirlik grupları, okunabilir bir ikincil çoğaltmada columnstore dizinini sorgulamayı destekler.
  • Birden çok Etkin Sonuç Kümesi (MARS), columnstore dizinlerini destekler.
  • yeni bir dinamik yönetim görünümü sys.dm_db_column_store_row_group_physical_stats (Transact-SQL) satır grubu düzeyinde performans sorunlarını giderme bilgileri sağlar.
  • Columnstore dizinlerindeki tüm sorgular toplu iş modunda çalıştırılabilir. Daha önce yalnızca paralel sorgular toplu iş modunda çalıştırılabilirdi.
  • Sort, Distinct Sort ve Distinct işleçleri toplu iş modunda çalışır.
  • Artık pencere birleşimleri, veritabanı uyumluluk düzeyi 130 ve üzeri için toplu iş modunda çalışıyor.
  • Toplamaların verimli bir şekilde işlenmesi için toplu gönderim. Bu, tüm veritabanı uyumluluk düzeylerinde desteklenir.
  • Dize önermelerinin verimli işlenmesi için itme işlemi. Bu, tüm veritabanı uyumluluk düzeylerinde desteklenir.
  • Veritabanı uyumluluk düzeyi 130 ve üzeri için anlık görüntü izolasyonu.
  • Sql Server 2022 (16.x) ile sıralı kümelenmiş columnstore dizinleri kullanıma sunuldu. Daha fazla bilgi için bkz. CREATE COLUMNSTORE INDEX ve Sıralı columnstore dizinleriyle performans ayarlaması. Sıralı columnstore dizini kullanılabilirliği için bkz. Sıralı columnstore dizini kullanılabilirliği.

SQL Server ve Azure SQL'in sürümleri ve platformlarındaki yeni özellikler hakkında daha fazla bilgi için bkz. columnstore dizinlerindeki yenilikler.

Kümelenmemiş ve columnstore dizinlerini birleştirerek performansı geliştirme

SQL Server 2016'dan (13.x) itibaren, kümelenmiş bir columnstore dizininde satır deposu kümesiz dizinler oluşturabilirsiniz.

Örnek: Kümelenmemiş bir dizinle tablo aramalarının verimliliğini artırma

Veri ambarında tablo aramalarının verimliliğini artırmak için, tablo aramalarıyla en iyi performansı gösteren sorguları çalıştırmak için tasarlanmış bir kümelenmemiş dizin oluşturabilirsiniz. Örneğin, eşleşen değerleri arayabilen veya küçük bir değer aralığı döndüren sorgular columnstore dizini yerine B ağacı dizininde daha iyi performans gösterir. Columnstore dizininde tam tarama gerektirmezler ve B ağacı dizini aracılığıyla ikili arama yaparak doğru sonucu daha hızlı döndürürler.

--BASIC EXAMPLE: Create a nonclustered index on a columnstore table.

--Create the table
CREATE TABLE t_account (
    AccountKey int NOT NULL,
    AccountDescription nvarchar (50),
    AccountType nvarchar(50),
    UnitSold int
);

--Store the table as a columnstore.  
CREATE CLUSTERED COLUMNSTORE INDEX taccount_cci ON t_account;

--Add a nonclustered index.
CREATE UNIQUE INDEX taccount_nc1 ON t_account (AccountKey);

Örnek: Columnstore tablosunda birincil anahtar kısıtlamasını zorlamak için kümelenmemiş dizin kullanma

Bir tabloda en fazla bir kümelenmiş dizin olabileceği için, kümelenmiş columnstore dizini olan bir tabloda kümelenmiş birincil anahtar kısıtlaması olamaz. Columnstore tablosunda birincil anahtar kısıtlaması oluşturmak için, bunu kümelenmemiş olarak bildirmeniz gerekir.

Aşağıdaki örnek, kümelenmemiş birincil anahtar kısıtlaması olan bir tablo oluşturur ve sonra tabloda kümelenmiş bir columnstore dizini oluşturur. Columnstore tablosundaki herhangi bir ekleme veya güncelleştirme de kümelenmemiş dizini değiştirdiğinden, birincil anahtar kısıtlamasını ihlal eden tüm işlemler tüm işlemin başarısız olmasına neden olur.

--Create a primary key constraint on a columnstore table.

--Create a rowstore table with a nonclustered primary key constraint.
CREATE TABLE t_account (
    AccountKey int NOT NULL,
    AccountDescription nvarchar (50),
    AccountType nvarchar(50),
    UnitSold int,
    CONSTRAINT pk_account PRIMARY KEY NONCLUSTERED (AccountKey)
);

--Convert the table to columnstore.
--The primary key constraint is preserved as a nonclustered index on the columnstore table.
CREATE CLUSTERED COLUMNSTORE INDEX t_account_cci ON t_account;

Satır düzeyi ve satır grubu düzeyinde kilitlemeyi etkinleştirerek performansı geliştirme

SQL Server 2016 (13.x), sütun deposu dizin özelliğindeki kümelenmemiş dizini tamamlamak amacıyla SELECT, UPDATE ve DELETE işlemleri için ayrıntılı kilitleme özelliği sunar. Sorgular, kümelenmemiş bir dizindeki aramalarda satır düzeyi kilitleme ile ve sütun deposu dizinine karşı tam tablo taramalarında satır grubu düzeyi kilitleme ile çalışabilir. Satır düzeyi ve satır grubu düzeyinde kilitlemeyi uygun şekilde kullanarak daha yüksek okuma/yazma eşzamanlılığı elde etmek için bunu kullanın.

--Granular locking example
--Store table t_account as a columnstore table.
CREATE CLUSTERED COLUMNSTORE INDEX taccount_cci ON t_account

--Add a nonclustered index for use with this example
CREATE UNIQUE INDEX taccount_nc1 ON t_account (AccountKey);

--Look at locking with access through the nonclustered index
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

BEGIN TRAN
    -- The query plan chooses a seek operation on the nonclustered index
    -- and takes the row lock
    SELECT * 
    FROM t_account 
    WHERE AccountKey = 100;
COMMIT TRAN;

Anlık görüntü yalıtımı ve okuma onaylı anlık görüntü yalıtımı

İşlem tutarlılığını garanti etmek için anlık görüntü yalıtımını (SI) ve columnstore dizinlerindeki sorgular için deyim düzeyinde tutarlılığı sağlamak amacıyla okuma-yapılmış anlık görüntü yalıtımını (RCSI) kullanın. Bu, sorguların veri yazıcılarını engellemeden çalışmasını sağlar. Bu engelleyici olmayan davranış, karmaşık işlemler için kilitlenme olasılığını da önemli ölçüde azaltır. Daha fazla bilgi için bkz. Veritabanı Altyapısı'nda satır sürüm oluşturma tabanlı yalıtım düzeyleri.