Aracılığıyla paylaş


Azure Synapse Analytics'te ayrılmış bir SQL havuzuna veri yüklemek için en iyi yöntemler

Bu makalede, verileri yüklemeye yönelik öneriler ve performans iyileştirmeleri bulacaksınız.

Azure Depolama'da verileri hazırlama

Gecikme süresini en aza indirmek için depolama katmanınızı ve ayrılmış SQL havuzunuzu birlikte konumlandırın.

Verileri bir ORC Dosya Biçimine aktarırken, büyük metin sütunları olduğunda Java bellek yetersizliği hataları alabilirsiniz. Bu sınırlamayı geçici olarak çözmek için sütunların yalnızca bir alt kümesini dışarı aktarın.

PolyBase, 1.000.000 bayttan fazla veri içeren satırları yükleyemez. Azure Blob depolama veya Azure Data Lake Store'daki metin dosyalarına veri yerleştirdiğinizde, bunların 1.000.000 bayttan az verisi olmalıdır. Tablo şemasından bağımsız olarak bu bayt sınırlaması doğrudur.

Tüm dosya biçimleri farklı performans özelliklerine sahiptir. En hızlı yük için sıkıştırılmış sınırlandırılmış metin dosyalarını kullanın. UTF-8 ile UTF-16 performansı arasındaki fark en düşük düzeydedir.

Büyük sıkıştırılmış dosyaları daha küçük sıkıştırılmış dosyalara bölün.

Yeterli hesaplama gücüyle yükleri çalıştırın

En hızlı yükleme hızı için aynı anda yalnızca bir yük işi çalıştırın. Bu mümkün değilse, en az sayıda yükü eşzamanlı olarak çalıştırın. Büyük bir yükleme işi bekliyorsanız, yüklemeden önce ayrılmış SQL havuzunuzun ölçeğini artırmayı göz önünde bulundurun.

Yükleri uygun işlem kaynaklarıyla çalıştırmak için, çalışan yükler için belirlenmiş yükleme kullanıcıları oluşturun. Her yükleme kullanıcısını belirli bir kaynak sınıfına veya iş yükü grubuna atayın. Yük çalıştırmak için, yükleme kullanıcılarından biri olarak oturum açın ve ardından yükü çalıştırın. Yük, kullanıcının kaynak sınıfıyla çalışır. Bu yöntem, kullanıcının kaynak sınıfını geçerli kaynak sınıfı gereksinimine uyacak şekilde değiştirmeye çalışmaktan daha basittir.

Yükleme kullanıcısı oluşturma

Bu örnek, belirli bir iş yükü grubuna sınıflandırılmış bir yükleme kullanıcısı oluşturur. İlk adım , ana sunucuya bağlanmak ve oturum açma bilgileri oluşturmaktır.

   -- Connect to master
   CREATE LOGIN loader WITH PASSWORD = 'a123STRONGpassword!';

Ayrılmış SQL havuzuna bağlanın ve bir kullanıcı oluşturun. Aşağıdaki kod, mySampleDataWarehouse adlı veritabanına bağlı olduğunuzu varsayar. Yükleyici adlı bir kullanıcının nasıl oluşturulacağını gösterir ve kullanıcıya COPY deyimini kullanarak tablo oluşturma ve yükleme izinleri verir. Ardından kullanıcıyı en fazla kaynakla DataLoads iş yükü grubuna sınıflandırır.

   -- Connect to the dedicated SQL pool
   CREATE USER loader FOR LOGIN loader;
   GRANT ADMINISTER DATABASE BULK OPERATIONS TO loader;
   GRANT INSERT ON <yourtablename> TO loader;
   GRANT SELECT ON <yourtablename> TO loader;
   GRANT CREATE TABLE TO loader;
   GRANT ALTER ON SCHEMA::dbo TO loader;
   
   CREATE WORKLOAD GROUP DataLoads
   WITH ( 
       MIN_PERCENTAGE_RESOURCE = 0
       ,CAP_PERCENTAGE_RESOURCE = 100
       ,REQUEST_MIN_RESOURCE_GRANT_PERCENT = 100
	);

   CREATE WORKLOAD CLASSIFIER [wgcELTLogin]
   WITH (
	     WORKLOAD_GROUP = 'DataLoads'
       ,MEMBERNAME = 'loader'
   );



