SSIS Veri Akışı veri erişim modu - hızlı yüke karşı 'tablo veya görünüm' nin anlamı nedir?


9

SQL Server Business Intelligence Development Studio'yu kullanarak, SQL Server tablolarıma veri aktarmak için OLE DB hedef veri akışlarına çok sayıda düz dosya yapıyorum. OLE DB hedef düzenleyicisindeki "Veri erişim modu" altında, varsayılan olarak "tablo veya görünüm - hızlı yükleme" yerine "tablo veya görünüm" olarak ayarlanır. Fark ne; algılayabildiğim tek fark, hızlı yükün verileri çok daha hızlı aktarmasıdır.

Yanıtlar:


13

OLE DB Hedef Bileşeninin Veri Erişim Modları hızlı ve hızlı olmayan iki çeşide sahiptir.

Hızlı, "tablo veya görünüm - hızlı yükleme" veya "tablo veya görünüm adı değişkeni - hızlı yükleme", verilerin küme tabanlı bir şekilde yükleneceği anlamına gelir.

Yavaş - "tablo veya görünüm" veya "tablo veya görünüm adı değişkeni", SSIS'in veritabanına tekli ekleme ifadeleri vermesine neden olur. 10, 100, hatta 10000 satır yüklüyorsanız, muhtemelen iki yöntem arasında kayda değer bir performans farkı vardır. Ancak, bir noktada SQL Server örneğinizi tüm bu küçük isteklerle doyuracaksınız. Ayrıca, işlem günlüğünüzdeki halkı kötüye kullanacaksınız.

Neden hızlı olmayan yöntemleri istesin ki? Hatalı veri. 10000 satır veri gönderdiysem ve 9999. satır 2015-02-29 tarihine sahip olsaydı, 10 bin atom eki ve komisyon / geri alma olur. Fast yöntemini kullanıyordum, 10k satırlık tüm toplu iş ya kaydedilecek ya da hiçbiri kaydedilmeyecek. Ve hangi satır (lar) ın ortaya çıktığını bilmek istiyorsanız, sahip olacağınız en düşük ayrıntı düzeyi 10 bin satırdır.

Şimdi, mümkün olduğunca hızlı veri yüklenmesine ve kirli verilerin işlenmesine yönelik yaklaşımlar var. Bu bir var basamaklı başarısızlık yaklaşımı ve şöyle görünür

basamaklı arıza kesici uç

Fikir, tek çekimde mümkün olduğunca eklemek için doğru boyutu bulmanızdır, ancak kötü veri alırsanız, kötü satırlara ulaşmak için verileri art arda daha küçük gruplar halinde kaydetmeyi deneyeceksiniz. İşte Hata Satır eğilim üzerinde 10000 boyutu (FastLoadMaxInsertCommit) işlemek insert bir Maksimum ile başladı, ben bunu değiştirmek Redirect Rowdan Fail Component.

Bir sonraki hedef yukarıdakiyle aynıdır, ancak burada hızlı bir yük dener ve 100 satırlık gruplar halinde kaydederim. Yine, makul bir boyutla gelmeyi test edin veya biraz iddia edin. Bu , orada bir yerde bildiğimiz için 100 satırlık 100 satırlık grupla sonuçlanacaktır , tablonun bütünlük kısıtlamalarını ihlal eden en az bir satır vardır.

Daha sonra karışıma üçüncü bir bileşen ekliyorum, bu sefer 1'lik gruplar halinde kaydediyorum. Her satırı ayrı ayrı kaydedeceğiz ve bu, tek kötü satır (lar) ile "bir şeyler" yapmamızı sağlayacaktır.

Sonunda, güvenli bir varış yerim var. Belki de amaçlanan hedefle "aynı" tablodur, ancak tüm sütunlar olarak bildirilir nvarchar(4000) NULL. Bu tablodaki sonuç ne olursa olsun araştırılmalı ve temizlenmeli / atılmalı veya kötü veri çözümleme süreciniz ne olursa olsun. Diğerleri düz bir dosyaya dökülür, ancak gerçekten, kötü veri çalışmalarını nasıl izlemek istediğiniz için ne mantıklı olursa olsun.


5

Hızlı Yükleme HIZLI YÜK seçenekleri altında iyi belgelenmiştir

  • İçe aktarılan veri dosyasından kimlik değerlerini koruyun veya SQL Server tarafından atanan benzersiz değerleri kullanın.

  • Toplu yükleme işlemi sırasında bir null değeri muhafaza edin.

  • Toplu alma işlemi sırasında hedef tablodaki kısıtlamaları kontrol edin veya görüntüleyin.

  • Toplu yükleme işlemi boyunca tablo düzeyinde bir kilit edinin. Toplu işteki satır sayısını ve işleme boyutunu belirtin.


Fark ne; algılayabildiğim tek fark, hızlı yükün verileri çok daha hızlı aktarmasıdır.

Başlık altında, table or vieweklemek için her satır için ayrı SQL Komutu table or view - with fast loadkullanacak vs BULK INSERT komutunu kullanacaktır.

BULK INSERT içinde mevcut seçenekleri görüyorsanız örn. number of rows in the batch= ROWS_PER_BATCHVe commit size=BATCHSIZE

Başka bir senaryo ...

Varsayılan Maksimum Ekleme İşleme Boyutu (2147483647) çok yüksek. Örneğin, 500K satır ekliyorsunuz ve PK ihlali nedeniyle toplu iş başarısız oluyor. Bu senaryoda, HIZLI YÜK seçeneğini kullandığınızda toplu işin tamamı başarısız olur. Hata açıklamasını da alamazsınız.

Burada table or viewhedef Hatası çıktısı olabilir. 500K'dan itibaren, 5K insert büyüklüğüyle başlayan FAST LOAD kullanıyorsunuz. Bu toplu işteki 1 satır başarısız olursa, bu 5K toplu işi table or viewyükleyecek şekilde yönlendirirsiniz - bu satır SADECE 5K satırlar için satır satır ekleme kullanır ve hatayı table or viewdüz bir dosyaya da yeniden yönlendirebilirsiniz .. böylece herhangi bir satır toplu iş başarısız olursa 5K ise, hataya neyin neden olduğunu tam olarak belirleyebilirsiniz.

Yukarıdaki yöntemin avantajı, satırlardan hiçbiri başarısız olmazsa, tüm toplu iş için BULK INSERT (hızlı yük) kullanmasıdır.

SSIS meraklısı billinkc , Stackoverflow ile ilgili benzer bir soruyu yanıtladı .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.