7

SQL'de bir aziz veritabanı ile bulut üzerinde bir azure uygulaması var. Bir dosyada ayrıştırmayı + işlemeyi (~ 30 milyon sıraya kadar) gerektiren bir çalışan rolüm var, bu yüzden BCP veya SSIS'i doğrudan kullanamıyorum.SqlBulkCopy ve Azure ile Paralel Toplu Ekleme

Şu anda SqlBulkCopy kullanıyorum, ancak 400k satırlar için 4-5 dakikaya kadar yükleme süreleri gördüğümden bu çok yavaş görünüyor.

Toplu eklerimi paralel olarak çalıştırmak istiyorum; bununla birlikte, veriyi paralel/kontrol edici kilit davranışı içinde içe aktarma ile ilgili makaleleri okuyarak, SqlBulkCopy'nin tablonun kümelenmiş dizinlere sahip olmadığını ve bir tablelokun (BU kilidi) belirtilmesi gerektiğini belirtmektedir. Ancak maskeleme tabloları kümelenmiş bir dizine sahip olmalıdır ...

SqlBulkCopy'yi SQL Azure'da aynı tabloda paralel olarak kullanmak mümkün mü? Yoksa bunu yapmak için başka bir API (kodda kullanabileceğim) yok mu?

cevap

4

SqlBulkCopy'yi kullanmadan daha hızlı nasıl çalıştırabileceğinizi göremiyorum. Projemizde yaklaşık 3 dakika içinde 250 bin satırlık ithalat yapabiliriz, bu nedenle oranınız doğru görünüyor.

Teknik olarak mümkün olsa bile, bunu paralel olarak yapmanın faydalı olacağını sanmıyorum. Sadece bir seferde yalnızca 1 ithalat yapıyoruz, aksi takdirde SQL Azure taleplerimizi zamanlamaya başlar. Aslında bazen, büyük bir gruplama sorgusunu içe aktarma ile aynı anda çalıştırmak mümkün değildir. SQL Azure hizmet kalitesini sağlamak için bir sürü iş yapar, bu, hiç, vb

Yani aynı anda birkaç büyük toplu ekler yapıyor olacak muhtemelen neden kimsenin bu kadar çok kaynak almak çok uzun sürer zaman aşımına istekler için de zaman aşımı.

+1

Göt Matt diyor ki. İş çıkışı benim hakkımda. Tablolarınızda kümelenmiş dizin dışında dizinler olmadığından emin olun. –

+4

Geçici tablolara paralel olarak eklendikten sonra, bu geçici tablolardan ana tablolara (seri olarak) eklendim. Bu benim için daha hızlı görünüyordu, çünkü geçici tabloların yerleştirilmesi yaklaşık 2 milyonluk satır için 4-5 dakika sürdü. – kyliod

1

Aynı tabloyu yükleseniz bile SQLBulkCopy'yi SQL Azure'a paralel olarak çalıştırmak mümkündür. Kayıtlarınızı SQLBulkCopy API'sına göndermeden önce toplu olarak kendiniz hazırlamanız gerekir. Bu kesinlikle performansa yardımcı olacaktır ve kendi yaptığınız dışındaki nedenlerle boğulduğunuzda daha küçük bir kayıt grubu için yeniden deneme işlemlerini kontrol etmenizi sağlar.

Çeşitli yaklaşımların yüklenme sürelerini karşılaştırarak, blog post numaralı ürünüme bakın. Örnek bir kod da var. Ayrı testlerde tablonun yükleme süresini yarıya indirebildim.

Bu, birkaç araç için kullandığım tekniktir (Enzo Backup; Enzo Data Copy); Yapılması basit bir şey değildir, ancak doğru yapıldığında yükleme sürelerini önemli ölçüde optimize edebilirsiniz.