Magnus Mårtensson
Microsoft Regional Director, Azure MVP, CEO Loftysoft
Avirag Jain
Director & CTO R Systems
Mahesh Chand
Founder C# Corner, CEO Mindcracker
Chris Gali
CEO & Co-Founder Graphite
Subinder Khurana
Chief Architect StoryProcess, Founder NASSCOM DeepTech Club
Bryan Rishforth
Investor, Chairman Graphite
Bryn Everson
Director Biz Dev Graphite
Raj Tiwari
Digital Transformation Leader, Futurist and Visionary
Joseph Guadagno
Microsoft MVP, Lead Quicken Loans
Nikita Sachdev
Entrepreneur, Blockchain Enthusiast & Advisor, Social Media Influencer
Doug Wagner
COO & Founder Adapt Technical Group
Ritesh Modi
Architect, Senior Evangelist, Cloud Architect
Crystal Wenrick
Director Communications Mindcracker
Allen O’Neill
Microsoft MVP, Consulting Engineer/Architect
Praveen Kumar
CEO MCN Solutions
Chris Love
Founder Love2Dev, Microsoft MVP, Author
Sanjay Vyas
Microsoft Regional Director, Microsoft MVP, Founder & CEO SkillLabs Technologies
Veena Sarda
Deep Learning Consultant, Author
Sekhar Srinivasan
C# Corner MVP, Microsoft Certified Trainer, Pluralsight Author
Lalit Bansal
Founder & CEO - EIY SYS
Navdeep Garg
CEO Revinfotech
Prakash Tripathi
Tech Manager/Leader, Microsoft MVP, Blogger
Bhavna Jain
Breakthrough Consultant
Naveen Sharma
Enterprise Architect, Leadership Coach, Author
Vidya Vrat Agarwal
Principal Architect, Microsoft MVP, Author
Sheetal Agarwal
Founder Clownselors, Medical Clown, Trainer
Abhishek Kant
Founder GTM Catalyst
Vishnu Saran
Founder & CEO VoiceQube
Sandeep Soni
Founder & CEO Deccansoft, Microsoft Certified Trainer
Parveen Malik
AVP InfoSec & Vulnerability Management, Information Security Expert
Nitin Pandit
Microsoft MVP, Developer Evangelist, Author
Niloshima Srivastava
C# Corner MVP, Tech Architect, Trainer, Blogger
Bala Chirtsabesan
Senior Software Engineer at Microsoft, Author
Manoj Mittal
Sr. Technical Architect, C# Corner MVP, Author
Chandni Di
Co-Founder Voice of Slum
Vithal Wadje
Technical Lead, Microsoft MVP, Author
Shivam Ahuja
Founder SkillCircle, Business Mentor
Chervine Bhiwoo
Solution Architect, Microsoft MVP, Author
Saurabh Jain
Vice President Paytm, Founder Fun2Do Labs, Author
Vinay Solanki
Head IoT at Lenovo, Founder IoT-NCR
Anshu kumari
Founder Blockchainkids, Inventor, Trainer
Amit Singal
CEO Startup Buddy
Dev Pratap
Co-Founder & CEO Voice of Slum
Amey Vartak
Technology Consultant, Full Stack Developer, C# Corner MVP, Author
Viswanatha Swamy
Principal Software Engineer, C# Corner MVP, Author
Sanket Verma
Research Engineer @ Ballistics (Forensics) and Chair, PyData Delhi
Sourabh Somani
Lead Developer, Microsoft MVP, Author
Abhishek Mishra
Software Architect, C# Corner MVP, Author
Siddharth Vaghasia
Technical Consultant, C# Corner MVP, Blogger
Bassam Alugili
Senior Software Specialist, Database Expert
S Ravi Kumar
Solution Architect, C# Corner MVP, Author
Sundaram Subramanian
Full Stack Developer, C# Corner MVP, Speaker
Deepesh Somani
Solution Architect, Microsoft MVP, Author
Debasis Saha
Technical Project Manager, C# Corner MVP, Blogger, Author
Vipul Jain
Software Architect, C# Corner MVP, Author
Akshay Patel
Technical Architect, Microsoft Certified Trainer, C# Corner MVP, Author
Stephen Simon
RPA Developer, Evangelist, Author
Vivek Sharma
Founder Kingster636, AR/VR Specialist
Jeetendra Gund
Technical Lead, C# Corner MVP, Author
Sujal Beniwal
AI Enthusiast, Student
M Viknaraj
Microsoft MVP, Azure Architect, Author
Prasham Sabadra
Software Architect, C# Corner MVP, Trainer, Author
Aakash Maurya
Senior Developer, C# Corner MVP, Speaker
Ankit Sharma
Senior Software Engineer, C# Corner MVP, Author
Mangesh Gaherwar
Team Lead, C# Corner MVP, Author
Viral Jain
Technical Consultant, C# Corner MVP, Author
Bhasker Das
Solution Architect, Evangelist
Manish Dwivedi
Associate Project Manager
Ck Nitin
Programmer, Author
Rohit Gupta
Technical Trainer, Author
Manish Tewatia
Full-stack Marketer, UX Designer
Bhavya Gaur
Technical Illustrator
Rohit Tomar
SEO/SMO Expert
Web Track
Cloud & Data Track
Dev Track
Registration & Breakfast
Future of Desktop Apps with JS (ElectronJs)
Nitin Pandit
Building Serverless Microservices Using Microsoft Azure
Vithal Wadje
Innovating RPA: A Robot for Every Person
Stephen Simon
Managing Cloud Storage Accounts using Logic Apps
Viknaraj Manogararajah
Data visualization using Python
Sekhar Srinivasan
Going Cross platform with AR Foundation
Vivek Sharma
Keynote
Managing your Azure dependencies in ASP.NET Core apps using VS
Bala Chirtsabesan
Securing Applications on Intelligent Azure
Abhishek Mishra
Getting started with Blazor the Framework of Future
S Ravi Kumar
Lunch
Build Progressive Web Apps using Angular 9
Debasis Saha
Build and deploy to any platform using Azure DevOps
Chervine Bhiwoo
Deep Dive in Azure Service Bus
Akshay Patel
Build a Native Mobile Application using React Native and JavaScript
Joseph Guadagno
Making sense of Web Job, Web Job SDK and Functions in Azure
Prakash Tripathi
CloudFront Distribution in AWS
Viral Jain
Tea Break
Introduction to PowerBI
Aakash Maurya
Build Advanced SPFx solutions with React and Graph API
Siddharth Vaghasia
Build Business Intelligence Analyst (BIA) Skills
Sundaram Subramanian
Deep dive of Power Platform – AI BUILDER
Prasham Sabadra
Panel 1
What's new in SharePoint development
Vipul Jain
Build a SSO (Single Sign On) based Native JavaScript application with Microsoft Identity within 10 minutes
Manoj Mittal
Panel 2
Applications and working of AI
Veena Sarda
Deploying serverless API's with .Net core 3.0 on AWS & Azure
Amey Vartak
Panel 3
Blockchain with .NET Core (Ark)
Anshu Kumari
Closing Note & Prize Distribution
Dev Track
Cloud Track
Architecture Track
Emerging Tech Track
Registration & Breakfast
Creating Full-Stack Web Apps Using Server-Side Blazor
Ankit Sharma
Real time face recognition with MS Cognitive Services
Niloshima Srivastava
Building Scalable APIs with GraphQL
Jeetendra Gund
Future of development with AI and Blockchain
Navdeep Garg
Debugging Tips and Tricks with Visual Studio 2019
Joseph Guadagno
Azure Containers
Abhishek Kant
Enterprise Architecture
Naveen Sharma
Bot Framework - learn it fast and look like a boss!
Allen O’Neill
Keynote
.Net Core & C# 8 Performance
David McCarter
Working with Azure kubernetes services
Ritesh Modi
Becoming an Architect
Vidyavrat Agarwal
Why Techies Need to Learn Product Management
Saurabh Jain
Lunch
Build a rules engine in .Net Core
Sanjay Vyas
Building CI and CD Pipeline using Azure DevOps
Sandeep Soni
Entity Framework Core - Tips and Tricks, Performance Optimization, and Tuning
Bassam Alugili
Hacking your way into Data Science
Sanket Verma
Speed up your .Net Core Website
Sourabh Somani
Azure
Magnus Mårtensson
Demystifying Open Distro for Elasticsearch
Suman Debnath
Future of Data
Shivam Ahuja
Tea Break
gRPC with C# and .Net Core
Mangesh Gaherwar
Panel 1
Essentials of Cloud security
Parveen Malik
Power platform and Dynamics 365
Deepesh Somani
Microservices - the gRPC Way
Viswanatha Swamy
Panel 2
Reserved
Reserved
Closing Note & Prize Distribution
Building Scalable Multi-Tenant Systems with Azure SQL
Multi-tenant applications serve multiple customer organizations from a shared software platform. This model helps teams release features faster and control infrastructure costs, but it also introduces difficult database questions. Each tenant may have different traffic patterns, storage needs, compliance requirements, and expectations for performance.
Azure SQL Database Elastic Pools provide a practical way to manage these demands. Instead of assigning a dedicated database tier to every customer, an application can place multiple databases inside a shared pool of compute and storage resources. This allows capacity to be distributed across tenants as demand changes.
The approach is especially useful for SaaS platforms built with Microsoft technologies. It combines the managed operations of Azure SQL Database with flexible database placement, automated scaling, and familiar tools for monitoring security and performance. The design decisions still matter, however: a pool must be sized correctly, noisy neighbors must be controlled, and tenant growth must be tracked over time.
Understanding Elastic Pool Architecture
An elastic pool is a shared performance boundary for multiple Azure SQL databases. The pool has a defined amount of compute, measured through DTUs or vCores, and the databases inside it draw from that capacity as needed. A quiet tenant consumes little of the shared budget, leaving resources available for tenants experiencing a busy period.
This differs from provisioning an independent service tier for every database. With individual databases, each tenant receives a fixed allocation whether the application uses it or not. Elastic pooling turns that unused capacity into a shared resource, which can significantly improve utilization in workloads where customer activity peaks at different times.
The databases remain logically separate even though they share infrastructure. This separation supports tenant-specific schema objects, backup settings, and lifecycle operations. An application can also move a database between pools or remove it from a pool when a customer requires dedicated performance or a different compliance arrangement.
Choosing A Tenant Isolation Model
The first architectural decision is how tenant data will be organized. A database-per-tenant model places each customer in a separate Azure SQL database, making isolation, backup restoration, and tenant-level administration straightforward. Elastic pools are particularly well suited to this model because many small or moderately active databases can share a common resource budget.
A shared database with tenant identifiers uses one schema for multiple customers. This can reduce operational overhead and simplify cross-tenant reporting, but every query must enforce tenant boundaries correctly. Row-level security, careful indexing, and application-level authorization become essential. A mistake in filtering can expose one customer’s records to another.
Some applications use a hybrid strategy. Smaller tenants may share a database while large or regulated customers receive dedicated databases. The application should hide these differences behind a tenant-aware data access layer so that routing logic does not spread throughout the codebase. A hybrid design also makes it easier to offer premium service tiers without rebuilding the platform.
| Design concern | Database per tenant | Shared database | Hybrid deployment |
|---|---|---|---|
| Data isolation | Strong logical separation | Requires strict filtering and security policies | Varies by tenant segment |
| Operational effort | More databases to monitor | Fewer databases and simpler inventory | Moderate complexity |
| Elastic pool fit | Excellent for many small databases | Pool applies to the shared database | Useful for standard-tier tenants |
| Noisy-neighbor control | Easier to identify and isolate | Requires workload governance | Dedicated treatment for high-volume tenants |
| Customization | High tenant-level flexibility | Limited by shared schema | Balanced flexibility |
| Migration complexity | Tenant databases can move independently | Schema changes affect many customers | Requires routing and migration rules |
Sizing Capacity For Variable Workloads
Pool sizing should begin with workload measurements rather than database count alone. Important signals include average CPU, data IO, log IO, storage growth, concurrent sessions, query duration, and the frequency of short traffic spikes. A pool containing hundreds of inactive databases may need less capacity than a pool containing a few tenants with constant transaction volume.
Azure SQL elastic pools provide minimum and maximum resource settings for individual databases. These limits help prevent one tenant from consuming the entire pool during a sudden workload surge. The minimum protects baseline responsiveness, while the maximum establishes a ceiling for burst usage. Limits should reflect service-level commitments instead of being copied uniformly across every tenant.
Capacity planning also needs a growth model. A new SaaS product may have many small customers at launch, followed by a handful of high-volume accounts later. Regularly review pool utilization and database-level metrics to identify when a pool should be resized, split by workload type, or combined with another pool. Separating reporting-heavy tenants from transactional tenants often produces more predictable performance.
A useful operating goal is to maintain enough headroom for routine spikes without paying for idle capacity. This requires testing realistic concurrency and batch behavior. Synthetic tests that measure only a single request path can miss contention caused by background jobs, imports, scheduled reports, or index maintenance.
Managing Performance And Noisy Neighbors
Shared capacity creates an efficiency advantage, but it can also allow one tenant to affect others. A customer running a large export, inefficient query, or bulk update may increase CPU and IO pressure throughout the pool. The impact depends on workload intensity, resource limits, indexing quality, and the pool’s available headroom.
Query Store, Azure Monitor, and SQL performance insights can help identify the source of contention. Track metrics at both pool and database levels so that an overall average does not hide a struggling tenant. Alerts should cover sustained CPU pressure, high data IO, failed connections, deadlocks, long-running queries, and storage thresholds.
Application controls are equally important. Use asynchronous processing for expensive exports, throttle bulk operations, paginate large result sets, and schedule maintenance jobs during predictable low-demand periods. Connection pooling should be configured carefully, since an excessive number of connections can create pressure even when query volume appears moderate.
When a tenant consistently needs more resources than the shared model can provide, moving it to a dedicated database or separate elastic pool may be the right answer. This is a commercial and technical decision: premium customers may receive isolation as part of their plan, while unusually demanding workloads may require a pricing review.
Automating Provisioning And Tenant Lifecycle
A multi-tenant platform needs repeatable processes for creating databases, assigning them to pools, applying schema changes, configuring identities, and registering connection information. Manual provisioning becomes unreliable as tenant count increases. Infrastructure as code allows development and operations teams to review these changes, test them, and reproduce environments consistently.
Azure Resource Manager templates and Bicep can define SQL servers, databases, elastic pools, firewall rules, private endpoints, diagnostic settings, and role assignments. Teams exploring ARM and Bicep automation can use those practices to make infrastructure changes more visible and repeatable across development, staging, and production environments.
Resource deployment should be separated from tenant onboarding logic where appropriate. A deployment pipeline can create the shared platform, while an application workflow provisions a customer database and applies the correct schema version. This avoids redeploying the entire environment whenever a new tenant signs up.
Database migrations require particular discipline. Every schema change should be backward compatible when possible, allowing old and new application versions to coexist during a rolling release. Migration status should be recorded per tenant, and failed changes should produce actionable alerts rather than leaving the platform in an uncertain state.
Protecting Data And Meeting Compliance Needs
Azure SQL Database includes encryption at rest, auditing, threat detection, identity integration, and network security features that support a strong baseline. Private endpoints can keep database traffic on private network paths, while Microsoft Entra authentication reduces reliance on shared SQL credentials. Access should follow least-privilege principles and be separated between applications, deployment tools, and administrators.
Tenant isolation must be demonstrated through tests, not assumed from the architecture. Verify that tenant identifiers are enforced in every data access path, including background workers, administrative endpoints, exports, and reporting services. For shared schemas, row-level security can provide an additional database-level control, but it must be designed and tested alongside application authorization.
Backups and restore procedures should be evaluated from a tenant perspective. A database-per-tenant model can make targeted restoration simpler, while a shared database may require point-in-time recovery followed by careful data extraction. Define recovery point and recovery time objectives for each service tier, and test restoration before an incident occurs.
Data residency and retention requirements may affect pool placement. Some tenants may need a specific Azure region or a controlled retention period. Keep tenant metadata separate from connection details so that routing decisions can be changed without hard-coding infrastructure assumptions throughout the application.
Operating The Platform At Scale
A reliable service needs an operational model that covers onboarding, upgrades, incident response, and tenant offboarding. Maintain an inventory containing each tenant’s database, pool, region, service tier, schema version, storage usage, and lifecycle state. This information makes capacity planning and support investigations much faster.
Automation should handle routine actions such as pausing nonproduction databases, moving a database between pools, applying standard diagnostic settings, and notifying teams about threshold breaches. Human approval may still be appropriate for destructive operations, production migrations, and changes involving regulated customer data.
Use the following practices to keep the platform manageable:
- Group tenants by workload profile rather than placing every database in one large pool.
- Set database-level minimum and maximum limits to contain noisy-neighbor behavior.
- Monitor pool-level consumption together with tenant-specific CPU, IO, storage, and query metrics.
- Test tenant provisioning, schema upgrades, failover, backup restoration, and offboarding as automated workflows.
- Review pool utilization and tenant growth regularly before capacity becomes a production incident.
Azure SQL Database Elastic Pools work best when treated as part of a broader SaaS architecture rather than as an isolated cost-saving feature. The application must understand tenant placement, the data layer must enforce isolation, and the operations team must have clear signals for scaling and remediation. With those foundations in place, a shared pool can deliver efficient resource usage while preserving a path toward dedicated infrastructure for demanding customers.
For developers and architects exploring cloud databases, Azure design patterns, and platform automation, the C# Corner Annual Conference 2020 sessions provide a useful technology context across Azure, data, DevOps, and application engineering. Apply these principles to a representative multi-tenant workload, measure the results, and turn the findings into an architecture that can grow with every new customer.
1, CBD, Maharaj Surajmal Road, Near Yamuna Sports Complex, Delhi, 110032
GENERAL QUERIES
Manish Tewatia
manish@csharpcon.com
+91-9718-431-042
TICKET QUERIES
Atul Gupta
conference@csharpcon.com
+91-9910-125-804