SQL Server 2005 Tuning / Optimisation 3/30/2017 8:39 AM SQL Server 2005 Tuning / Optimisation Fred Pichaut (Microsoft France) EMEA Escalation Engineer fredep@microsoft.com Sham UNMAR (Waisso) Directeur Technique sham.unmar@waisso.com © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Agenda Le support (CSS) Waisso - SQL Server sur le terrain Quelques bases Méthodologie Performance des requêtes Concurrence d’accès Problématiques autour de Tempdb Quelques outils Ressources Débats et échanges
3/30/2017 8:39 AM Le support Microsoft Client Ingénieur Support (spécialiste) Responsable Technique de Compte (TAM) Manager Support Manager Situation Critique Ingénieur d’Escalade (CPR) Développement de correctifs (QFE) Support Groupe de développement CPR (Critical Problem Résolution) : Équipe mondiale d'ingénieurs dont le but est de trouver des solutions aux problèmes critiques. En étroite collaboration avec les équipes de développement. En Europe : Environ 80 ingénieurs En France : 13 ingénieurs 7 ingénieurs d’escalade 1 ingénieur en astreinte tous les jours 24x7 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
WAISSO : Notre expertise autour de SQL Server Nos missions couvrent : L’administration courante des bases de données Délégation de personnel à temps partiel ou à temps plein Le soutien aux développements Conception et/ou validation de modèles Aide à l’écriture et validation du code applicatif T-SQL Les audits et l’expertise Optimisation et Tuning Validation avant Mise En Production Capacity Planning Opérations ponctuelles « pompiers » SQL Server sur le terrain
Pour déposer votre candidature : recrut@waisso.com Quelques références … Stand PLA02 WAISSO 26 rue Pagès 92150 SURESNES Tel: +33(0)1 71 11 30 10 Fax: +33(0)1 45 06 76 55 Mail : info@waisso.com Site : www.waisso.com Pour déposer votre candidature : recrut@waisso.com SQL Server sur le terrain
Problématiques fréquemment rencontrées Administration : Surveillance de la fragmentation, ré-indexation Modèle de recouvrement, sauvegardes, antivirus Architecture : Répartition des données sur les disques Mémoire Code applicatif, index : Amélioration du code Etude des index Dénormalisation SQL Server sur le terrain
Bonnes pratiques Administrer sa base SQL Server comme on le ferait pour tout autre SGBDR Penser à faire intervenir un DBA, au moins à temps partiel Surveiller le système, les compteurs de performances Relever et historiser les compteurs Windows et les traces SQL, pour vérifier leurs évolutions Travailler sur la qualité du code et sur la pertinence des index Il s’agit d’un levier prépondérant pour l’amélioration des performances Ne jamais croire qu’une opération est indiscutable Toujours tester la solution sur la globalité des applications impactées (réindexation, création d’un nouvel index, Service Pack…) Il n’existe pas de solution globale systématiquement efficace, il n’y a que des cas particuliers. SQL Server sur le terrain
Merci pour votre attention… Stand PLA02 26 rue Pagès 92150 SURESNES Tel: +33(0)1 71 11 30 10 Fax: +33(0)1 45 06 76 55 Mail : info@waisso.com Site : www.waisso.com Pour déposer votre candidature : recrut@waisso.com SQL Server sur le terrain
Quelques bases (1/2) L’optimiseur Les indexes Son rôle est de déterminer le chemin le moins couteux pour accéder au données Génération de plans d’exécutions Les indexes 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 index cluster ou non Chaque ligne d'un index non-cluster contient la clé et un localisateur de ligne (clé de l’index cluster ou RID si pas d’index cluster) On peut créer des indexes sur des fonctions sur des colonnes CHECKSUM, fonction utilisable pour des « hash indexes ». Les indexes sont propres à chaque optimiseur
Quelques bases (2/2) 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 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 Il y en a sur chaque indexes
C_CustKey, C_Name, Aggregate[count(*)] Exemple de Plan SELECT C_CustKey, C_Name, N_Name, Count(*) FROM Nation INNER JOIN Customer ON N_Nationkey = C_NationKey INNER JOIN Orders ON O_CustKey = C_Custkey WHERE O_OrderPriority = ‘1-URGENT’ GROUP BY C_CustKey, C_Name, N_Name Représentation hiérarchique du plan après les différentes phases Analyse de syntaxe Algébrisations Transformations Simplifications Group By Filter Join Customer Orders Nation C_CustKey, C_Name, Aggregate[count(*)] O_CustKey = C_Custkey O_OrderPriority = 1-URGENT’ N_Nationkey = C_NationKey
Méthodologie System Monitor (system et SQL) dm_os_scheduler 3/30/2017 8:39 AM Méthodologie System Monitor (system et SQL) dm_os_scheduler dm_exec_query_stats dm_exec_query_optimizer_info SQL Trace (Recompile) Perfmon Problème de performance? CPU DMV’s: dm_db_file_space_usage dm_tran_active_snapshot_database dm_db_session_space_usage dm_db_task_space_usage PerfMon: SQL Server: Transactions object Ressources Comparer avec les mesures antérieures Espace PerfMon Avg. Disc sec/Read Avg. Disk Reads/sec DMV’s dm_os_wait_stats dm_io_pendion_io_request dm_io_virtual_file_stats dm_exec_query_stats I/O Un changement? TempDB Identifier le bottleneck DMV’s: dm_os_waiting_tasks PerfMon: Access Methods object Workfiles Created/sec Worktables Created/sec Mixed page allocations/sec General Statistics object DMV’s: dm_os_wait_stats dm_os_waiting_tasks dm_tran_locks db_index_operational_stats dm_index_usage_stats dm_exec_* SQL Trace/Profiler DDL & Allocation Problème de performance? Message d’erreur explicite Page life expectancy bas Plus d’I/O que normalement dm_os_memory_clerks dm_os_memory_cache_clock_hands dm_os_memory_cache_counters dm_os_ring_buffers Requêtes Vérifier ce qui a changé, y remédier Mémoire Recommencer le processus Essayer des solutions © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Quelques outils (1/2) Dynamic Management Views (DMVs) Plus de 70 Toujours disponible Des rapports prédéfini SQL Profiler (SQL Trace) Capture des plans XML, visualisation Capture des deadlock, visualisation Export des events capturés + d’event (OLEDB, Full Text, CLR, Broker, Query Notification, Security Audit,…) + de colonnes capturées Database Tuning Advisor (DTA) Successeur de l’Index Tuning Wizard Plus robuste, moins de restrictions Possibilité de Capacity Planing Perfmon Plus de compteurs Server Level Component 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 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Quelques outils (2/2) SQLdiag utilitaire de collecte d’informations 3/30/2017 8:39 AM Quelques outils (2/2) SQLdiag utilitaire de collecte d’informations Performance logs, event logs, Profiler traces, SQL Server blocking information, SQL Server configuration information Documentation en ligner ou article 162833 SSMS Reports (en SP2 possibilité de rapports personnalisés) ReadTrace Lit les captures SQL Trace (.trc) et produit RML(Replay Markup Language) format Fournit une analyse d’exécution des requêtes Compatible SQL Server 2000 et SQL Server 2005 OSTRESS OSTRESS utilisé par CSS pour des testes et “replay” SQLIOStress\SQLIOSim Outils de stress disque et mémoire SQLDumper, génération d’un dump à la demande http://support.microsoft.com/kb/917825 Il y a une collection de SQL Trace par default © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Performance des requêtes 3/30/2017 8:39 AM Performance des requêtes Le point de départ: sys.dm_exec_query_stats, profiler, SSMS rapports, … Trouver si des indexes manquent grâce aux DMVs Maintenant que nous l’avons identifiée… Database Tuning Advisor (DTA) Analyse du plan d’exécution (Query Plan) Aller plus loin avec SQLTrace © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Performance des requêtes 3/30/2017 8:39 AM 3/30/2017 8:39 AM Démo Performance des requêtes 16 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Comment Influencer l’Optimiseur « HINTS » Indicateurs sur les indexes à utiliser Indicateurs de jointure “…Ligne INNER MERGE JOIN Commande…” Ils forcent l’ordre des jointures Indicateurs au niveau de la requête Algorithmes de jointure, Group By et Union. Ordre des jointures Degrés de parallélisme RECOMPILE OPTIMIZE FOR USE PLAN
si l’on a accès au code des requêtes Guides de Plans Les indicateurs pour l’optimiseur sont très utiles si l’on a accès au code des requêtes Si non « Plan Guides » permettent d’associer un indicateur avec le texte d’une requête. « Plan Guides » sont stockés dans la base
Exemple de Guide de Plan Ajout d’un indicateur de requête Requête avec un mauvais plan Requête modifiée ayant un bon plan SELECT C_CustKey, C_Name, N_Name, Count(*) FROM Nation INNER JOIN Customer ON N_Nationkey = C_NationKey INNER JOIN Orders ON O_CustKey = C_Custkey WHERE O_OrderPriority = ‘1-URGENT’ GROUP BY C_CustKey, C_Name, N_Name SELECT C_CustKey, C_Name, N_Name, Count(*) FROM Nation INNER JOIN Customer ON N_Nationkey = C_NationKey INNER JOIN Orders ON O_CustKey = C_Custkey WHERE O_OrderPriority = ‘1-URGENT’ GROUP BY C_CustKey, C_Name, N_Name OPTION (MAXDOP 1) Sp_create_planguide @name = N’MonGuide1’ @stmt = N’SELECT C_CustKey, C_Name…’, /* Texte original */ @type = N’SQL’ @module_or_batch = NULL @params = NULL @hints = N’OPTION (MAXDOP 1)’
Exemple de Guide de Plan Ajout d’un indicateur d’index SET SHOWPLAN_XML ON Requête avec un mauvais plan SELECT C_CustKey, C_Name, N_Name, Count(*) FROM Nation INNER JOIN Customer ON N_Nationkey = C_NationKey INNER JOIN Orders WITH (INDEX=PK_O_ORDERKEY) ON O_CustKey = C_Custkey WHERE O_OrderPriority = ‘1-URGENT’ GROUP BY C_CustKey, C_Name, N_Name OPTION (MAXDOP 1) SELECT C_CustKey, C_Name, N_Name, Count(*) FROM Nation INNER JOIN Customer ON N_Nationkey = C_NationKey INNER JOIN Orders ON O_CustKey = C_Custkey WHERE O_OrderPriority = ‘1-URGENT’ GROUP BY C_CustKey, C_Name, N_Name <ShowPlanXLM xmlns=‘http://…' Sp_create_planguide @name = N’MonGuide1’ @stmt = N’SELECT C_CustKey, C_Name…’, /* Texte original */ @type = N’SQL’ @module_or_batch = NULL @params = NULL @hints = N’OPTION (USE PLAN ''<ShowPlanXLM xmlns=…'' SET SHOWPLAN_XML OFF
Démo Guide de Plan 3/30/2017 8:39 AM 3/30/2017 8:39 AM 21 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Concurrence d’accès Déterminer le bottleneck avec… 3/30/2017 8:39 AM Concurrence d’accès Déterminer le bottleneck avec… sys.dm_os_wait_stats sys.dm_os_waiting_tasks sys.dm_io_pending_io_requests sys.dm_io_virtual_file_stats Déterminer qui est bloquant avec… sys.dm_exec_requests sys.dm_exec_sessions Utiliser « blocked process threshold » pour être averti (sp_configure & profiler) Autres scenarios de blocage Buffer I/O latch Non BUF latch Article: http://support.microsoft.com/kb/822101 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Démo Concurrence d’accès 3/30/2017 8:39 AM 3/30/2017 8:39 AM 23 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Problématiques autour de Tempdb 3/30/2017 8:39 AM Problématiques autour de Tempdb Tempdb grossit anormalement Il y a beaucoup de chose dans Tempdb Utiliser les DMV pour déterminer qui et quoi Concurrence d’accès sur Tempdb Allocation de pages (Trace Flag 1118) Les tables systèmes Dois-je reconfigurer? Working with tempdb in SQL Server 2005 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Problématiques autour de Tempdb 3/30/2017 8:39 AM 3/30/2017 8:39 AM Démo Problématiques autour de Tempdb 25 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Resources Le Support Microsoft Livres blancs Webcasts 3/30/2017 8:39 AM Resources L'administration et la gestion SQL Server Livres blancs Compilation par lots, recompilation et mise en cache des plans dans SQL Server 2005 Microsoft SQL Server I/O Basics Chapter 2 (2005, 2000 sp4) Statistiques utilisées par l'optimiseur de requête dans Microsoft SQL Server 2005 Webcasts SQl Days Parties 7: Adminstration, Optimiseur & Partitionnement TechNet Webcast: Performance Diagnosis in SQL Server 2005 Administrer SQL Server 2005 au quotidien - Lancement Technique Lyon Déc 2005 TechNet Webcast: Troubleshooting Performance Problems in Microsoft SQL Server 2005 Et l’ultime recours Le Support Microsoft © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
La référence technique pour les IT Pros : La référence technique technet.microsoft.com 3/30/2017 8:39 AM 3/30/2017 8:39 AM La référence technique pour les développeurs : msdn.microsoft.com Abonnement TechNet Plus : Versions d’éval + 2 incidents support Visual Studio 2005 + Abonnement MSDN Premium S’informer - Un portail d’informations, des événements, une newsletter bimensuelle personnalisée Se former - Des webcasts, des articles techniques, des téléchargements, des forums pour échanger avec vos pairs Bénéficier de services - Des cursus de formations et de certifications, des offres de support technique 27 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
Votre potentiel, notre passion TM 3/30/2017 8:39 AM 3/30/2017 8:39 AM Votre potentiel, notre passion TM © 2007 Microsoft France 28 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.