Vous êtes sur la page 1sur 58

SQL

Structured Query
Language

Jérémie HOARAU
contact@pari.re
0692 60 60 82
1
Généralités 
Premiers SGBDR conçus parle docteur Ted Codd (chercheur pour 
IBM) dans les années 70
Le SQL est né en 1979
Le SQL : standard de toutes les bases de données relationnelles
SQL comporte 5 grandes parties :
DDL : la définition des éléments d'une base de données (tables, colonnes, 
clefs, index, contraintes...), 
DML :la manipulation des données (insertion, suppression, modification, 
extraction…), 
DCL : la gestion des droits d'accès aux données (acquisition et révocation des 
droits), 
TCL : la gestion des transactions 
SQL intégré.

2
Modélisation d'une base de données
Le modèle conceptuel des données (MCD) : représentation 
graphique et structurée des informations mémorisées par un SI. 
les entités contenant les caractéristiques des données
Les associations
L'élaboration du MCD passe par 4 étapes :
La mise en place de règles de gestion
L'élaboration du dictionnaire des données,
La recherche des dépendances fonctionnelles entre ces données,
L'élaboration du MCD (création des entités puis des associations puis ajout 
des cardinalités).

La mise en place de règles de gestion
Recueil des besoins des futurs utilisateurs 
Définition et précisions des règles de gestion
3
Modélisation d'une base de données
L'élaboration du dictionnaire des données,
Document qui regroupe toutes les données  à conserver dans la base (et 
qui figureront donc dans le MCD). 
Pour chaque donnée, il indique :
Le code mnémonique : libellé désignant une donnée
La désignation : mention décrivant ce à quoi la donnée correspond
Le type de donnée :
– A ou Alphabétique de 'A' à 'Z' et de 'a' à 'z'
– N ou Numérique : entiers ou réels
– AN ou Alphanumérique : composée à la fois de caractères 
alphabétiques et numériques
– Date : format AAAA‐MM‐JJ
– Booléen : Vrai ou Faux
La taille : elle s'exprime en nombre de caractères ou de chiffres. 
4
Modélisation d'une base de données
Trame du dictionnaire :
Code
Désignation Type Taille Remarque
mnémonique

5
Transact SQL : le langage procédural

Développement de procédures et de fonctions directement 
dans la BDD
Complément des requêtes SQL permettant un traitement 
autonome
Déclaration de variables utilisateurs : obligatoire
DECLARE @nom_variable type [,...]
Valorisation des variables : 
SELECT @nom_variable = expr [,...][FROM...]
Exemple : 

6
Transact SQL : le langage procédural

Variables système :  en lecture uniquement et utilise un @@
@@CONNECTIONS  : nombre de connexions ou tentatives
@@CURSOR_ROWS : nombre de lignes affectées dans le dernier 
curseur (bouble)
@@ROWCOUNT : Nombre de lignes affectées par la dernière 
instruction.
@@ERROR : dernier numéro d’erreur généré
@@LOCK_TIMEOUT : timeout de la session en cours
@@SERVERNAME : nom du serveur SQL local.

7
Transact SQL : le langage procédural

Les transactions : 
Ensemble indivisible d’instructions  toutes les instructions 
réussissent ou aucune
Unité de travail unique concernant les instructions DML
En mode AUTO COMMIT  toute  instruction est une transaction
Exemple : commande et paiement par CB, retrait d’argent, …
Syntaxe :
Début de transaction.
BEGIN TRAN[SACTION][nomtransaction]
Validation de transaction.
COMMIT TRAN[SACTION][nomtransaction]
Déclaration d’un point de contrôle.
SAVE TRAN[SACTION]nom_du_point_de_contrôle
Annulation de transaction.
ROLLBACK TRAN[SACTION][{nomtransaction/nom point de 
contrôle}]
8
Transact SQL : le langage procédural

Une transaction : caractérisée par le mot clé ACID (Atomique 
Consistance Indépendance Durée)

