Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitik Platform Sistemi (PDW)
Microsoft Fabric'te SQL veritabanı
Standart SQL toplu yükleme ve yavaş ekleme yöntemlerini kullanarak bir columnstore dizinine veri yüklemeye yönelik seçenekler ve öneriler. Verileri bir columnstore dizinine yüklemek, analiz hazırlığında verileri dizine taşıması nedeniyle tüm veri ambarı işlemlerinin önemli bir parçasıdır.
Columnstore dizinleri için yeni misiniz? Bkz . Columnstore dizinleri - genel bakış ve Columnstore Dizin Mimarisi.
Toplu yükleme nedir?
Toplu yükleme , çok sayıda satırın veri deposuna eklenmesini ifade eder. Verileri bir columnstore dizinine taşımanın en yüksek performanslı yoludur çünkü satırlar üzerinde çalışır. Toplu yükleme, satır gruplarını maksimum kapasiteye kadar doldurur ve bunları doğrudan columnstore'da sıkıştırır. Yalnızca, yükün sonundaki ve satır grubu başına en az 102.400 satırı karşılamayan satırlar deltastore'a gider.
Toplu yükleme gerçekleştirmek için bcp Yardımcı Programı'nı, Integration Services'i kullanabilir veya hazırlama tablosundan satır seçebilirsiniz.
Diyagramda da belirtildiği gibi toplu yükleme:
- Verileri önceden sıralamaz. Veriler, alınan sırayla satır gruplarına eklenir.
- Toplu iş boyutu = 102400 ise >, satırlar doğrudan sıkıştırılmış satır gruplarına yüklenir. Verimli toplu içeri aktarma için toplu iş boyutunu >=102400 olarak seçmelisiniz. Bu şekilde, satırlar nihayetinde bir arka plan iş parçacığı olan tuple taşıyıcı (TM) tarafından sıkıştırılmış satır gruplarına taşınmadan önce satırları delta satır gruplarına taşımaktan kaçınabilirsiniz.
- Toplu iş boyutu < 102.400 ise veya kalan satırlar < 102.400 ise, satırlar delta satır gruplarına yüklenir.
Note
Kümelenmemiş columnstore dizin verilerinin bulunduğu bir rowstore tablosunda, SQL Server her zaman temel tabloya veri ekler. Veriler hiçbir zaman doğrudan columnstore dizinine eklenmez.
Toplu yükleme şu yerleşik performans iyileştirmelerine sahiptir:
Paralel yükler: Her birinde ayrı bir veri dosyası yükleyen birden çok eşzamanlı toplu yük (bcp veya toplu ekleme) olabilir. SQL Server'daki rowstore toplu yüklemelerinden farklı olarak, her toplu içe aktarma iş parçacığı, özel kilitle ayrı satır gruplarına (sıkıştırılmış veya delta satır grupları) özel olarak veri yüklediği için,
TABLOCKbelirtmenize gerek yoktur.Azaltılmış günlük: Doğrudan sıkıştırılmış satır gruplarına yüklenen veriler, günlüğün boyutunda önemli ölçüde azalmaya yol açar. Örneğin, veriler 10 kat sıkıştırıldıysa, yaklaşık olarak 10 kat daha küçük olan karşılık gelen işlem günlüğü, Toplu günlüğe kaydetme/Basit kurtarma modeline gerek kalmadan elde edilir. Delta satır grubuna giden tüm veriler tamamen günlüğe kaydedilir. Bu, 102.400 satırdan küçük tüm toplu iş boyutlarını içerir. En iyi yöntem batchsize >= 102400 kullanmaktır. Gerekli olmadığından
TABLOCKverileri paralel olarak yükleyebilirsiniz.En az günlüğe kaydetme: En az günlüğe kaydetme önkoşullarını takip ederseniz, günlüğe kaydetmede daha fazla azalma elde edebilirsiniz. Ancak, verileri bir satır deposuna yüklemekten farklı olarak,
TABLOCKtablodaX(özel) bir kilit oluşturur veBU(toplu güncelleştirme) kilidi yerine geçer, bu nedenle paralel veri yüklemesi yapılamaz. Kilitleme hakkında daha fazla bilgi için bkz. Kilitleme ve satır sürümü oluşturma.Kilitleme iyileştirmesi: Bir
Xsatır grubundaki kilit, verileri sıkıştırılmış bir satır grubuna yüklerken otomatik olarak alınır. Ancak, bir delta satır grubuna toplu yükleme yaparken, satır grubu için birXkilidi alınır. Ancak, satır grubu kilidi kilit hiyerarşisinin bir parçası olmadığı için Veritabanı Altyapısı sayfa ve genişlik kilitlerini almaya devam eder.
Columnstore dizininde kümelenmemiş bir B ağacı dizininiz varsa, dizinin kendisi için kilitleme veya günlüğe kaydetme iyileştirmesi yoktur, ancak kümelenmiş columnstore dizininde daha önce açıklandığı gibi iyileştirmeler geçerlidir.
Delta satır gruplarını en aza indirmek için toplu yük boyutlarını planlama
Columnstore indeksleri, satırların çoğu sütun deposuna sıkıştırıldığında ve delta satır gruplarında yer almadığında en iyi performansı gösterir. Yüklerinizi, satırların doğrudan columnstore'a gitmesini ve deltastore'un mümkün olduğunca atlanmasını sağlayacak şekilde boyutlandırmak en iyisi.
Bu senaryolar, yüklenen satırların doğrudan columnstore'a ne zaman gittiğini veya deltastore'ya ne zaman gittiğini açıklar. Örnekte her satır grubunun satır grubu başına 102.400-1.048.576 satırı olabilir. Pratikte, bellek baskısı olduğunda bir satır grubunun maksimum boyutu 1.048.576 satırdan küçük olabilir.
| Toplu yüklenecek satırlar | Sıkıştırılmış satır grubuna eklenen satırlar | Delta satır grubuna eklenen satırlar |
|---|---|---|
| 102,000 | 0 | 102,000 |
| 145,000 | 145,000 Satır grubu boyutu: 145.000 |
0 |
| 1,048,577 | 1,048,576 Satır grubu boyutu: 1.048.576. |
1 |
| 2,252,152 | 2,252,152 Satır grubu boyutları: 1.048.576, 1.048.576, 155.000. |
0 |
Aşağıdaki örnek, bir tabloya 1.048.577 satır yüklemenin sonuçlarını gösterir. Sonuçlar, columnstore'da sıkıştırılmış bir satır grubu (sıkıştırılmış sütun segmentleri olarak) ve deltastore'da bir satır olduğunu gösterir.
SELECT object_id, index_id, partition_number, row_group_id, delta_store_hobt_id,
state, state_desc, total_rows, deleted_rows, size_in_bytes
FROM sys.dm_db_column_store_row_group_physical_stats;
Performansı geliştirmek için hazırlama tablosu kullanma
Daha fazla dönüştürme çalıştırmadan önce verileri yalnızca hazırlamak için yüklüyorsanız, tabloyu yığın tablosuna yüklemek, verileri kümelenmiş columnstore tablosuna yüklemekten çok daha hızlıdır. Ayrıca verileri [temporary table][Temporary] tablosuna yüklemek, tabloyu kalıcı depolama alanına yüklemekten çok daha hızlı yüklenir.
Veri yüküne yönelik yaygın bir desen, aşağıdaki komutu kullanarak verileri bir hazırlama tablosuna yüklemek, bazı dönüştürmeler yapmak ve ardından hedef tabloya yüklemektir:
INSERT INTO [<columnstore index>]
SELECT col1 /* include actual list of columns in place of col1*/
FROM [<Staging Table>]
Bu komut, verileri bcp veya toplu eklemeye benzer şekilde tek bir toplu iş halinde columnstore dizinine yükler. Hazırlama tablosundaki < satır sayısı 102400 ise, satırlar bir delta satır grubuna yüklenir, aksi takdirde satırlar doğrudan sıkıştırılmış satır grubuna yüklenir. Önemli sınırlamalardan biri, bu INSERT işlemin tek iş parçacıklı olmasıydı. Verileri paralel olarak yüklemek için, birden fazla hazırlama tablosu oluşturabilir veya hazırlama tablosundan çakışmayan satır aralıklarıyla INSERT/SELECT komutu verebilirsiniz. Bu sınırlama SQL Server 2016 (13.x) ile gider. Aşağıdaki komut hazırlama tablosundaki verileri paralel olarak yükler, ancak belirtmeniz TABLOCKgerekir. Daha önce toplu yükleme ile söylenenlerle çelişkili bulabilirsiniz, ancak temel fark, hazırlama tablosundan paralel veri yüklemenin aynı işlem kapsamında yürütülmesidir.
INSERT INTO [<columnstore index>] WITH (TABLOCK)
SELECT col1 /* include actual list of columns in place of col1*/
FROM [<Staging Table>]
Hazırlama tablosundan kümelenmiş columnstore dizinine yükleme sırasında aşağıdaki iyileştirmeler kullanılabilir:
- Günlük iyileştirme: Veriler sıkıştırılmış bir satır grubuna yüklendiğinde günlüğe kaydetme işlemleri azaltıldı.
-
Kilitleme iyileştirmesi: Verileri sıkıştırılmış bir satır grubuna yüklerken,
Xsatır grubu üzerindeki kilit alınır. Ancak, bir delta satır grubuna toplu yükleme yaparken, satır grubu için birXkilidi alınır. Ancak, satır grubu kilidi kilit hiyerarşisinin bir parçası olmadığı için Veritabanı Altyapısı sayfa ve genişlik kilitlerini almaya devam eder.
Bir veya daha fazla kümelenmemiş dizininiz varsa, dizinin kendisi için kilitleme veya günlüğe kaydetme iyileştirmesi yoktur, ancak daha önce açıklandığı gibi kümelenmiş columnstore dizinindeki iyileştirmeler hala oradadır.
Damla ekleme nedir?
Karmaşık ekleme , tek tek satırların columnstore dizinine taşınma şeklini ifade eder. Karmaşık eklemeler INSERT INTO deyimini kullanır. Yavaş ekleme ile tüm satırlar deltastore'a gider. Bu, az sayıda satır için yararlıdır, ancak büyük yükler için pratik değildir.
INSERT INTO [<table-name>] VALUES ('some value' /*replace with actual set of values*/)
Note
Kümelenmiş columnstore dizinine değer eklemek için INSERT INTO kullanan eşzamanlı iş parçacıkları aynı deltastore satır grubuna satır ekleyebilir.
Satır grubu 1.048.576 satır içerdiğinde, delta satır grubu kapalı olarak işaretlenir, ancak sorgular ve güncelleştirme/silme işlemleri için kullanılabilir ancak yeni eklenen satırlar mevcut veya yeni oluşturulan deltastore satır grubuna gider. Arka planda çalışan ve kapalı delta sıra gruplarını yaklaşık her 5 dakikada bir sıkıştıran tuple taşıyıcı (TM) adlı bir iş parçacığı vardır. Kapatılan delta satır grubunu sıkıştırmak için aşağıdaki komutu açıkça çağırabilirsiniz.
ALTER INDEX [<index-name>] on [<table-name>] REORGANIZE
Delta satır grubunu kapalı ve sıkıştırılmış olarak zorlamak istiyorsanız aşağıdaki komutu yürütebilirsiniz. Satırları yüklemeyi bitirdiyseniz ve yeni satır beklemezseniz bu komutu çalıştırmak isteyebilirsiniz. Delta satır grubunu açıkça kapatıp sıkıştırarak depolama alanını daha fazla kaydedebilir ve analiz sorgusu performansını geliştirebilirsiniz. Yeni satırların eklenmesini beklemiyorsanız bu komutu çağırmak en iyi yöntemdir.
ALTER INDEX [<index-name>] on [<table-name>] REORGANIZE with (COMPRESS_ALL_ROW_GROUPS = ON)
Bölümlenmiş tabloya yükleme nasıl çalışır?
Bölümlenmiş veriler için, Veritabanı Altyapısı önce her satırı bir bölüme atar ve ardından bölüm içindeki veriler üzerinde columnstore işlemleri gerçekleştirir. Her bölümün kendi satır grupları ve en az bir delta satır grubu vardır.