Analyse et optimisation des performances du moteur SQL Serveur

4 131 vues

Publié le

Venez découvrir les méthodes, outils et best practices utilisés par les experts du Support Microsoft pour identifier et corrigier les problèmes de performances sur SQL Serveur ou tout simplement en optimiser les performances. Cette session présentée par nos spécialistes au Support SQL Serveur en France, sera pour vous une occasion unique de les rencontrer ! Avec environ 50% de contenu original pour cesTechdays, nous aborderons entre autre la gestion des index, du columns store ou encore de la compression, nous vous présenterons également les outils utilisés et la manière de les utiliser.

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
4 131
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
95
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • The following table provides the requirements to enable "locked pages" in different versions, editions and platforms of SQL Server.Enterprise EditionData Center EditionStandard EditionBusiness Intelligence EditionOther editionsSQL 2012 [32-bit & 64-bit] • Assign LPIM user right to SQL Startup account • Assign LPIM user right to SQL Startup account No support for "locked pages" SQL 2005/2008/2008R2 [32-bit] • Assign LPIM user right to SQL Startup account• Configure 'awe enabled' option to 1 • Assign LPIM user right to SQL Startup account• Configure 'awe enabled' option to 1 No support for "locked pages" SQL 2005/2008/2008R2 [64-bit] • Assign LPIM user right to SQL Startup account • Assign LPIM user right to SQL Startup account• Apply SQL Hotfix KBA 970070• Enable trace flag 845 No support for "locked pages"
  • Below is a high-level summary of all changes related to memory management in SQL Server 2012.· The new memory manager supports allocations of all sizes. There is no concept of single-page allocator and multi-page allocator. For any of these sizes, the memory manager supports the three available memory models. The three memory models available in the SQL Server are conventional, lock pages, large pages. Large page is available only in 64 bit.· The new memory manager can be tuned for specific workloads [examples: SQL Server relational engine, SQL Server reporting service, etc]. These tuning options are available for the component developers and not exposed to the external customers or DBA's.· The new memory manager supports locality [CPU and NUMA] for allocations of all sizes. The memory node is created for all NUMA nodes even if there are no CPU's used there. That memory node is set offline.· The management of virtual address space is dynamic now - especially in 32-bit instances of SQL Server.· The configuration option "max server memory" now controls all the memory allocations done by the SQL Server memory manager. This is different from what the previous versions of SQL Server accounted for. As a result, resource governor is now able to control all page allocations.· AWE feature to map more physical memory in 32-bit virtual address space is removed from SQL Server memory manager· The SQL Server Buffer is a pure client of the SQL Server memory manager.
  • Statisticques: Server sql11scenario1.sql auto updatescenario2.sql statistics filtré
  • When a nonclustered index is disabled, the index data rows are deleted, but the index definition remains in metadata. The index is enabled when it is rebuilt. When the nonclustered index is not disabled, the rebuild operation requires enough temporary disk space to store both the old and new index. However, by disabling and rebuilding a nonclustered index in separate transactions, the disk space made available by disabling the index can be reused by the subsequent rebuild or any other operation. No additional space is required except for temporary disk space for sorting, which is typically 20 percent of the index size. If the nonclustered index is on the primary key, any active, referencing FOREIGN KEY constraints will automatically be disabled. These constraints must be manually enabled after the index is rebuilt.
  • 5 minDemo:Start sessionAdd watch live data sessionPopulate demo tableExecute artificial long running queryExplain that we will have CE issue due to parameter sniffingWhile the query is still running, we see the XESelect from sys.dm_exec_query_plan using the plan handle to see the plan and find node_id
  • MontrerC:\\Program Files (x86)\\Microsoft\\Pssdiag\\DiagConfig.exe
  • MontrerC:\\Program Files (x86)\\Microsoft\\Pssdiag\\DiagConfig.exe
  • Analyse et optimisation des performances du moteur SQL Serveur

    1. 1. Analyse et optimisation desperformances du moteurSQL Serveur10 février 2011Frédéric PichautEMEA SR ESCALATION ENGINEERMicrosoft France
    2. 2. Agenda Quelques Bases Gestion de la mémoire avec SQL 2012 ColumnStore Index Les statistiques Gestion des index Méthodologie Les outils  Avec le produit (DTA, Xevent, XE Profiler, SQLDiag)  Extérieurs (SQLDiag, PSSDiag, SQL Nexus)
    3. 3. Quelques Bases L’optimiseur  Son rôle est de déterminer le chemin d’accès au données  Il est basé sur la notion de coût (Cost-Based Optimizer)  Génération de plans d’exécutions Les indexes sont propres à chaque optimiseur  Structure sur disque associée à une table qui accélère lextraction des lignes  Cluster  Trie et stocke les lignes de données de la table en fonction de la clé.  Un Cluster index peut être défini non-unique mais en interne il le sera toujours.  Non-cluster  Peuvent être définis sur une table dotée dun indexe cluster ou non  Chaque ligne contient la clé cluster index ou un localisateur de ligne (RID) s’il n’y a pas de CI  Possibilité d’indexes sur des colonnes calculées par des fonctions CHECKSUM, fonction utilisable pour des « hash indexes » ALTER TABLE Product ADD cs_Pname AS CHECKSUM(Name); CREATE INDEX Pname_index ON Product (cs_Pname)  Possibilité d’indexes avec des colonnes incluses CREATE NONCLUSTERED INDEX IncIndex ON Product (ID) INCLUDE (Prix)  Possibilité d’indexes filtrés: CREATE NONCLUSTERED INDEX FiltIndex ON Product (Name, Price) WHERE CatID >= 27 AND CatID <= 36;  SQL12 – Indexes de type “Column Store Index (CSI)”
    4. 4. Gestion de la mémoire avec SQL2012 SQL Server 2012 introduit un nouveau « page allocator » qui contrôle les demandes de « single page » et « multi page »  Le nouveau « any size page allocator » gère les demandes de 8KB et plus. Les demandes de Multi-Page et CLR sont maintenant inclus dans l’espace mémoire contrôlé par « max server memory (MB) » max server memory  Détermine la mémoire physique max (committed memory)  Le min passe de 16 MB à 64 MB (x86) ou 128 MB (X64). L’espace « memory_to_reserve » (-g) n’inclus plus les demandes de « multi-page ». En dehors de ca, tout reste identique pour cette espace. L’option « awe enabled » n’est plus supportée. L’option « Lock Pages In Memory » est supporté pour les éditions Enterprise, Standard et Business Intelligence (pas pour les autres éditions).  Plus besoin de Hotfix, Trace Flag ou « AWE »
    5. 5. ColumnStore Index (CSI) Accélération  Nouvel algorithme de l’optimiseur BATCH  Produit et interprète les batch, chacun contenant ~1000 valeurs compressées  Requêtes Data Warehouse ou jointure en étoile  Utilise la compression Vertipaq  Moins d’IO Limitations  Pas d’Updates directe dans la table  Rebuild Index/Partition Switching  Pas de Large Data Types  Decimal > 18 digits  Uniqueidentifier  Binary et BLOBs
    6. 6. Columnstore Index Traditionnellement les données sont stockées Data Pages dans des pages lignes par lignes On utilise le terme « row store » pour décrire une … Heap ou un B-Tree ayant plusieurs ligne par page
    7. 7. Columnstore Index Select region, sum(sales), … Un Segment contiens les valeurs d’une colonne pour un ensemble de lignes Segment Les segments pour un même groupe de lignes constitues C3 C5 un « row group » Les segments sont compressés Chaque segment est stocké dans un BLOB Le segment est l’unité de Row transfert entre le disque et la group mémoire. Estimation de la mémoire nécessaire pour créer un CSI : DOP * (nb col * 4.2M + 68.1M) + (nb string col * 53.7M)
    8. 8. Exemple de performance Base du TPC-DS de 1 TB 1.44 milliard de lignes dans la table de faits catalog_salesSELECT w_city, w_state, d_year, SUM(cs_sales_price) AS cs_sales_priceFROM warehouse, catalog_sales, date_dimWHERE w_warehouse_sk = cs_warehouse_sk and cs_sold_date_sk = d_date_sk and w_state in (SD,OH) and d_year in (2001,2002,2003)GROUP BY w_city, w_state, d_yearORDER BY d_year, w_state, w_city; Total CPU time Elapsed time No columnstore 502 sec 501 sec Columnstore 31.0 sec 1.10 sec Speedup 16X 455X
    9. 9. Les Statistiques Utilisées par loptimiseur 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/Mises à jour automatiquement ou manuellement  Mises à jour en synchrone ou en asynchrone  Basées sur un échantillonnage ou toutes les valeurs Elles peuvent être filtrées: CREATE STATISTICS FSPoids ON Produit (Poids) WHERE CatID IN (1,2,3); Elles peuvent être sur des colonnes calculées si le résultat est déterministe. sys.dm_db_stats_properties en 2008 R2 SP2 (puis 2012) SELECT sp.stats_id, name, filter_definition, last_updated, rows, rows_sampled, steps, unfiltered_rows, modification_counter FROM sys.stats stat CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) sp WHERE stat.object_id = object_id(FactResellerSalesPartCopy_part)
    10. 10. Démo Statistiques  Table compressée  Index filtré Column Store Index  Update
    11. 11. Reconstruction d’indexe 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 l’espace SQL 2012: REBUILD ONLINE pour les LOB (sauf TEXT/IMAGE/FILESTREAM) FOREIGN KEY référençant l’indexes seront désactivées ALTER INDEX REBUILD CREATE INDEX WITH DROP_EXISTING Ajour ou suppression de colonnes changement de Non Oui l’ordre ou du tri Options de l’indexe a positionner Oui Oui Plus d’un indexe à reconstruire en une transaction Oui Non un indexe partitionné peut être repartitionné Non Oui un indexe peut être déplacé sur un autre fichier Non Oui Demande de l’espace temporaire supplémentaire Oui Oui Reconstruire un indexe cluster reconstruit les Non (sauf si ALL) Non (sauf si ALL) indexes non cluster Single index partition à reconstruire Oui Non
    12. 12. Réorganisation d’indexe ALTER INDEX … REORGANIZE  Toujours « Online »  Réorganise les feuilles de l’indexe en ordonnant les pages (de gauche a droite)  Les pages sont réorganisées en utilisant les pages existantes (pas d’allocation)  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é
    13. 13. Quand? 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(NProduction.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; avg_fragmentation_in_percent Action > 5% et < = 30% ALTER INDEX REORGANIZE > 30% ALTER INDEX REBUILD WITH (ONLINE = ON) Ne pas perdre du temps sur petits indexes (mixed extents).
    14. 14. Méthodologie L’analyse de performance est un perpétuel recommencement Quand on pense en avoir fini, un changement survient Capture Charge du Analyse système Reglages
    15. 15. Comment aborder une requêtelongue
    16. 16. Les outils Standard Dynamic Management Views (DMVs) Server Level Component Level Plus de 70 dm_exec_* dm_repl_* Toujours disponible Execution of user Replication Des rapports prédéfini code and associated dm_broker_* Performance Dashboard (web 2008) connections SQL Service Performance Data Colector (2008) dm_os_* Broker Memory, locking & dm_fts_* scheduling SQL Profiler (SQL Trace) dm_tran_* Full Text Search Grand nombre d’event capturable Transactions & dm_qn_* Combiné avec Perfmon isolation Query Va disparaitre Notifications dm_io_* dm_clr_* I/O on network and Xevent disks Common Language Utilise la techno ETW dm_db_* Runtime 5% de CPU pour 20000 event/sec Databases and Intégré dans le moteur database objects Database Tuning Advisor (DTA) Successeur de l’Index Tuning Wizard Plus robuste, moins de restrictions Possibilité de Capacity Planing Perfmon Toujours plus de compteurs
    17. 17. SQL 2012 DTA Tuning des 1000 top Events du Plan Cache Option –n du TDA.EXE pour changer le nombre d’Event
    18. 18. Xevent Introduit avec SQL 2008 Événements (Event): points d’intérêt dans le flot d’exécution du code. Cibles (Target): Ou stoquer l’evenement capturé (Event file, Ring buffer,…) Actions: Collecte d’information, Stack dump, … Types: Définit les types de données utilisés Prédicats: mécanisme de filtrage, permet de diminuer davantage l’empreinte de XE sur les performances Maps: table de correspondance clés / valeurs (genre d’EventSubClass plus poussé).
    19. 19. XE Profiler SQL Trace  Va disparaitre  Events Portés – Inclus dans le moteur 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) External Action Event: XEDEVPKG.DLL Alter Alter Create Start Extended Event Extended Event Session existe Session active Drop Stop Drop
    20. 20. Problème de cardinalitésinaccurate_cardinality_estimate(debug channel)Démarrer la sessions XE et regarder« live data »Sur une requête en cours, nousn’avons pas le plan d’executionactuel mais en quelques secondesCEUtiliser le plan_handle etdm_exec_query_plan, pour trouverle plan et le node_id
    21. 21. PSSDiag S’appuie 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: <CustomGroup name="msinfo" enabled="true" /> <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 Pssdiag and Sqldiag Manager  Disponible sur http://diagmanager.codeplex.com/  Pour SQL 7.0 jusqu’à SQL 2008 R2
    22. 22. Démo XEvent  Interface  Generate dump on error  Fire external Action  inaccurate_cardinality_estimate detection
    23. 23. 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. KB307786 Ne pas utiliser un path UNC, même s’il 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.
    24. 24. 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.
    25. 25. Best Practices – Capture 2 Evènements qui impactent la taille de la trace: SQL:StmtCompleted et SP:StmtCompleted Degree of Parallelism Lock:Timeout Show Plan Statistics SQL:BatchStarting RPC:Starting
    26. 26. RML & SQL Nexus RML Utilities for SQL Server http://support.microsoft.com/kb/944837  ReadTrace  Paramétrage des requêtes  Agrégation des exécutions  Analyse de performance (Top n)  Reporter  OStress  Agent de contrôle OStress relecture (ORCA) SQL Nexus Download depuis http://sqlnexus.codeplex.com/  Importer les traces SQLDiag + PerfStats  Analyser vos donnée  Utilise SQL Server Reporting Services client-side report viewer
    27. 27. Démo PSSDiag
    28. 28. PerfMon – Principauxcompteurs 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)
    29. 29. Resources Troubleshooting Performance Problems in SQL Server 2008 Reorganizing and Rebuilding Indexes Statistiques utilisées par loptimiseur de requête dans Microsoft SQL Server 2005 Rechercher des problèmes de délai dE/S dans le sous-système dE/S disque Optimisation des performances de la base de données tempdb Et l’ultime recours
    30. 30. Pour aller plus loin… Venez nous voir sur le stand SQL Server  Retrouvez les experts Microsoft et MVP  Assistez à des présentations des offres de nos partenaires Inscrivez-vous au « Virtual Launch Event » du 8 mars : http://aka.ms/vlefrance Visitez notre nouveau site : http://www.microsoft.fr/sql Evaluez dès aujourd’hui SQL Server 2012  En téléchargeant la RC0 : http://aka.ms/sql2012  En suivant nos « Virtual Labs » : http://aka.ms/sqllabs
    31. 31. palais descongrèsParis7, 8 et 9février 2012

    ×