Atomique : unité atomique (non divisible) de travail

Consistance : informations cohérentes par rapport aux règles de 
structuration des données 

Indépendance : données visibles sont, soit celles d’avant la 
transaction, soit celles résultantes de la transaction. 

Durée : changements apportés définitifs si validés

9
Transact SQL : le langage procédural

Gestion des verrous :
Les données en cours de traitement sont automatiquement 
verrouillées par le serveur  cohérence

Différents niveaux : lignes, pages, tables, extensions, …

Options de verrouillage : 

Syntaxe : 

SELECT.....FROM nomtable WITH (option de verrou)

Options de verrou :

– NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, PAGLOCK, TABLOCKX, 
ROWLOCK, …
10
Transact SQL : le langage procédural

Les verrous mortels :
Interférence entre 2 transactions
1 des transactions est annulée (ROLLBACK)  toutes les 
modifications sont alors perdues
Priorisation des transactions : 
SET DEADLOCK_PRIORITY  {nombreEntier|LOW|NORMAL|HIGH}
LOW correspond à la valeur ‐5.
NORMAL correspond à la valeur 0.
HIGH correspond à la valeur 5.
nombreEntier est une valeur entière comprise entre ‐10 et 10.

11
Transact SQL : le langage procédural

Gestion des lots et des scripts
Un lot d’instructions  : ensemble d’instructions Transact SQL qui sera 
compilé et exécuté en une seule unité se terminant par la commande 
GO.
Comporte des instructions ou d’autres transactions
Ne peut :
Combiner des CREATE VIEW, CREATE PROCEDURE, CREATE TRIGGER
Combiner les définitions et modification de colonne dans le même 
lot
Un script : ensemble de lots dans un fichier .sql

12
Transact SQL : le langage procédural

Contrôle de flux : 
Instructions (RETURN, RAISERROR, PRINT) et des structures de 
contrôles (séquence, alternative, répétitive)
RETURN :  sortir de la procédure ou fonction  et retourne une valeur 
entière
PRINT : afficher un message.
PRINT {’texte’|@variable|@@variablesystème}

13
Transact SQL : le langage procédural

CASE : attribuer des valeurs 
conditionnelles

BEGIN ... END
Délimite les blocs d’instructions pour les tests (IF) et les boucles 
(WHILE)

14
Transact SQL : le langage procédural

IF :   contrôle alternative d’une condition permettant  d’exécuter une 
instruction ou un bloc si le test est vrai.

15
Transact SQL : le langage procédural

WHILE : structure de contrôle répétitive qui permet d’exécuter une 
série d’instructions tant qu’une condition est vraie.
L’instruction BREAK permet la sortie de la boucle.
L’instruction CONTINUE permet de repartir à la première 
instruction de la boucle.

16
Transact SQL : le langage procédural

Les curseurs :
Traitement des lignes de résultats par ligne d’un select
Obligatoirement déclaré et ouvert pour le parcours
Fermé et détruit

17
Transact SQL : le langage procédural
Les fonctions : 
Jusqu’à 1024 paramètres d’entrée (avec valeur par défaut si besoin) et 
de sortie 
3  types de fonctions : 
Scalaires retournant une variable alphanumériques exploitant 
RETURN 
Lignes de table (row) et Tables   résultat direct d’un fonction 
SELECT

18
Transact SQL : le langage procédural

19
Transact SQL : le langage procédural

LES TRIGGERS en DML ou DDL :
Script dont l’exécution est associée à une évènement de type INSERT, 
DELETE, UPDATE sur une table ou vue unique
Syntaxe : 

20
Transact SQL : le langage procédural

21
Transact SQL : le langage procédural

22
Transact SQL : le langage procédural

23
Transact SQL : le langage procédural

24
Transact SQL : le langage procédural

