32
Analyse et optimisation des performances du moteur SQL Serveur 10 février 2011 Frédéric Pichaut EMEA SR ESCALATION ENGINEER Microsoft France

Analyse et optimisation des performances du moteur SQL Serveur

Embed Size (px)

DESCRIPTION

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.

Citation preview

Page 1: Analyse et optimisation des performances du moteur SQL Serveur

Analyse et optimisation des performances du moteur SQL Serveur

10 février 2011Frédéric PichautEMEA SR ESCALATION ENGINEERMicrosoft France

Page 2: Analyse et optimisation des performances du moteur SQL Serveur

Quelques Bases Gestion de la mémoire avec SQL 2012ColumnStore IndexLes statistiquesGestion des indexMéthodologieLes outils Avec le produit (DTA, Xevent, XE Profiler,

SQLDiag) Extérieurs (SQLDiag, PSSDiag, SQL Nexus)

Agenda

Page 3: Analyse et optimisation des performances du moteur SQL Serveur

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 l'extraction 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 d'un 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 inclusesCREATE 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)”

Quelques Bases

Page 4: Analyse et optimisation des performances du moteur SQL Serveur

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 »

Gestion de la mémoire avec SQL 2012

Page 5: Analyse et optimisation des performances du moteur SQL Serveur

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

ColumnStore Index (CSI)

Page 6: Analyse et optimisation des performances du moteur SQL Serveur

Traditionnellement les données sont stockées dans des pages lignes par lignesOn utilise le terme « row store » pour décrire une Heap ou un B-Tree ayant plusieurs ligne par page

Columnstore Index

Data Pages

Page 7: Analyse et optimisation des performances du moteur SQL Serveur

Un Segment contiens les valeurs d’une colonne pour un ensemble de lignesLes segments pour un même groupe de lignes constitues un « row group »Les segments sont compressésChaque segment est stocké dans un BLOBLe segment est l’unité de transfert entre le disque et la 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)

Columnstore Index

C3 C5

Select region, sum(sales), …

Segment

Row group

Page 8: Analyse et optimisation des performances du moteur SQL Serveur

Base du TPC-DS de 1 TB 1.44 milliard de lignes dans la table de faits catalog_sales

Exemple de performance

  Total CPU time Elapsed time

No columnstore 502 sec 501 sec

Columnstore 31.0 sec 1.10 sec

Speedup 16X 455X

SELECT 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;

Page 9: Analyse et optimisation des performances du moteur SQL Serveur

Utilisées par l'optimiseur pour évaluer la sélectivité des expressions, et donc la taille des résultats intermédiaires et finauxSur 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

valeursElles 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')

Les Statistiques

Page 10: Analyse et optimisation des performances du moteur SQL Serveur

Statistiques Table compressée Index filtré

Column Store Index Update

Démo

Page 11: Analyse et optimisation des performances du moteur SQL Serveur

  ALTER INDEX REBUILD CREATE INDEX WITH DROP_EXISTING

Ajour ou suppression de colonnes changement de l’ordre ou du tri

Non Oui

Options de l’indexe a positionner Oui OuiPlus d’un indexe à reconstruire en une transaction Oui Non

un indexe partitionné peut être repartitionné  Non Ouiun 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 indexes non cluster

Non (sauf si ALL) Non (sauf si ALL)

Single index partition à reconstruire Oui Non

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’espaceSQL 2012: REBUILD ONLINE pour les LOB (sauf TEXT/IMAGE/FILESTREAM)FOREIGN KEY référençant l’indexes seront désactivées

Reconstruction d’indexe

Page 12: Analyse et optimisation des performances du moteur SQL Serveur

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é

Réorganisation d’indexe

Page 13: Analyse et optimisation des performances du moteur SQL Serveur

Utiliser la fonction : sys.dm_db_index_physical_stats()

Regarder la valeur:avg_fragmentation_in_percent

SELECT a.index_id, name, avg_fragmentation_in_percentFROM 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;

Quand?

Ne pas perdre du temps sur petits indexes (mixed extents).

