ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 17/04/17 page 1 SOMMAIRE 1PRESENTATION DE LA SEQUENCE 2 1.1DESCRIPTION DES SAVOIRS 1.2COMPETENCES ATTENDUES 2 2 2MODE DE STOCKAGE DES DONNEES 2 2.1FICHIER DE DONNEES 2.2EXTENSION 2.3 PAGE 2 3 3 3LE JOURNAL DES TRANSACTIONS 4 3.1RAPPEL SUR LES TRANSACTIONS 3.2LE JOURNAL DES TRANSACTIONS 3.3FONCTIONNEMENT DU JOURNAL DES TRANSACTIONS 4 4 4 4CREATION D’UNE BASE DE DONNEES 5 4.1COMMANDE SQL DE CREATION 4.2EXTENSION OU REDUCTION D’UNE BASE 4.3LES OPTIONS D’UNE BASE DE DONNEES 4.4GESTION D’UNE BASE DE DONNEES SUR PLUSIEURS DISQUES 5 5 6 7 5DEFINITION DE LA TAILLE D’UNE BASE DE DONNEES 8 5.1ESTIMATION DE LA TAILLE D’UNE TABLE 5.1.1Remarques préliminaires 5.1.2Etape 1 : Calcul de la taille d’une ligne de données 5.1.3Etape 2 : Calcul du nombre de pages de données 5.1.4Etape 3 : Calcul de la taille des lignes d'un index ordonné 5.1.5Etape 4 : Calcul du nombre de pages d'un index ordonné 5.1.6Etape 5 : Calcul du nombre total de pages 5.2CALCUL DE LA TAILLE D'UNE TABLE DE 9 MILLIONS DE LIGNES DOTEE D'UN INDEX ORDONNE ALSI / S25 SGBD R Support de Cours 2TSIG D:\840909851.doc 8 8 8 8 9 9 9 9 1 ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 17/04/17 page 2 PRESENTATION DE LA SEQUENCE 1.1 Description des savoirs Il s’agit dans ce chapitre de comprendre comment une base de données est structurée pour répondre à la nécessité de fiabilité. On voit aussi comment estimer l’espace disque nécessaire à une BD. 256 Administration de la base de données 1.2 Compétences attendues administrer une BdD non répartie et en assurer la sécurité 2 MODE DE STOCKAGE DES DONNEES La première étape à réaliser lors de la mise en place d’une base de données consiste à réserver un espace disque destiné au stockage de toutes les données de la base. Avec SQL Server, il est nécessaire de pré-allouer l’espace de stockage c’est à dire qu’il faut calculer et réserver un espace disque suffisant pour y stocker la base. SQL Server utilise l’architecture suivante : 2.1 Fichier de Données C’est l’entité de base créée par le système d’exploitation (instruction Disk Init).Un fichier physique est alors créé, il possède un nom logique d’unité, un nom physique (de fichier), une taille et un numéro. Un fichier de données peut contenir : une ou plusieurs bases de données, un ou plusieurs journaux de transactions. ALSI / S25 SGBD R Support de Cours 2TSIG D:\840909851.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 17/04/17 page 3 A l’installation, SQL Server génère trois fichiers de données: MASTER.DAT, MSDBDATA.DAT, MSDBLOG.DAT 2.2 Extension Une extension prend 64 Ko. Chaque table ou index est affecté d’une extension lors de sa création : l’extension initiale. A mesure que la table augmente de volume, le système lui attribue de nouvelles extensions : les extensions supplémentaires. C’est l’unité de stockage minimum d’une table ou d’un index. Il ne peut y avoir qu’une table ou un index par extension. 2.3 Page Chaque extension contient 8 pages de données, c’est dans cet espace que sont stockées les lignes des tables et index. Une ligne ne peut pas s’étendre sur plusieurs pages. La taille d’une page est de 8 Ko octets (dont 8192 octets utilisables), cependant la longueur maxi d’un enregistrement (hors champs text et image) est 8060 octets. Il est important de bien calculer la longueur des enregistrements lors de la conception. Exemple : si un enregistrement occupe 5 Ko, cette longueur ne permet pas de stocker 2 enregistrements par page (2*5 Ko = 10 Ko), de ce fait chaque enregistrement occupera une page, ce qui représente un gaspillage de près de 50% de l’espace. La procédure sp_estspace permet de calculer la taille d’une table en fonction de sa structure et du nombre d’enregistrements estimés. ALSI / S25 SGBD R Support de Cours 2TSIG D:\840909851.doc 3 ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 17/04/17 page 4 LE JOURNAL DES TRANSACTIONS 3.1 Rappel sur les transactions Une transaction est un ensemble d’instructions SQL, traitées comme une unité unique de travail et de récupération. L’unité doit être exécutée en totalité ou pas du tout. Il existe deux sortes de transactions : Une transaction implicite dans laquelle chaque instruction UPDATE, INSERT ou DELETE s ‘exécute comme une transaction. Une transaction explicite définie par l’utilisateur qui regroupe les instructions encadrées par BEGIN TRANSACTION et COMMIT TRANSACTION. 3.2 Le journal des transactions Chaque transaction est enregistrée dans un journal des transactions pour maintenir la cohérence de la BD et permettre sa récupération en cas de défaillance du système. Le journal est une zone de stockage qui opère un suivi de toutes les modifications apportées à une base de données. Les modifications sont enregistrées dans le journal avant d’être écrites dans la BD. 3.3 Fonctionnement du journal des transactions ALSI / S25 SGBD R Support de Cours 2TSIG D:\840909851.doc 4 ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 17/04/17 page 5 CREATION D’UNE BASE DE DONNEES 4.1 Commande SQL de création Pour créer une base de données, vous devez définir les éléments suivants : nom de la base de données taille de la base de données fichiers utilisés pour la stocker CREATE CREATE DATABASE DATABASE biblio biblio ON ON PRIMARY ( NAME=données_biblio, PRIMARY ( NAME=données_biblio, FILENAME='c:\mssql7\data\biblio.mdf', FILENAME='c:\mssql7\data\biblio.mdf', SIZE=10MB, SIZE=10MB, MAXSIZE=15MB, MAXSIZE=15MB, FILEGROWTH=20%) FILEGROWTH=20%) LOG LOG ON ON (( NAME=journ_biblio, NAME=journ_biblio, FILENAME='c:\mssql7\data\biblio.ldf', FILENAME='c:\mssql7\data\biblio.ldf', SIZE=3MB, SIZE=3MB, MAXSIZE=5MB, MAXSIZE=5MB, FILEGROWTH=1MB) FILEGROWTH=1MB) 4.2 Extension ou réduction d’une Base La taille de la base peut être réduite ou étendue par la suite au fur et à mesure des besoins. On utilise alors - l’interface graphique - l’instruction DBCC - l’instruction ALTER DATABASE MaBase MODIFY FILE … Une autre façon d’étendre une base de données est d’ajouter des fichiers de données ou de journal par - l’interface graphique - l’instruction ALTER DATABASE MaBase ADD FILE … ALSI / S25 SGBD R Support de Cours 2TSIG D:\840909851.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 17/04/17 page 6 4.3 Les options d’une base de données Select into / bulkcopy : Cette option activée permet de ne pas écrire dans le journal de transaction, certaines opérations comme bcp ou SELECT INTO. Par défaut elle est désactivée. Colonnes NULL par défaut : Avec cette option, les colonnes ne spécifiant pas NULL ou NOT NULL (lors des opérations CREATE ou ALTER) acceptent la valeur NULL. Aucune synchronisation lors de la récupération : Si cette option est activée aucun enregistrement de synchronisation (entre des serveurs secondaires et le serveur primaire) n’est ajouté. L’option doit être activée pour permettre la restauration des journaux de transactions en provenance du serveur primaire. Lecture seule : Permet de déclarer la base en lecture seule, donc pas d’écriture possible. Utilisateur unique : Avec cette option, un seul utilisateur (n’importe lequel) peut avoir accès à la base, cette option est à distiguer de « Réservé au DBO » Réservé au DBO Le DBO est le propriétaire de la base, avec cette option, seul le DBO peut accéder à la base. Tronquer le journal lors de la synchronisation : Lorsque cette option est activée, le journal des transactions est validé au moment des points de synchronisation (chaque minute) est vidé. Cela représente un risque de ne pouvoir reconstruire les données perdues. ALSI / S25 SGBD R Support de Cours 2TSIG D:\840909851.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 17/04/17 page 7 4.4 Gestion d’une base de données sur plusieurs disques ALSI / S25 SGBD R Support de Cours 2TSIG D:\840909851.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 5 Le 17/04/17 page 8 DEFINITION DE LA TAILLE D’UNE BASE DE DONNEES Facteurs à prendre en compte lors de l'évaluation de la taille d'une base de données Fichier Fichierjournal journal Fichier Fichierde de données données Activité Fréquence Tables Tables Utilisateur et système Nombre de lignes Index Index Valeur de clé Nombre de lignes Facteur de remplissage Taille des transactions Sauvegarde 5.1 Estimation de la taille d’une table 5.1.1 Remarques préliminaires Les calculs diffèrent un peu selon que les champs sont de longueurs fixes (longueur fixe et défini avec l’option NOT NULL) ou de longueur variable (longueur variable ou longueur fixe et défini avec l'option NULL). Dans le second cas, il faut faire les calculs avec la longueur moyenne du champ et la formule de calcul tient compte du nombre de champs de longueur variable dans une ligne. On simplifie ici, en prenant la taille maxi de chaque colonne et en estimant des champs de longueur fixe. On prend le cas particulier d’un index ordonné : les feuilles d’un index ordonné sont les pages de données elles-même. Dans le cas d’un index non ordonné, il y a un niveau d’indexation supplémentaire et le nombre d’octets réservé pour les servitudes logicielles diffère un peu. 5.1.2 Etape 1 : Calcul de la taille d’une ligne de données 2 + (Somme des octets de toutes les colonnes) = Taille d’une ligne de données La valeur 2 correspond aux servitudes logicielles que SQL Server mobilise pour le stockage interne. 5.1.3 Etape 2 : Calcul du nombre de pages de données Pour calculer le nombre de pages de données: 8060 / (Taille de la ligne de données) = Nombre de lignes de données par page (Nombre de lignes) / (Nombre de lignes de données par page) = Nombre de pages de données requises. ALSI / S25 SGBD R Support de Cours 2TSIG D:\840909851.doc ALSI S25 SQL Avancé et administration d’un SGBD Relationnel STS2 IG Application à SQL Server 6.5 Le 17/04/17 page 9 5.1.4 Etape 3 : Calcul de la taille des lignes d'un index ordonné 5 + (Somme des octets des clés d'index )) = Taille d’une ligne d’index ordonné La valeur 5 correspond aux servitudes logicielles que SQL Server mobilise pour le stockage interne. 5.1.5 Etape 4 : Calcul du nombre de pages d'un index ordonné Après avoir calculé la taille d'une ligne de l'index ordonné, vous pouvez calculer le nombre de pages requises par celui-ci. (8060 / Taille d'une ligne de l'index ordonné) 2 = Nombre de lignes d'index ordonné par page (Nombre de pages de données) / (Nombre de lignes d'index ordonné par page) = Nombre de pages d'index au niveau 0 Si le résultat obtenu est supérieur à 1, répétez les étapes de division en utilisant chaque fois le quotient obtenu précédemment comme nouveau dividende, jusqu'à ce que vous obteniez un résultat égal à 1. Dès que vous aurez obtenu un quotient égal à 1, vous aurez atteint le niveau racine de l'index. (Nombre de pages d'index au dernier niveau) / (Nombre de lignes d'index ordonné par page) = Nombre de pages d'index au niveau suivant 5.1.6 Etape 5 : Calcul du nombre total de pages Pour calculer le nombre total de pages de données: (Nombre de pages de données) + (Nombre de pages d'index au niveau 0) + (Nombre de pages d'index au niveau suivant) + (Nombre de pages d'index au niveau suivant) [...] = Nombre total de pages de données 5.2 Calcul de la taille d'une table de 9 millions de lignes dotée d'un index ordonné L'exemple suivant illustre comment calculer la taille (en nombre de pages de 8 Ko) des données et de l'index ordonné d'une table présentant les caractéristiques suivantes: 9 millions de lignes Somme des octets des colonnes = 158 Clé d'index ordonné de longueur fixe = 4 octets Procédez comme suit: DONNEES 1. Calculez la taille d'une ligne de données: 2 (Servitudes logicielles) + 158 Somme des octets de toutes les colonnes 160 Taille d'une ligne de données INDEX 3.Calculez la taille des lignes de l'index ordonné: 5 Servitudes logicielles +4 Somme des octets des clés d'index 9 Taille des lignes de l'index ordonné 4.Calculez le nombre de pages de l'index ordonné: 2. Calculez le nombre de pages de données: 8060 / 160 = 50 lignes de données par page 9 000 000 / 50 = 180 000 pages de données 5. Calculez le nombre total de pages: Totaux: Niveau 1 Niveau 0 Données Nombre total de pages de 8 Ko ALSI / S25 SGBD R Support de Cours 2TSIG (8060 / 9) - 2 = 895 lignes d'index ordonné par page 180 000 / 895 = 201 pages d'index (Niveau 0) 1 / 895 = 1 pages d'index (Niveau 1) Pages 1 201 180 000 180 202 D:\840909851.doc