Dans la base GESCOM : 
Retrouver toutes les commandes à partir d’un numéro client
A chaque commande, vérifier et mettre à jour la QTE_STOCK disponible
Extraire la liste des produits à réapprovisionner avec précision de la 
quantité à commander
Par numéro de commande, déterminer le prix ttc

25
Structure des index

SQL Server propose deux types d’index :
Les index organisés ou cluster.
Les index non organisés ou non cluster.

Les index ordonnés
Ces index qui organisent physiquement la table sont constitués d’un 
arbre dans lequel les pages de niveau feuille contiennent les données de 
la table sous‐jacente. 
Les niveaux supérieurs de l’arbre permettent d’ordonner les 
informations par rapport à la valeur indexée.
Lors de l’ajout d’une ligne d’information, cette ligne est insérée en 
fonction de la valeur de sa clé primaire.

26
Structure des index

Syntaxe :
ALTER TABLE nomTable ADD CONSTRAINT nomContrainte PRIMARY 
KEY [CLUSTERED|NONCLUSTERED] (listeColonnes); 
La seconde possibilité est de définir un index avec l’option CLUSTERED.
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX 
nomIndex ON nomTable (listeColonnes) [ON groupeDeFichiers];

27
Structure des index

Les index non ordonnés
Pas de réorganisation physique de la table
Possibilité de définir plusieurs index de ce type sur une même table.
Exemple  :  définition d’un index sur la colonne ville de la table des clients.

28
Structure des index

Les index couvrants
Index qui vont contenir au niveau feuille la clé de l’index ainsi que les 
valeurs issues d’une ou de plusieurs colonnes.
Limite le moteur SQL au parcours de l’index  et retourne les données 
nécessaires
Syntaxe :
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX 
nomIndex ON nomTable (listeColonnes) INCLUDE 
(listeColonnes) [ON groupeDeFichiers];
Exemple :

29
Partitionnement des tables et des index

L’objectif du partitionnement est d’offrir une meilleure montée 
en charge sur les tables très volumineuses en termes de 
données et accédées par de nombreux utilisateurs.
diviser une table de grande dimension en plusieurs tables.
répartition des données entre les différentes partitions de la table sera 
effectuée automatiquement en fonction des critères de répartition 
définis lors de la création de la table.
Syntaxe

30
Partitionnement des tables et des index
Exemple de partition
Un partitionnement est définit sur une valeur de type entière. Cette fonction 
définit quatre partitions différentes :
première partition pour les valeurs inférieures ou égale à 10 000.
deuxième partition pour les valeurs strictement supérieures à 10 000 et 
inférieures ou égale à 20 000.
troisième partition pour les valeurs strictement supérieures à 20 000 et 
inférieures ou égale à 30 000.
quatrième partition pour les valeurs strictement supérieures à 30 000.

31
OPTIMISATION DE LA BASE DE DONNEES

Audit de l’activité de SQL Server : membre ou role sysadmin
Plusieurs outils disponibles 
Les plus souples sont SQL Profiler et l’Analyseur de performances 
Windows
Attention : un audit peut avoir un effet négatif sur les performances

32
OPTIMISATION DE LA BASE DE DONNEES

1. Définir un audit au niveau serveur
création et configuration d’un objet de type SQL Server Audit. 
utilisé par la suite pour définir que la spécification de cet audit est 
de niveau serveur.
Depuis le nœud Sécurité ‐ Audit de l’explorateur d’objets. 
sélectionner l’option Nouvel audit
C’est à ce niveau que la destination de
l’audit est spécifiée ainsi que le 
comportement de l’audit sur l’instance
s’il vient à manquer de l’espace dans 
le journal.

33
OPTIMISATION DE LA BASE DE DONNEES

Nouvelle spécification d’audit de niveau serveur  Nouvelle 
spécification de l’audit du serveur depuis le menu contextuel du 
nœud Sécurité ‐ Spécifications d’audit du serveur.
La définition de la spécification 
permet la sélection des événements 
audités, ainsi que de préciser l’audit
utilisé.

