Edit

Share via


Performance checklist for Blob Storage developers

Use this checklist to reduce latency, increase throughput, and align with Azure Storage scale and performance targets. Azure Storage uses the term targets rather than limits because some values can be increased upon request. When clients approach or exceed these targets, Azure Storage might throttle requests, which increases latency. Use the checklist in this article to align with targets without sacrificing performance.

Note

This article applies only to custom applications. For recommendations that apply to all clients, review the Performance checklist for Blob Storage.

Performance checklist

  • Use Azure Storage client libraries: For best performance, use Microsoft client libraries. These libraries are optimized for performance, kept current with service versions, and handle proven performance practices internally.

  • Optimize parallel block transfers: Increase parallel transfers with smaller block sizes, but maintain sizes above 4 MiB (standard) or 256 KiB (premium) to activate high-throughput block blobs. Balance parallelism to avoid exceeding device capabilities or storage targets, which causes throttling. Set appropriate limits on concurrent requests. See performance guidance for .NET, Java, JavaScript, Python, and Go.

  • Use an exponential backoff retry policy: Handle transient errors with exponential backoff policies. For example, retry after 2, 4, 10, 30 seconds, then stop. This policy prevents excessive retries for non-transient errors such as those that occur when your application approaches or exceeds performance and scale targets. Client libraries know which errors to retry and which ones not to retry. To apply a retry policy, see the retry guidance for .NET, Java, JavaScript, Python, and Go.

  • Use server-to-server APIs to copy between containers and accounts: Use Put Block From URL to copy data between accounts and to copy data within an account. Server-side operations reduce bandwidth since you don't need to download and then upload data. See the copy guidance for .NET, Java, JavaScript, Python, and Go.

  • Cache data to improve performance: Cache frequently accessed or rarely changed data such as configuration and lookup data. Use conditional headers with GET operations to retrieve blobs only if modified since last cached. For more information, see Specifying conditional headers for Blob service operations.

  • Upload data in batches: Aggregate data before uploading instead of uploading immediately. For example, save log entries locally and upload periodically as a single blob rather than uploading each entry individually.

Next steps