Skip to content
Learni
Voir tous les tutoriels
Cloud & Bases de données

Comment déployer et optimiser Azure SQL Database en 2026

Read in English

Introduction

Azure SQL Database est le service PaaS managé de Microsoft pour SQL Server dans le cloud, offrant une scalabilité horizontale et verticale inégalée. En 2026, avec l'essor de l'IA et des workloads massifs, maîtriser son déploiement avancé est crucial pour les architectes : Hyperscale pour les TB de données, serverless pour l'auto-scaling, geo-réplication active pour la DRP, et Query Store pour l'optimisation automatique.

Ce tutoriel avancé vous guide pas à pas, du provisionning IaC à l'optimisation fine, avec codes complets et fonctionnels (Azure CLI, SQL, Bicep). Vous apprendrez à créer une DB Hyperscale, configurer la sécurité Zero Trust, tuner les performances via Intelligent Insights, et monitorer en temps réel. À la fin, vous disposerez d'une architecture production-ready, scalable à 100 TB, résiliente et optimisée pour réduire les coûts de 40%. Prévu pour pros qui bookmarkent : zéro fluff, 100% actionable. (128 mots)

Prérequis

  • Compte Azure actif avec abonnement (crédits suffisent pour tester).
  • Azure CLI 2.65+ installé (télécharger).
  • PowerShell 7+ pour scripts avancés.
  • Azure Data Studio ou SSMS pour exécuter SQL.
  • Connaissances avancées en SQL Server (indexing, query plans) et ARM/Bicep.
  • Région Azure proche (ex: France Central).

Installer Azure CLI et se connecter

terminal.sh
az login
az account set --subscription "VotreSubscriptionID"
az version

Ce script authentifie votre session Azure CLI et sélectionne l'abonnement. Remplacez VotreSubscriptionID par votre ID réel (trouvé via az account list). Évite les pièges d'auth multi-comptes en settant explicitement ; vérifiez avec az version pour confirmer CLI >=2.65.

Créer le Resource Group et le SQL Server

Nous provisionnons un groupe de ressources et un serveur logique Azure SQL avec authentification SQL (admin/password). Utilisez Bicep pour l'IaC déclarative, plus moderne qu'ARM JSON.

Déployer serveur via Bicep

main.bicep
param location string = resourceGroup().location
param sqlAdmin string = 'sqladmin2026'
param sqlPassword string {
  @secure()
  minLength: 12
}

resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' Existing = {
  name: resourceGroup().name
}

resource sqlServer 'Microsoft.Sql/servers@2023-05-01-preview' = {
  name: 'sqlserver-${uniqueString(resourceGroup().id)}'
  location: location
  properties: {
    administratorLogin: sqlAdmin
    administratorLoginPassword: sqlPassword
    version: '16.0'
  }
}

output serverName string = sqlServer.name
output fullServerName string = '${sqlServer.name}.database.windows.net'

Ce template Bicep crée un serveur SQL Server v16 avec admin sécurisé. @secure() masque le password en param. Déployez via az deployment group create --resource-group MonRG --template-file main.bicep --parameters sqlPassword=MonPassSecurise123!. Piège : version '16.0' pour compatibilité Hyperscale.

Déployer la Bicep (CLI)

deploy.sh
az group create --name "rg-sql-advanced-2026" --location "francecentral"
az deployment group create --resource-group "rg-sql-advanced-2026" --template-file main.bicep --parameters sqlPassword='P@ssw0rdAvance2026!SqlDb' --query properties.outputs.serverName.value -o tsv

Crée le RG et déploie le serveur. Capturez l'output serverName pour les étapes suivantes (ex: myserverabc.database.windows.net). Password doit respecter complexité Azure (12+ chars, maj/min/chiffre/special). Évite les erreurs de région en spécifiant francecentral.

Créer une DB Hyperscale et configurer firewall