34
OPTIMISATION DE LA BASE DE DONNEES

2. Définir un audit au niveau base de données
Objets SQL Server Audit sont définis au niveau du serveur
Spécifications définies au niveau de la base de données  accessible 
depuis le nœud Sécurité ‐ Spécification d’audit de base de données.

35
OPTIMISATION DE LA BASE DE DONNEES

3. Afficher le journal d’audit
accessibles depuis le nœud Sécurité ‐ Audit de l’explorateur d’objets
sélectionner l’audit dont on souhaite visualiser le journal puis de 
sélectionner l’option Afficher les journaux d’audit depuis le menu 
contextuel associé.

36
OPTIMISATION DE LA BASE DE DONNEES

Analyseur de performances (moniteur système)
Analyseur de performances de Windows auquel de nombreux compteurs 
ont été ajoutés lors de l’installation de SQL Server.
Possible de définir dix compteurs utilisateur afin de pouvoir adapter 
l’utilisation de l’Analyseur de performances à la demande.

37
OPTIMISATION DE LA BASE DE DONNEES
Les principaux objets spécifiques à SQL Server sont :
Agent de réplication : surveiller les agents de réplication en cours 
d’exécution.
Base de données : surveiller l’utilisation de la base de données, 
comme la quantité d’espace journal disponible ou le nombre de 
transactions actives.
Capture instantanée : surveiller la capture instantanée des 
réplications.
Distribution de réplication : surveiller le nombre de commandes et de 
transactions lues à partir de la base de données distribution.
Fusion de réplication : surveiller l’exécution de chaque fusion qui 
déplace les modifications de données, soit de l’abonné vers l’éditeur, 
soit l’inverse.
Gestionnaire de cache : permet de surveiller la façon dont SQL Server 
utilise la mémoire pour stocker des objets (procédures stockées...).
38
OPTIMISATION DE LA BASE DE DONNEES
Gestionnaire de tampon : permet de surveiller la façon dont SQL 
Server utilise la mémoire pour stocker des pages de données.
Gestionnaire mémoire : surveiller l’utilisation globale de la mémoire.
Lecteur du journal des transactions : surveiller l’agent de lecture du 
journal des transactions. 
Méthodes d’accès : surveiller l’accès aux pages logiques.
Réservé à l’utilisateur : la définition des compteurs (10 au maximum) 
est à la charge de l’utilisateur.
Statistiques générales : surveiller l’activité générale du serveur.
Statistiques SQL : surveiller la compilation et le type de requêtes 
transmises à SQL Server.
Unité de sauvegarde : surveiller les unités de sauvegarde utilisées 
dans les opérations de sauvegarde et de restauration.
Verrous : un nombre minimal de verrous favorise la concurrence 
d’accès, ce qui améliore les performances.
39
OPTIMISATION DE LA BASE DE DONNEES
Des procédures stockées réservées sp_user_counter1 à sp_user_counter10 
permettent d’interpréter les requêtes simples. 
Il est possible de demander l’exécution de ces procédures n’importe où 
(déclencheur, autres procédures...).
Les compteurs personnalisés sont disponibles dans l’objet User Settable de 
l’Analyseur de performances.
Pour modifier la valeur du premier compteur de performances, il faut 
exécuter la procédure sp_user_counter1 qui accepte en paramètre un et 
un seul entier.
Exemple :  surveiller le nombre de lignes dans la table des clients à 
mettre dans un trigger

40
OPTIMISATION DE LA BASE DE DONNEES
Optimisation de la mémoire et de l’unité centrale
Par défaut, SQL Server gère automatiquement et dynamiquement la 
quantité de mémoire qui lui est nécessaire. 
 possible de figer les quantités de mémoire minimum, maximum et la 