Önemli

Bu, SQL havuzunun 100% kaynağını tek bir yüke ayırmaya yönelik aşırı bir örnektir. Bu size en fazla 1 eşzamanlılık verir. Bunun yalnızca iş yüklerinizdeki kaynakları dengelemek için kendi yapılandırmalarına sahip başka iş yükü grupları oluşturmanız gereken ilk yük için kullanılması gerektiğini unutmayın.

Yükleme iş yükü grubuna yönelik kaynaklarla yük çalıştırmak için yükleyici olarak oturum açın ve yükü çalıştırın.

Birden çok kullanıcının yüklenmesine izin ver

Genellikle birden çok kullanıcının bir veri ambarı içine veri yüklemesi gerekir. CREATE TABLE AS SELECT (Transact-SQL) ile yüklemek için veritabanının CONTROL izinleri gerekir. CONTROL izni, denetime tüm şemalara erişim verir. Tüm yükleme kullanıcılarının tüm şemalarda denetim erişimine sahip olmasını istemeyebilirsiniz. İzinleri sınırlamak için DENY CONTROL deyimini kullanın.

Örneğin, veritabanı şemalarını, A bölümü için schema_A ve B bölümü için schema_B göz önünde bulundurun. Veritabanı kullanıcılarının sırasıyla A ve B bölümünde PolyBase yüklemesi için user_A ve user_B kullanıcıları olmasına izin verin. Her ikisinde de CONTROL veritabanı izinleri verilmiştir. A ve B şemalarını oluşturanlar artık DENY kullanarak şemalarını kilitler:

   DENY CONTROL ON SCHEMA :: schema_A TO user_B;
   DENY CONTROL ON SCHEMA :: schema_B TO user_A;

User_A ve user_B artık diğer bölümün şemasından kilitlendi.

Hazırlama tablosuna yükleme

Verileri bir veri ambarı tablosuna taşımak için en hızlı yükleme hızını elde etmek için, verileri hazırlama tablosuna yükleyin. Hazırlama tablosunu yığın olarak tanımlayın ve dağıtım seçeneği için dönüşümlü işlemi kullanın.

Yüklemenin genellikle bir hazırlama tablosuna yükleyip ardından verileri üretim veri ambarı tablosuna eklediğiniz iki adımlı bir işlem olduğunu düşünün. Üretim tablosunda karma dağıtım kullanılıyorsa hazırlama tablosunu karma dağıtımıyla tanımlarsanız toplam yükleme ve ekleme süresi daha hızlı olabilir. Hazırlama tablosuna yükleme daha uzun sürer, ancak satırları üretim tablosuna eklemenin ikinci adımı, dağıtımlar arasında veri hareketine neden olmaz.

Columnstore dizinine yükleme

Columnstore dizinleri, verileri yüksek kaliteli satır gruplarına sıkıştırmak için büyük miktarda bellek gerektirir. En iyi sıkıştırma ve dizin verimliliği için columnstore dizininin her satır grubuna en fazla 1.048.576 satır sıkıştırması gerekir. Bellek baskısı olduğunda columnstore dizini en yüksek sıkıştırma hızlarına ulaşamayabilir. Bu, sorgu performansını etkiler. Ayrıntılı bilgi için bkz. Columnstore bellek iyileştirmeleri.

  • Yükleme kullanıcısının en yüksek sıkıştırma hızlarına ulaşmak için yeterli belleğe sahip olduğundan emin olmak için orta veya büyük bir kaynak sınıfının üyesi olan kullanıcıları yükleyin.
  • Yeni satır gruplarını tamamen dolduracak kadar satır yükleyin. Toplu yükleme sırasında, her 1.048.576 satır tam bir satır grubu olarak doğrudan columnstore'da sıkıştırılır. 102.400'den az satır içeren yükler, satırların b-ağacı dizininde tutulduğu deltastore'a gönderilir. Çok az satır yüklerseniz, bunların tümü deltastore'a gidebilir ve hemen columnstore formatına sıkıştırılmayabilir.

SQLBulkCopy API veya BCP kullanırken toplu iş boyutunu artırma

