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.
Bir uygulama .NET için Azure Depolama istemci kitaplığını kullanarak veri aktardığında hızı, bellek kullanımını ve hatta isteğin başarısını veya başarısızlığını etkileyebilecek çeşitli faktörler vardır. Veri aktarımlarında performansı ve güvenilirliği en üst düzeye çıkarmak için, uygulamanızın çalıştığı ortama göre istemci kitaplığı aktarım seçeneklerini yapılandırma konusunda proaktif olmak önemlidir.
Bu makalede, veri aktarımı seçeneklerini ayarlama konusunda dikkat edilmesi gereken çeşitli noktalar açıklanır ve bu kılavuz parametre olarak kabul eden tüm API'ler StorageTransferOptions için geçerlidir. düzgün ayarlandığında, istemci kitaplığı verileri birden çok istek arasında verimli bir şekilde dağıtabilir ve bu da gelişmiş işlem hızı, bellek kullanımı ve ağ kararlılığı ile sonuçlanabilir.
StorageTransferOptions ile performans ayarlama
StorageTransferOptions içindeki değerlerin düzgün ayarlanması, veri aktarımı işlemleri için güvenilir performans açısından önemlidir. Depolama aktarımları, bu yapının bir örneğinde tanımlanan özellik değerlerine göre birkaç alt iletide bölümlenir. Desteklenen maksimum aktarım boyutu işleme ve hizmet sürümüne göre değişir, bu nedenle sınırları belirlemek için belgeleri gözden geçirin. Blob depolama için aktarım boyutu sınırları hakkında daha fazla bilgi için bkz . Blob depolama için hedefleri ölçeklendirme.
Aşağıdaki özellikleri StorageTransferOptions uygulamanızın gereksinimlerine göre ayarlanabilir:
- InitialTransferSize - bayt cinsinden ilk isteğin boyutu
- MaximumConcurrency - Paralel olarak kullanılabilecek en fazla alt iletim sayısı
- MaximumTransferSize - bayt cinsinden aktarım uzunluğu üst sınırı
Not
StorageTransferOptions Yapı null atanabilir değerler içeriyor olsa da, istemci kitaplıkları sağlanmadıysa her bir değer için varsayılan değerleri kullanır. Bu varsayılanlar genellikle bir veri merkezi ortamında yüksek performanslıdır, ancak ev tüketicisi ortamları için uygun olmayabilir. Kötü ayarlanmış StorageTransferOptions işlemler aşırı uzun işlemlere ve hatta istek zaman aşımlarına neden olabilir. içindeki değerleri StorageTransferOptionstest etmek ve bunları uygulamanızın ve ortamınızın gereksinimlerine göre ayarlamak için proaktif olmak en iyisidir.
InitialTransferSize
InitialTransferSize , ilk aralık isteğinin bayt cinsinden boyutudur. HTTP aralığı isteği, bu durumda tarafından InitialTransferSize tanımlanan boyuta sahip kısmi bir istektir. Bu boyuttan küçük bloblar tek bir istekte aktarılır. Bu boyuttan büyük bloblar boyut MaximumTransferSizeöbekleri halinde aktarılmaya devam eder.
Belirttiğiniz değerin için MaximumTransferSize unutmayın.
InitialTransferSize , ilk isteğin tüm işlemi aynı anda gerçekleştirmesi için alt iletim olmadan ayrı bir boyut sınırlaması tanımlar. Genellikle, büyük değilse için tanımladığınız InitialTransferSizedeğer kadar büyük olmak istersinizMaximumTransferSize. Veri aktarımının boyutuna bağlı olarak, aktarım tek bir istekle tamamlandığından ve birden çok isteğin ek yükünü önlediği için bu yaklaşım daha yüksek performanslı olabilir.
Durumunuz için en uygun değerin hangisi olduğundan emin değilseniz, güvenli bir seçenek için InitialTransferSizekullanılan değere ayarlamaktırMaximumTransferSize.
Not
Nesne BlobClient kullanılırken, 'den InitialTransferSize küçük bir blob karşıya yüklenirken, Put Block yerine Put Blob kullanılır.
MaximumConcurrency
MaximumConcurrency , paralel aktarımda kullanılabilecek en fazla çalışan sayısıdır. Şu anda yalnızca zaman uyumsuz işlemler aktarımları paralelleştirebilir. Zaman uyumlu işlemler bu değeri yoksayar ve sırayla çalışır.
Bu değerin etkinliği.NET'teki bağlantı havuzu sınırlarına tabidir ve bu da belirli senaryolarda performansı varsayılan olarak kısıtlayabilir. Varsayılan bağlantı sınırını (genellikle istemci ortamında iki veya sunucu ortamında ondur) 100'e yükseltmek için aşağıdaki kodu kullanabilirsiniz. Genellikle, değerini yaklaşık olarak uygulamanız tarafından kullanılan iş parçacığı sayısına ayarlamanız gerekir. Herhangi bir bağlantı açmadan önce bağlantı sınırını ayarlayın.
ServicePointManager.DefaultConnectionLimit = 100; //(Or More)
.NET Framework'teki bağlantı havuzu sınırları hakkında daha fazla bilgi edinmek için bkz . .NET Framework Bağlantı Havuzu Sınırları ve .NET için yeni Azure SDK.
Daha fazla bilgi için bkz . ThreadPool.SetMinThreads yöntemi.
MaximumTransferSize
MaximumTransferSize , bir aktarımın bayt cinsinden uzunluk üst sınırıdır. Daha önce belirtildiği gibi, bu değer InitialTransferSize.
Verilerin verimli bir şekilde ilerlemesini sağlamak için istemci kitaplıkları her aktarım için her zaman değere MaximumTransferSize ulaşamayabilir. İşleme bağlı olarak aktarım boyutu için desteklenen maksimum değer farklılık gösterebilir. Örneğin, 2019-12-12 veya sonraki bir hizmet sürümüne sahip Blok Koy işlemini çağıran blok blobları en fazla 4000 MiB blok boyutuna sahiptir. Blob depolama için aktarım boyutu sınırları hakkında daha fazla bilgi için Bkz . Blob depolama için hedefleri ölçeklendirme.
Kod örneği
İstemci kitaplığı, BlobUploadOptions parametresinin Upload bir parçası olarak StorageTransferOptions UploadAsync örneğini kabul eden ve yöntemleri için aşırı yüklemeler içerir. BlobDownloadToOptions parametresi kullanılarak ve DownloadTo yöntemleri için DownloadToAsync de benzer aşırı yüklemeler vardır.
Aşağıdaki kod örneği, bir StorageTransferOptions örneğin değerlerini tanımlamayı ve bu yapılandırma seçeneklerini parametresi olarak 'a geçirmeyi UploadAsyncgösterir. Bu örnekte sağlanan değerler bir öneri olarak tasarlanmamıştır. Bu değerleri düzgün ayarlamak için uygulamanızın belirli gereksinimlerini dikkate almanız gerekir.
// Specify the StorageTransferOptions
BlobUploadOptions options = new BlobUploadOptions
{
TransferOptions = new StorageTransferOptions
{
// Set the maximum number of parallel transfer workers
MaximumConcurrency = 2,
// Set the initial transfer length to 8 MiB
InitialTransferSize = 8 * 1024 * 1024,
// Set the maximum length of a transfer to 4 MiB
MaximumTransferSize = 4 * 1024 * 1024
}
};
// Upload data from a stream
await blobClient.UploadAsync(stream, options);
Bu örnekte, özelliğini kullanarak paralel aktarım çalışanlarının sayısını 2 olarak MaximumConcurrency ayarlayacağız. Bu yapılandırma aynı anda en fazla iki bağlantı açarak karşıya yüklemenin paralel olarak gerçekleşmesini sağlar. İlk HTTP aralığı isteği, özelliği tarafından InitialTransferSize tanımlandığı gibi 8 MiB'a kadar veri yüklemeyi dener. Yalnızca aranabilir bir akışInitialTransferSizekarşıya yüklemeler için geçerli olduğunu unutmayın. Blob boyutu 8 MiB'den küçükse, işlemi tamamlamak için yalnızca tek bir istek gerekir. Blob boyutu 8 MiB'den büyükse, sonraki tüm aktarım isteklerinin boyutu en fazla 4 MiB olur ve bu boyut özelliğiyle MaximumTransferSize ayarlanır.
Minimum iş parçacığı sayısını artırma
Senkron çağrıları asenkron görevlerle birlikte kullanıyorsanız, iş parçacığı havuzundaki iş parçacığı sayısını artırmak isteyebilirsiniz.
ThreadPool.SetMinThreads(100,100); //(Determine the right number for your application)
Karşıya yüklemeler için performansla ilgili dikkat edilmesi gerekenler
Karşıya yükleme sırasında Depolama istemci kitaplıkları, belirli bir karşıya yükleme akışını örnekte tanımlanan değerlere göre birden çok alt yüke StorageTransferOptions böler. Her alt yükün REST işlemine kendi ayrılmış çağrısı vardır. Bir BlobClient nesne veya BlockBlobClient nesne için bu işlem Put Block işlemidir. Bir DataLakeFileClient nesne için bu işlem Veri Ekle'dir. Depolama istemci kitaplığı, yüklemenin tamamını tamamlamak için bu REST işlemlerini paralel olarak yönetir (aktarım seçeneklerine bağlı olarak).
Karşıya yükleme akışının aranabilir veya aranamaz olmasına bağlı olarak, istemci kitaplığı aşağıdaki bölümlerde açıklandığı gibi arabelleğe almayı ve InitialTransferSize farklı şekilde işler. Aranabilir akış, bir akış içindeki geçerli konumu sorgulamayı ve değiştirmeyi destekleyen bir akıştır. .NET'teki akışlar hakkında daha fazla bilgi edinmek için bkz . Stream sınıfı başvurusu.
Not
Blok blobları en fazla 50.000 blok blok sayısına sahiptir. Blok blobunuzun boyutu üst sınırı 50.000 kezdir MaximumTransferSize.
Karşıya yüklemeler sırasında arabelleğe alma
Depolama REST katmanı, kaldığınız yerden REST karşıya yükleme işleminin algılanmasını desteklemez; tek tek aktarımlar tamamlanır veya kaybolur. Aranamayan akış karşıya yüklemelerinde dayanıklılık sağlamak için, Depolama istemci kitaplıkları karşıya yüklemeyi başlatmadan önce her rest çağrısı için verileri arabelleğe alır. Ağ hızı sınırlamalarına ek olarak, bu arabelleğe alma davranışı sırayla karşıya yüklerken bile için MaximumTransferSizedaha küçük bir değeri göz önünde bulundurmanın bir nedenidir. değerinin MaximumTransferSize azaltılması, her istekte arabelleğe alınan maksimum veri miktarını ve başarısız bir isteğin her yeniden denemesini azaltır. Belirli bir boyuttaki veri aktarımları sırasında sık sık zaman aşımlarıyla karşılaşıyorsanız değerini MaximumTransferSize azaltmak arabelleğe alma süresini azaltır ve daha iyi performansa neden olabilir.
Arabelleğe alma işleminin gerçekleştiği bir diğer senaryo da, ağ aktarım hızını en üst düzeye çıkarmak için paralel REST çağrılarıyla verileri karşıya yüklediğinizde ortaya çıkar. İstemci kitaplıklarının paralel olarak okuyabilecekleri kaynaklara ihtiyacı vardır ve akışlar sıralı olduğundan, Depolama istemci kitaplıkları karşıya yüklemeyi başlatmadan önce her rest çağrısı için verileri arabelleğe alır. Sağlanan akış aranabilir olsa bile bu arabelleğe alma davranışı oluşur.
Zaman uyumsuz karşıya yükleme çağrısı sırasında arabelleğe almayı önlemek için aranabilir bir akış sağlamanız ve 1 olarak ayarlamanız MaximumConcurrency gerekir. Bu strateji çoğu durumda işe yarasa da, kodunuz arabelleğe alma gerektiren diğer istemci kitaplığı özelliklerini kullanıyorsa arabelleğe alma gerçekleşebilir.
Karşıya yüklemede InitialTransferSize
Karşıya yükleme için aranabilir bir akış sağlandığında, akış uzunluğu değeriyle InitialTransferSizekarşılaştırılır. Akış uzunluğu bu değerden küçükse, diğer StorageTransferOptions değerlerden bağımsız olarak akışın tamamı tek bir REST çağrısı olarak karşıya yüklenir. Aksi takdirde, karşıya yükleme daha önce açıklandığı gibi birden çok bölümde yapılır.
InitialTransferSize aranamaz bir akış üzerinde hiçbir etkisi yoktur ve yoksayılır.
İndirmeler için performansla ilgili dikkat edilmesi gerekenler
İndirme sırasında Depolama istemci kitaplıkları, belirli bir indirme isteğini örnekte tanımlanan değerlere göre birden çok alt yüke StorageTransferOptions böler. Her alt indirmenin REST işlemine kendi ayrılmış çağrısı vardır. Aktarım seçeneklerine bağlı olarak, istemci kitaplıkları tam indirmeyi tamamlamak için bu REST işlemlerini paralel olarak yönetir.
İndirmeler sırasında arabelleğe alma
Gövde içeriğiyle aynı anda birden çok HTTP yanıtı almak bellek kullanımına etki eder. Ancak, Depolama istemci kitaplıkları indirilen içerikler için açıkça bir arabellek adımı eklemez. Gelen yanıtlar sırayla işlenir. İstemci kitaplıkları, HTTP yanıt akışındaki akışları çağıran tarafından sağlanan hedef akışa veya dosya yoluna kopyalamak için 16 kilobaytlık bir arabellek yapılandırmaktadır.
İndirmede InitialTransferSize
İndirme sırasında, Depolama istemci kitaplıkları başka bir şey yapmadan önce kullanarak InitialTransferSize bir indirme aralığı isteğinde bulunur. bu ilk indirme isteği sırasında istemci kitaplıkları kaynağın toplam boyutunu bilir. İlk istek tüm içeriği başarıyla indirdiyse işlem tamamlanır. Aksi takdirde, istemci kitaplıkları tam indirme tamamlanana kadar aralık isteklerinde bulunmaya MaximumTransferSize devam eder.
Sonraki adımlar
- Bu makale, .NET için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Uygulamanızı derleme bölümünde geliştirici kılavuzu makalelerinin tam listesine bakın.
- Azure Depolama işlemlerinin performansını etkileyebilecek faktörler hakkında daha fazla bilgi edinmek için bkz . Blob depolamada gecikme süresi.
- Blob depolama kullanarak uygulamaların performansını iyileştirmeye yönelik tasarım konuları listesini görmek için bkz . Blob depolama için performans ve ölçeklenebilirlik denetim listesi.