taille du jeu de travail.
L’Analyseur de performances va permettre de surveiller l’utilisation de la 
mémoire afin de s’assurer que la consommation reste dans des limites 
raisonnables et qu’aucun processus, y compris SQL Server, ne manque 
de mémoire. Ces critères correspondent aux compteurs Page/s et Octets 
disponibles de l’objet Mémoire.
Le compteur Page/s indique le nombre de pages mémoire qui sont 
extraites ou bien écrites sur le disque pour des raisons de défaut de 
pagination. Une valeur élevée peut indiquer un manque de mémoire 
vive.
Le compteur Mémoire : Défaut de pages/s permet de s’assurer que 
l’activité du disque n’est pas liée au processus de pagination mémoire.
41
OPTIMISATION DE LA BASE DE DONNEES

Pour connaître la quantité de mémoire utilisée par SQL Server, il faut 
surveiller les compteurs suivants dans l’Analyseur de performances :
Processus\Plage de travail.
SQL Server : Gestionnaire de tampons\Taux d’accès au cache des 
tampons. Indique un pourcentage représentant le nombre de fois où 
les pages de données demandées sont trouvées dans le cache.
SQL Server : Gestionnaire de tampons\nombre total de pages. 
Nombre total de pages pour SQL Server.
SQL Server : Gestionnaire de tampons\pages libres. Nombre total de 
pages SQL Server non utilisées.
SQL Server : Gestionnaire de mémoire\mémoire totale du serveur 
(Ko). Cette valeur doit être en correspondance avec le volume de 
mémoire attribué à SQL Server.

42
OPTIMISATION DE LA BASE DE DONNEES
Pour les compteurs Taux d’accès au cache des tampons de l’objet 
Gestionnaire des tampons ainsi que Mémoire totale du serveur de l’objet 
Gestionnaire de mémoire, les valeurs significatives sont :
Taux de présence dans le cache : 90 % est un taux normal en cours 
d’utilisation, qui assure peu de lecture physique des données.
Mémoire totale du serveur : si la mémoire utilisée par SQL Server 
représente une partie importante de la mémoire du poste, il se peut 
que le poste manque de mémoire.

43
OPTIMISATION DE LA BASE DE DONNEES

Limitation des ressources utilisées par une requête
Le coût d’une requête correspond à la durée estimée (en secondes) pour 
l’exécution. 
L’option query governor cost limit permet de spécifier une limite 
supérieure pour l’exécution d’une requête.
Par défaut  0  exécution de toutes les requêtes. 
>0   exécution des réquetes dont le cout est inférieur à cette valeur
positionnable sur le serveur par l’intermédiaire de sp_configure ou bien 
sur chaque base de données avec SET QUERY_GOVERNOR_ COST_LIMIT.

44
OPTIMISATION DE LA BASE DE DONNEES

Depuis SSMS  propriétés du serveur, sur la 
page Connexions en activant la case à cocher Utiliser 
l’Administrateur de requêtes pour empêcher les requêtes 
longues et en précisant le coût maximum autorisé dans la zone 
de saisie associée.

45
OPTIMISATION DE LA BASE DE DONNEES
Le plan d’exécution d’une requête
Les requêtes, procédures et déclencheurs sont analysés par SQL Server et 
l’optimiseur de requête va stocker le plan d’exécution dans la mémoire de SQL 
Server. 
Plus exactement dans la zone mémoire intitulée mémoire cache du plan. 
Il est possible d’analyser cette version compilée de la requête pour mieux 
comprendre les choix faits par l’optimiseur de requête et réagir pour permettre une 
exécution plus rapide de la requête. 
Ce qui peut se traduire par une nouvelle écriture de la requête, l’ajout d’index, la 
mise à jour des statistiques...
Il n’est pas possible d’afficher le plan d’exécution d’un déclencheur ou d’une 
procédure stockée.

46
OPTIMISATION DE LA BASE DE DONNEES
La lecture se fait de gauche à droite.
Le coût de chaque requête est 
exprimé sous forme de pourcentage
par rapport au coût total du lot 
analysé.
L’icône présente sur chaque nœud 
symbolise l’opérateur physique 
et/ou logique utilisé.
Un plan d’exécution est affiché pour chaque requête du lot Transact SQL 
analysé.

