BLOB verileri için BCP performansını optimize etme


13

Bölümlenmiş tablolara 2 TB'lık bir veritabanının canlı geçişini planlama sürecim. Sistem genel olarak bir belge deposu konuşuyor, alanın çoğunluğu 500kb ila 1MB aralığında küçük bir yüzdeyle 50kb ile 500kb arasındaki LOB'lara tahsis ediliyor. Geçişin bir kısmı eski veritabanından yeni veritabanına BCPing verilerini içerecektir.

BCP, verilerdeki mevcut / tarihi bölünmenin, son bir anahtardan önce (sessiz dönemlerde) eski verilerin aşamalı olarak çıkarılmasına izin vererek canlı sistem üzerindeki etkiyi en aza indirdiği için tercih edilen yaklaşımdır. Veri hacmi ve depolama kullanılabilirliği, bir bölüm şemasına yerinde yeniden oluşturmayı engeller .

BLOB içeriği nedeniyle ROWS_PER_BATCH yerine KILOBYTES_PER_BATCH ile deneme yaparak bazı performans kazanımlarının olabileceğinden şüpheleniyorum. BCP belgelerinde SQL'in bu değere dayalı işlemleri optimize edebileceği ileri sürülmektedir .

Bulamadığım şey, bu optimizasyonların niteliği veya testime nereden başlayacağım konusunda herhangi bir rehberlik. Önerilerin yokluğunda başlamak için 4/8/16/32 / 64mb sınırlarında kısa koşuları deneyeceğim.

Muhtemelen bazı kazançlar paket boyutunu (BCP -a parametresi, sunucu düzeyi ayarı yerine) değiştirmekten gelebilir, ancak daha formülik bir yaklaşıma sahip olmadıkça bunu maksimum 65535'e çarpma eğilimindeyim.

Yanıtlar:


12

Bu, sorunuzun doğrudan bir yanıtı değildir, ancak bunları okumaktan yararlanabileceğiniz bazı makaleler vardır (ilk önce bulamadıysanız :-)). Bcp / bulk copy kullanarak çok fazla veri yüklemekle ilgilidir. Hepsini okudum ve KILOBYTES_PER_BATCH ile ilgili ayrıntılı bir şey bulamadım, hepsi ROWS_PER_BATCH kullanıyor, ancak eminim başka yararlı bilgiler bulacaksınız.

  • 1TB'den 1 saatten daha kısa sürede yükleyin (SQL CAT ekibinden) - buradan tavsiye listesi (alıntı):

    • Kullanılabilir CPU'larınız kadar yükleme işlemini çalıştırın. 32 CPU'nuz varsa, 32 paralel yük çalıştırın. 8 CPU'nuz varsa, 8 paralel yük çalıştırın.
    • Giriş dosyalarınızın oluşturulması üzerinde denetiminiz varsa, bunları paralel olarak çalıştırmak istediğiniz yük iş parçacığı sayısına eşit olarak bölünebilen bir boyutta yapın. Ayrıca, anahtar bölümü stratejisini kullanmak istiyorsanız tüm kayıtların bir bölüme ait olduğundan emin olun.
    • İşlemi SQL Server makinesinde çalıştırıyorsanız BCP yerine BULK insert kullanın.
    • Tablo bölümlemeyi% 8-10 daha kazanmak için kullanın, ancak yalnızca giriş dosyalarınız bölümleme işlevinizle eşleşecek şekilde GARANTİLİDİR, yani bir dosyadaki tüm kayıtların aynı bölümde olması gerekir.
    • Bir seferde satır kilitlemesini önlemek için TABLOCK kullanın.
    • Bir tabloya birden fazla akış içe aktarıyorsanız, BATCH BAŞLI SATIR = 2500 veya bunun yakınındaki bir şey kullanın.
  • Büyük Ölçekli İlişkisel Veri Ambarı Oluşturmak için En İyi 10 Uygulama (SQL CAT ekibinden) - Öneriler (Alıntı):

    • İlk veri yüklemesi sırasında SIMPLE veya BULK LOGGED kurtarma modelini kullanın.
    • Kümelenmiş dizin ile bölümlenmiş olgu tablosunu oluşturun.
    • Her bölüm için dizine eklenmemiş hazırlama tabloları oluşturun ve her bölümü doldurmak için kaynak veri dosyalarını ayırın.
    • Hazırlama tablolarını paralel olarak doldurun (Birden çok BULK INSERT, BCP veya SSIS görevi kullanın)
    • Her hazırlama tablosunda kümelenmiş bir dizin oluşturun, ardından uygun CHECK kısıtlamaları oluşturun.
    • Tüm bölümleri bölümlenmiş tabloya döndürün.
    • Bölümlenmiş tabloda kümelenmemiş dizinler oluşturun.
  • Veri Yükleme Performansı Kılavuzu (SQL CAT ekibinden)

  • Bölümlenmiş bir tabloya toplu veri yükleme - SQL Server en iyi yöntemler makalesi (Technet makalesi)

  • SQL Server 2000 Artımlı Toplu Yük Vaka Çalışması (Technet makalesi)

  • Büyük Hızlı İzleme Programından Öğrenilen Dersler ve Bulgular (SQL CAT ekibinden)

  • SQL Server BCP için Performans Ayarlama İpuçları (By Brad McGehee)

  • Performans Etkisi: En Uygun Toplu Boyutun Bulunması (Linchi Shea Tarafından)

ve açık MSDN referansları:

Kişisel tecrübelerime göre, paralel yükü ve çeşitli parti boyutları ile testler kullanarak hızlı bir veri yüklemesi yapmayı başardım. Sanırım sadece kişisel testler size uygun. Umarım referanslarda bazı iyi öneriler bulacaksınız.


Teşekkürler Marian, bu kapsamlı listeden birkaç yeni bulgu imi koydum. Bir defaya mahsus bir görev olarak, artımlı / rafine etme adımlarının çoğu o kadar yararlı değildir, ancak kullanabileceğim birçok ipucu vardır.
Mark Storey-Smith

Evet, hislerini alıyorum, benim için de bir defalık bir görevdi ve listede bazı yararlı şeyler buldum. Bu harika bir görev olsa da :-). Linchi Shea'nın başka bir makalesinde olduğu gibi (.NET'e aşina iseniz) küçük bir .NET uygulaması da yapabilirsiniz: Performans Etkisi: En Optimal Ekleme Komut Dosyası BulkCopy'yi yenemez . Onunla aynı bulabilirsiniz :-).
Marian

Vahşi doğada BCP için BLOB'a özel bir rehberlik olmadığı için, çok kapsamlı cevabınızı kabul edilmiş olarak işaretliyorum. Tekrar teşekkürler.
Mark Storey-Smith

Üzgünüm, sana daha fazla yardım edemedim, ama umarım faydalı bir şey bulmuşsundur.
Marian
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.