2 Analyse et Optimisation des Performances du moteur SQL Serveur 10 février 2011 Frédéric Pichaut EMEA SR ESCALATION ENGINEER Microsoft France
3 Agenda Quelques Bases Les indexes Structures Utilisation Gestion Les outils Avec le produit Exterieurs (SQLDiag, PSSDiag, SQL Nexus)
4 Quelques Bases Loptimiseur Son rôle est de déterminer le chemin daccès au données Il est basé sur la notion de coût (Cost-Based Optimizer) Génération de plans dexécutions Les indexes sont propres à chaque optimiseur Structure sur disque associée à une table qui accélère l'extraction des lignes Cluster Trie et stocke les lignes de données de la table en fonction de la clé. Non-cluster Peuvent être définis sur une table dotée d'un indexe cluster ou non Chaque ligne contient la clé cluster ou un localisateur de ligne (RID) Possibilité dindexes sur des colonnes calculées par des fonctions CHECKSUM, fonction utilisable pour des « hash indexes ». Possibilité dindexes sur des colonnes incluses Possibilité dindexes filtrés: CREATE NONCLUSTERED INDEX FIProdAcc ON Produit (Nom, Prix) WHERE CatID >= 27 AND CatID <= 36; DENALI – Indexes de type Column Store Index (CSI)
5 Column Store Index (CSI) Accélération Typiquement pour des requêtes de type Data Warehouse Objectifs: de 100x à 1000x plus rapide Fonctionnement en parallèle Limitations Pas dUpdates directe Rebuild Index Partition Switching Pas de Large Data Types Les types autres que String plus grand que 8 bytes Numériques avec une précision au-delà 18 digits Datetimeoffset au-delà 8 bytes Unique Identifier BLOBs XML Verti-Pac Compression Apollo
6 Les Statistiques Utilisées par l'optimiseur pour évaluer la sélectivité des expressions, et donc la taille des résultats intermédiaires et finaux Sur chaque indexes, elles peuvent être: Crées automatiquement ou manuellement Mises à jour automatiquement ou manuellement Mises à jour en synchrone ou en asynchrone Basées sur un échantillonnage de valeurs ou toutes les valeurs Elles peuvent être filtrées: CREATE STATISTICS FSPoids ON Produit (Poids) WHERE CatID IN (1,2,3);
7 Démo Statistiques Auto-update Filtrée Column Store Index
8 Reconstruction dindexe Reconstruire un indexe le supprime et crée un nouveau (online ou offline). ALTER INDEX … REBUILD; CREATE INDEX … DROP_EXISTING; Désactiver Nc Indexes pour économiser lespace FOREIGN KEY référençant lindexes seront désactivées ALTER INDEX REBUILDCREATE INDEX WITH DROP_EXISTING Ajour ou suppression de colonnes changement de lordre ou du tri NonOui Options de lindexe a positionnerOui Plus dun indexe à reconstruire en une transactionOuiNon un indexe partitionné peut être repartitionnéNonOui un indexe peut être déplacé sur un autre fichierNonOui Demande de lespace temporaire supplémentaireOui Reconstruire un indexe cluster reconstruit les indexes non cluster Non (sauf si ALL) Single index partition à reconstruireOuiNon
9 Réorganisation dindexe ALTER INDEX … REORGANIZE Toujours « Online » Réorganise les feuilles de lindexe en ordonnant les pages (de gauche a droite) Les pages sont réorganisées en utilisant les pages existantes (pas dallocation) Le réorganisation est faite par fichier Compacte les pages Utilise un minimum de ressource Les Blobs sont compactés par défaut quand un indexe Cluster est réorganisé
10 Quelles actions prendre Utiliser la fonction : sys.dm_db_index_physical_stats() Regarder la valeur: avg_fragmentation_in_percent SELECT a.index_id, name, avg_fragmentation_in_percent FROM sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID(N'Production.Product'), NULL, NULL, NULL) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id; Ne pas sattacher aux petits indexes (mixed extents). avg_fragmentation_in_percentAction > 5% et < = 30%ALTER INDEX REORGANIZE > 30%ALTER INDEX REBUILD WITH (ONLINE = ON)
11 Méthodologie Lanalyse de performance est un perpétuel recommencement Quand on pense en avoir fini, un changement survient CaptureAnalyseReglages Charge du système
12 Quelques outils Server LevelComponent Level dm_exec_* Execution of user code and associated connections dm_os_* Memory, locking & scheduling dm_tran_* Transactions & isolation dm_io_* I/O on network and disks dm_db_* Databases and database objects dm_repl_* Replication dm_broker_* SQL Service Broker dm_fts_* Full Text Search dm_qn_* Query Notifications dm_clr_* Common Language Runtime Dynamic Management Views (DMVs) Plus de 70 Toujours disponible Des rapports prédéfini Performance Dashboard (web 2008) Performance Data Colector (2008) SQL Profiler (SQL Trace) Capture des plans XML, visualisation Capture des deadlock, visualisation Export des events capturés + devent (OLEDB, Full Text, CLR, Broker, Query Notification, Security Audit,…) + de colonnes capturées Combiné avec Perfmon Database Tuning Advisor (DTA) Successeur de lIndex Tuning Wizard Plus robuste, moins de restrictions Possibilité de Capacity Planing Perfmon Plus de compteurs
13 Outils à venir: XEProfiler SQL Trace Va disparaitre Events Ported – Engine Only Intégré à Management Studio (SSMS) Create, Alter, Stop, Start Sessions Possibilité de voir les données sous forme de grille Fonctions avancées Searching Aggregation (Sum, Min, Max, …) Sorting Grouping Custom Columns (Ex: connect_options, sql_text = text) Save and Apply Your Favorite Display View Export dans Excel
14 SQLDiag Collecte basique Utile pour comparer les performances avant et après des changements (logiciels, code, indexes, hardware,… Livré avec SQL Server /X pour uniquement un snapshot: evt/err logs, configurations Sinon, collecte snapshot + PerfMon + Profiler Peut être utilisé comme un service ou unitairement Controlé par fichiers XML
15 PSSDiag Sappuie sur SQLDiag + Diagnostiques particuliers Exemples: DMV, clone db, msdb backup Contrôlé par les mêmes fichiers XML que SQLDiag, les Diagnostiques particuliers sont ajoutés comme: <CustomTask enabled="true" groupname="MsInfo" taskname="Get MSINFO32" type="Utility" point="Startup" wait="OnlyOnShutdown" cmd="start /B /WAIT MSInfo32.exe /computer %server% /report "%output_path%server%_MSINFO32.TXT" /categories
16 Démo SQL Diag & PSSDiag
17 SQLDiag Demo Open dos-prompt with run as administrator Run with /X for snapshot Review SD_Detailed.XML Example location: C:\Program Files\Microsoft SQL Server\100\Tools\Binn
18 PSSDiag Best Practices I/O Une capture à la fois. Eviter GUI, SQLDiag est non graphique (SQLTrace). Utiliser un ficher de sortie local avec un bon cache décriture, Pas de share sur le réseau. KB307786KB Ne pas utiliser un path UNC, même sil pointe en local. Utiliser le disque disponible le plus rapide pas utilisé par SQL (ou autre). Eviter RAID-5. Tester sur un environnement autre que production ou pas pendant heures de production.
19 Best Practices – Capture Eviter les évènements trop fréquents comme : Object:Opened, Lock:Acquired/Released, etc... Par défaut Batch-level, pas Statement-level. Show Plan Statistics consomme beaucoup de CPU, généralement capturer Showplan Statistics Profile et/ou Showplan XML Statistics Profile. Showplan All est utile dans le cas de requête ne se finissant pas. Les filtres réduisent la taille des fichiers et les I/O mais augmentent la consommation CPU. Filtrer sur des colonnes de type Integer (dbid, duration, etc) plutôt que sur des textes (database name, textdata, etc) et uniquement si les filtres enlèvent >10% des évènements.
20 Best Practices – Capture 2 Evènements qui impactent la taille de la trace: SQL:StmtCompleted and SP:StmtCompleted Degree of Parallelism Lock:Timeout Show Plan Statistics SQL:BatchStarting RPC:Starting
21 SQL Nexus Download depuis Codeplex.comCodeplex.com Importer les traces SQLDiag + PerfStats Analyser vos donnée Construire ses propre rapport
22 Démo SQL Diag suite et analyse
23 PerfMon – Principaux compteurs Logical disk Avg disk sec/read < 10-20ms, sec/write < 3-5ms Disk reads/sec, Disk writes/sec Memory - Available MBytes MSSQL Buffer Manager - Page Life Expectancy MSSQL Databases - Active Transactions, Backup/Restore Throughput/sec, Repl. Pending Xacts, Repl. Trans. Rate, Transactions/sec MSSQL Memory Manager - Total Server Memory, Target Server Memory MSSQL Plan Cache - Cache Hit Ratio (all instances) MSSQL Wait Statistics - (all) Process - % Processor Time (all instances) Processor - % Processor Time (all instances)
24 Resources Reorganizing and Rebuilding Indexes Compilation par lots, recompilation et mise en cache des plans dans SQL Server 2005 Statistiques utilisées par l'optimiseur de requête dans Microsoft SQL Server 2005 Rechercher des problèmes de délai d'E/S dans le sous-système d'E/S disque Optimisation des performances de la base de données tempdb Et lultime recours
25 MSDN et TechNet : lessentiel des ressources techniques à portée de clic Portail administration et infrastructure pour informaticiens Portail de ressources technique pour développeurs