47
OPTIMISATION DE LA BASE DE DONNEES
Pour optimiser de telles requêtes, il est nécessaire d’explorer les voies 
suivantes :
Ajouter de la mémoire de façon à être sûr que toutes les données se 
trouvent en mémoire lors de l’exécution de la requête. L’objectif 
recherché est d’avoir le maximum de lecture logique avec très peu de 
lecture physique.
Si le serveur dispose de plusieurs processeurs, le système doit 
autoriser SQL Server à les utiliser afin d’obtenir une parallélisation de 
la requête.
Écrire la requête sous une nouvelle forme en limitant au maximum 
l’utilisation d’éléments qui rendent l’exécution plus complexe comme 
les curseurs, l’exécution d’une requête paramétrée dans une boucle, 
l’utilisation de plusieurs alias pour une même colonne, l’utilisation de 
fonctions qui ne sont pas absolument nécessaires.
Modifier la valeur de l’option de configuration query governor de 
façon à limiter le temps d’exécution accordé à chaque requête.
48
OPTIMISATION DE LA BASE DE DONNEES

Générateur de profils
Outil qui permet de capturer les instructions soumises au serveur
Enregistrées dans un fichier appelé fichier de trace
SQL Server Profiler permet également d’analyser une trace capturée.
La capture du flux de travail soumis à SQL Server peut être mise en place 
pour plusieurs raisons :
Analyser la charge de travail du serveur.
Valider la structure physique de la base par rapport à la charge de 
travail.
Identifier les requêtes longues 
et/ou bloquantes.
Servir de base à un audit de sécurité.

49
OPTIMISATION DE LA BASE DE DONNEES
Pour définir précisément les options de capture, SQL Server Profiler 
utilise ses propres termes :
Événement  = action produite sur l’instance SQL Server (INSERT, 
UPDATE, DELETE par exemple)
Classe d’événements = regroupement logique d’événements. Par 
exemple, la classe Audit : Login regroupe tous les événements 
relatifs à l’ouverture de session sur l’instance SQL Server.
Catégorie d’événements = organisation logique des classes 
d’événements
Colonne de données = représente un attribut de la classe 
d’événements présent dans la trace.
Modèle = correspond à la configuration par défaut d’une capture. 
Trace = représente l’ensemble des informations capturées. 
Filtre = filtrer les informations liées à l’événement qui seront 
gardées, afin d’éviter que le fichier de trace ne grossisse trop vite.
50
OPTIMISATION DE LA BASE DE DONNEES
1. Capturer l’activité courante du serveur
Les différents modèles de trace sont :
Standard : il s’agit du modèle par défaut.
Sp_counts : trace le comportement des procédures stockées.
TSQL : pour suivre les instructions Transact SQL envoyées au serveur.
TSQL_Duration : enregistre en plus le temps d’exécution de chaque instruction.
TSQL_Grouped : permet de suivre les instructions Transact SQL et de les 
regrouper par demandeur.
TSQL_Replay : capture des informations détaillées sur les instructions Transact
SQL.
TSQL_SPs : capture les informations détaillées sur les procédures stockées 
exécutées.
Tuning : capture les éléments en vue d’une analyse ultérieure par l’Assistant de 
paramétrage de base de données.

51
OPTIMISATION DE LA BASE DE DONNEES

Fichier ‐ Nouvelle trace.

52
OPTIMISATION DE LA BASE DE DONNEES

53
OPTIMISATION DE LA BASE DE DONNEES

54
OPTIMISATION DE LA BASE DE DONNEES

Définition d’une trace en Transact SQL

55
OPTIMISATION DE LA BASE DE DONNEES

56
OPTIMISATION DE LA BASE DE DONNEES

57
OPTIMISATION DE LA BASE DE DONNEES

58

Vous aimerez peut-être aussi