Provisionnez une DB Hyperscale (scale-out natif jusqu'à 100TB) et ouvrez le firewall pour votre IP. Hyperscale excelle pour OLTP massifs grâce aux compute pools distribués.

Créer DB Hyperscale et firewall

create-db.sh
SERVER_NAME=$(az deployment group show --resource-group "rg-sql-advanced-2026" --name "bicep-deployment" --query properties.outputs.serverName.value -o tsv)

az sql db create --resource-group "rg-sql-advanced-2026" --server $SERVER_NAME --name "hyperscale-db-2026" --service-objective "HS_Gen5_2" --family "Gen5" --edition Hyperscale

az sql server firewall-rule create --resource-group "rg-sql-advanced-2026" --server $SERVER_NAME --name AllowMyIP --start-ip-address $(curl -s ifconfig.me) --end-ip-address $(curl -s ifconfig.me)

Crée une DB Hyperscale Gen5 avec 2 vCores initiaux. HS_Gen5_2 = SKU scalable. Firewall rule pour votre IP publique (via ifconfig.me). Piège : Hyperscale nécessite --edition Hyperscale ; scalez plus tard via portal/CLI.

Se connecter et créer schéma initial

init-schema.sql
USE [hyperscale-db-2026];
GO

CREATE TABLE Users (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Email NVARCHAR(255) NOT NULL UNIQUE,
    CreatedAt DATETIME2 DEFAULT SYSDATETIMEOFFSET()
);
GO

CREATE INDEX IX_Users_Email ON Users(Email) INCLUDE (CreatedAt);
GO

CREATE TABLE Orders (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    UserId INT NOT NULL,
    Amount DECIMAL(10,2),
    OrderDate DATETIME2 DEFAULT SYSDATETIMEOFFSET(),
    FOREIGN KEY (UserId) REFERENCES Users(Id)
);
GO

INSERT INTO Users (Email) VALUES ('test@exemple.com');
INSERT INTO Orders (UserId, Amount) VALUES (1, 99.99);
GO

Exécutez via Azure Data Studio (connexion : server=$SERVER_NAME, db=hyperscale-db-2026, user=sqladmin2026, pass=P@ssw0rd...). Crée tables OLTP avec FK, index columnstore-like. Piège : IDENTITY pour auto-inc, SYSDATETIMEOFFSET pour UTC-aware.

Sécuriser avec Auditing et TDE

Activez l'auditing blob storage, Transparent Data Encryption (TDE), et Advanced Threat Protection pour Zero Trust.

Activer sécurité avancée

security.sh
SERVER_NAME=$(az deployment group show --resource-group "rg-sql-advanced-2026" --name "bicep-deployment" --query properties.outputs.serverName.value -o tsv)

# Auditing to Log Analytics
az sql server create-audit-policy --resource-group rg-sql-advanced-2026 --server $SERVER_NAME --state Enabled --storage-key-type ServiceManaged

# TDE
az sql db tde set --resource-group rg-sql-advanced-2026 --server $SERVER_NAME --database-name hyperscale-db-2026 --status Enabled

# Threat Detection
az sql server advanced-threat-protection-settings create --resource-group rg-sql-advanced-2026 --server $SERVER_NAME --state Enabled --retention-days 90 --storage-endpoint 'https://mystorageacct.blob.core.windows.net/blobcontainer/'

Auditing vers Log Analytics (service-managed). TDE chiffre data-at-rest. ATP détecte injections SQL. Piège : Fournir storage endpoint valide pour ATP ; retenez 90 jours pour conformité GDPR.

Configurer Geo-Réplication active

geo-rep.sh
SERVER_NAME=$(az deployment group show --resource-group "rg-sql-advanced-2026" --name "bicep-deployment" --query properties.outputs.serverName.value -o tsv)

az sql db replica create --resource-group rg-sql-advanced-2026 --server $SERVER_NAME --name geo-replica-db --partner-server myserver-secondary.database.windows.net --service-objective HS_Gen5_4

az sql db failover --resource-group rg-sql-advanced-2026 --server myserver-secondary.database.windows.net --name geo-replica-db

Crée réplique active geo pour RPO=0s, RTO<1min. Failover manuel pour DRP. Scalez secondary à 4 vCores. Piège : Secondary server pré-créé ; utilisez pour HA cross-région (ex: France Central -> West Europe).

Optimiser performances avec Query Store

Query Store (activé par défaut) + Automatic Tuning pour index intelligents. Analysez et forcez plans.

Queries Query Store et Auto-Tune

query-optimize.sql
-- Activer Automatic Tuning
ALTER DATABASE [hyperscale-db-2026] SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON, CREATE_INDEX = ON, DROP_INDEX = ON);
GO

-- Top queries by CPU
SELECT TOP 10
    qt.query_sql_text,
    rs.avg_cpu_time,
    rs.count_executions
FROM sys.query_store_query_text qt
JOIN sys.query_store_query q ON qt.query_text_id = q.query_text_id
JOIN sys.query_store_plan p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
ORDER BY rs.avg_cpu_time DESC;
GO

-- Créer index recommandé
CREATE INDEX IX_Orders_UserId_Amount ON Orders(UserId) INCLUDE (Amount, OrderDate);
GO

Active auto-tuning : force plans stables, crée/drop indexes. Query top CPU pour bottleneck. Piège : avg_cpu_time en µs ; exécutez post-load pour insights réels.

Bonnes pratiques

  • Toujours IaC : Bicep/ARM pour reproducibility, intégrez à GitHub Actions.
  • Scale serverless pour workloads variables : --compute-model Serverless --min-capacity 0.5 --max-capacity 4.
  • Monitoring pro : Azure Monitor + Query Performance Insight ; alertes sur DTU/CPU >80%.
  • Backup custom : PITR jusqu'à 35 jours ; geo-restore pour DR.
  • Cost-optim : Auto-pause après 1h idle, reserved capacity pour -65%.

Erreurs courantes à éviter

  • Oublier firewall : DB inaccessible post-création ; ajoutez toujours rule IP ou VNet.
  • SKU incompatible : Hyperscale refuse General Purpose ; vérifiez --edition.
  • Pas de connection string pooling : Utilisez Pooling=true;Min Pool Size=5 en app.
  • Ignorer Query Store : Sans tuning, CPU spike x10 ; queryz régulièrement.

Pour aller plus loin