avg_fragmentation_in_percent Action

> 5% et < = 30% ALTER INDEX REORGANIZE

> 30% ALTER INDEX REBUILD WITH (ONLINE = ON)

Page 14: Analyse et optimisation des performances du moteur SQL Serveur

L’analyse de performance est un perpétuel recommencementQuand on pense en avoir fini, un changement survient

Méthodologie

Capture

Analyse

Reglages

Charge du système

Page 15: Analyse et optimisation des performances du moteur SQL Serveur

Comment aborder une requête longue

Page 16: Analyse et optimisation des performances du moteur SQL Serveur

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

Les outils StandardDynamic Management Views (DMVs)

Plus de 70 Toujours disponible Des rapports prédéfiniPerformance Dashboard (web 2008)Performance Data Colector (2008)

SQL Profiler (SQL Trace)Grand nombre d’event capturableCombiné avec PerfmonVa disparaitre

XeventUtilise la techno ETW5% de CPU pour 20000 event/secIntégré dans le moteur

Database Tuning Advisor (DTA) Successeur de l’Index Tuning WizardPlus robuste, moins de restrictionsPossibilité de Capacity Planing

PerfmonToujours plus de compteurs

Page 17: Analyse et optimisation des performances du moteur SQL Serveur

Tuning des 1000 top Events du Plan CacheOption –n du TDA.EXE pour changer le nombre d’Event

SQL 2012 DTA

Page 18: Analyse et optimisation des performances du moteur SQL Serveur

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ésPrédicats: mécanisme de filtrage, permet de diminuer davantage l’empreinte de XE sur les performancesMaps: table de correspondance clés / valeurs (genre d’EventSubClass plus poussé).

Xevent

Page 19: Analyse et optimisation des performances du moteur SQL Serveur

SQL Trace Va disparaitre Events Portés – Inclus dans le moteur

Intégré à Management Studio (SSMS)Create, Alter, Stop, Start SessionsPossibilité de voir les données sous forme de grilleFonctions avancées Searching Aggregation (Sum, Min, Max, …) Sorting Grouping

Custom Columns (Ex: connect_options, sql_text = text)External Action Event: XEDEVPKG.DLL

XE Profiler

Create Start

StopDrop

Extended EventSession existe

Alter

Extended EventSession active

Alter

Drop

Page 20: Analyse et optimisation des performances du moteur SQL Serveur

Problème de cardinalités

inaccurate_cardinality_estimate (debug channel)Démarrer la sessions XE et regarder « live data »Sur une requête en cours, nous n’avons pas le plan d’execution actuel mais en quelques secondes CEUtiliser le plan_handle et dm_exec_query_plan, pour trouver le plan et le node_id

Page 21: Analyse et optimisation des performances du moteur SQL Serveur

S’appuie sur SQLDiag + Diagnostiques particuliersExemples: DMV, clone db, msdb backupContrô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

PSSDiag

Page 22: Analyse et optimisation des performances du moteur SQL Serveur
Page 23: Analyse et optimisation des performances du moteur SQL Serveur

XEvent Interface Generate dump on error Fire external Action inaccurate_cardinality_estimate detection

Démo

Page 24: Analyse et optimisation des performances du moteur SQL Serveur

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.  KB307786Ne 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.

PSSDiag Best Practices I/O

Page 25: Analyse et optimisation des performances du moteur SQL Serveur

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.

Best Practices – Capture

Page 26: Analyse et optimisation des performances du moteur SQL Serveur

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  

Best Practices – Capture 2

Page 27: Analyse et optimisation des performances du moteur SQL Serveur

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

RML & SQL Nexus

Page 28: Analyse et optimisation des performances du moteur SQL Serveur

PSSDiag

Démo

Page 29: Analyse et optimisation des performances du moteur SQL Serveur

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)

PerfMon – Principaux compteurs 

Page 31: Analyse et optimisation des performances du moteur SQL Serveur

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

Page 32: Analyse et optimisation des performances du moteur SQL Serveur

palais des congrès Paris

7, 8 et 9 février 2012