COPY deyimiyle yükleme, ayrılmış SQL havuzları ile en yüksek aktarım hızını sağlar. Yüklemek için COPY'yi kullanamıyorsanız ve SqLBulkCopy API'sini veya bcp'yi kullanmanız gerekiyorsa, daha iyi aktarım hızı için toplu iş boyutunu artırmayı düşünmelisiniz.

Tavsiye

Önerilen optimum toplu iş boyutu kapasitesini belirlemek için 100 bin ile 1 milyon satır arasında bir toplu iş boyutu temel alınmalıdır.

Yükleme hatalarını yönetme

Dış tablo kullanan bir yük "Sorgu durduruldu, dış kaynaktan okunurken maksimum reddetme eşiğine ulaşıldı" hatasıyla başarısız olabilir. Bu ileti dış verilerinizin kirli kayıtlar içerdiğini gösterir. Veri türleri ve sütun sayısı dış tablonun sütun tanımlarıyla eşleşmiyorsa veya veriler belirtilen dış dosya biçimine uymuyorsa veri kaydı kirli olarak kabul edilir.

Kirli kayıtları düzeltmek için dış tablonuzun ve dış dosya biçimi tanımlarınızın doğru olduğundan ve dış verilerinizin bu tanımlara uygun olduğundan emin olun. Dış veri kayıtlarının bir alt kümesinin kirli olması durumunda, 'EXTERNAL TABLE OLUŞTUR' içindeki reddetme seçeneklerini kullanarak sorgularınız için bu kayıtları reddetmeyi seçebilirsiniz.

Üretim tablosuna veri ekleme

INSERT deyimi kullanılarak küçük bir tabloya yapılacak tek seferlik bir yükleme, hatta bir arama tablosunun periyodik olarak yeniden yüklenmesi bile, INSERT INTO MyLookup VALUES (1, 'Type 1') gibi bir deyimle yeterince iyi çalışabilir. Ancak, tekil eklemeler, toplu yükleme gerçekleştirmek kadar verimli değildir.

Gün boyunca binlerce veya daha fazla tekil ekleme yapıyorsanız, bunları birleştirerek toplu yükleme yapabilirsiniz. Tek eklemeleri bir dosyaya eklemek için işlemlerinizi geliştirin ve ardından dosyayı düzenli aralıklarla yükleyen başka bir işlem oluşturun.

Yüklemeden sonra istatistik oluşturma

Sorgu performansını geliştirmek için ilk yüklemeden sonra tüm tabloların tüm sütunlarında istatistikler oluşturmak veya verilerde önemli değişiklikler yapmak önemlidir. İstatistik oluşturma işlemi el ile yapılabilir veya istatistikleri otomatik oluşturmayı etkinleştirebilirsiniz.

İstatistiklerin ayrıntılı açıklaması için bkz. İstatistikler. Aşağıdaki örnekte, Customer_Speed tablosunun beş sütunu üzerinde el ile nasıl istatistik oluşturulacağı gösterilmektedir.

create statistics [SensorKey] on [Customer_Speed] ([SensorKey]);
create statistics [CustomerKey] on [Customer_Speed] ([CustomerKey]);
create statistics [GeographyKey] on [Customer_Speed] ([GeographyKey]);
create statistics [Speed] on [Customer_Speed] ([Speed]);
create statistics [YearMeasured] on [Customer_Speed] ([YearMeasured]);

Depolama anahtarlarını döndürme

Erişim anahtarını blob depolama alanınıza düzenli olarak değiştirmek iyi bir güvenlik uygulamasıdır. Blob depolama hesabınız için anahtarları geçirmenizi sağlayan iki depolama anahtarınız vardır.

Azure Depolama hesabı anahtarlarını döndürmek için:

Anahtarı değiştirilen her depolama hesabı için ALTER DATABASE SCOPED CREDENTIAL değerini verin.

Örnek:

Özgün anahtar oluşturuldu

CREATE DATABASE SCOPED CREDENTIAL my_credential WITH IDENTITY = 'my_identity', SECRET = 'key1'

Anahtarı 1 tuşundan 2. tuşa döndürme

ALTER DATABASE SCOPED CREDENTIAL my_credential WITH IDENTITY = 'my_identity', SECRET = 'key2'

Temel alınan dış veri kaynaklarında başka değişiklik yapılması gerekmez.