SlideShare uma empresa Scribd logo
1 de 35
#JSS2015
Les journées
SQL Server 2015
Un événement organisé par GUSS
@GUSS_FRANCE
#JSS2015
Les journées
SQL Server 2015
Un événement organisé par GUSS
Session - Le query store, le (nouveau)
meilleur ami du DBA
Benjamin Vesan
Guillaume Nocent
#JSS2015
Merci à nos sponsors
#JSS2015
• Benjamin Vesan – Cap Data
MVP SQL Server
DBA depuis 2001 – SQL 6.5
bvesan@capdata-osmozium.com
@captain_BV
http://blog.capdata.fr/
• Guillaume Nocent – Viatéa
DBA depuis 1999 – SQL 6.0
gnocent@viatea.fr
@gnocent_sql
http://www.dba-sqlserver.fr/
Présentation speakers
#JSS2015
• Introduction
• La régression de performance
• Les outils à disposition jusqu’ici
• Le Query Store de SQL Server 2016 
• Les limites de la « V1 »
• Quelques cas potentiels d’utilisation
Agenda
#JSS2015
Fonctionnalité à venir dans SQL 2016.
Basé sur plusieurs sources :
- Documentation Microsoft
- Présentation PASS et SQLBITS de Conor Cunningham
- Plusieurs articles de blog ou présentations de Microsoft et MVP
- Nos tests réalisés sur SQL Server 2016 CTP3
Introduction
#JSS2015
Une réalité dans la vie de nos bases
• Utilisateurs remontent lenteurs
- Sur certaines actions
- À certains moments
• Blocage de la production « plus rien ne répond »
• Crainte face aux changements de version/patches
(logiciels internes ou SQL Server)
La régression de performance
#JSS2015
Les attentes (encore et toujours)
• Observer les attentes permettra d’identifier des
goulots d’étranglement (saturation CPU ou disque,
concurrence de verrous, …).
• Une ou plusieurs requêtes pourront apparaître
comme très « consommatrices ».
• Reste à répondre à la question « Qu’est-ce qui a
changé ? »
La régression de performance
#JSS2015
Plan d’exécution : instable par nature
• Généré lorsqu’aucun plan en cache n’est trouvé
• Dépend :
– des Statistiques sur les objets
– du Modèle Physique de chaque objet
– de la valeur des variables
– de la configuration de la session
– de la configuration de l’instance
La régression de performance
#JSS2015
Plan d’exécution : instable par nature
• Invalidé lorsque:
– les statistiques sont considérées obsolètes
– le modèle physique d’un objet est modifié
– SQLOS décide de le supprimer de la mémoire
– l’instance redémarre
• Le nouveau plan peut être totalement différent de l’ancien
(effets de seuils, valeurs des variables, stats différentes)
• On ne peut déterminer combien de temps un plan sera utilisé !
La régression de performance
#JSS2015
DÉMO 1 – INSTABILITE DES PLANS
La régression de performance
#JSS2015
Résumé de la démo n°1
Le Query Store de SQL Server 2016
Démonstration des problématiques d’instabilité de plan : modification
d’une table de démonstration avec une répartition très déséquilibrée
(une ligne contre 113442 selon la valeur choisie).
Selon le premier appel effectué après perte du plan (valeur transmise), le
nouveau plan généré sera très différent et réutilisé les fois suivantes
(même pour d’autres paramètres).
Ensuite, beaucoup de situations peuvent invalider un plan (modification
de + de 20% de la volumétrie, entrainant un auto update stats, même si
c’est rollbacké, ou alter database même pour des paramètres n’affectant
pas l’optimizer).
Possibilité de réorienter un nouveau plan, soit par une directive (« hint »),
soit par plan_guide (forçage d’un hint en externe, ou d’un plan complet).
#JSS2015
Monitoring
Depuis la version 2005, les outils sont nombreux pour :
• Identifier un problème « à chaud »
– DMVs
– Rapports SSMS
– Activity Monitor
• Suivre l’activité sur la durée
– Trace profiler ou XEvents
– Trace PerfMon / SQLDiag / RML Utilities (PAL)
– Performance Datawarehouse
Aucun de ces outils n’est orienté « suivi du changement ».
Les outils à disposition jusqu’ici
Branchés en
permanence sur la
production ?
#JSS2015
Actions correctives
Des outils existent, avec différents niveaux de facilité et de risque :
• Directives dans une requête (maxdop/index/jointures/optimize for)
– Nécessite l’accès au code d’une requête
• Plan Guides
– Risqué à long terme
• Recompile
– Surcoût à chaque exécution
Les outils à disposition jusqu’ici
#JSS2015
Actions correctives
Des outils existent, avec différents niveaux de facilité et de risque :
• Directives dans une requête (maxdop/index/jointures/optimize for)
– Nécessite l’accès au code d’une requête
• Plan Guides
– Risqué à long terme
• Recompile
– Surcoût à chaque exécution
Les outils à disposition jusqu’ici
#JSS2015
Query Store: 1. collecte des informations
• Plan d’exécution pour chaque requête lors de la compilation («plan store »)
• Statistiques d’exécution pour toutes les requêtes (« runtime stats store »)
• Agrégat et purge paramétrables
(Présentation QS par Conor Cunningham)
Le Query Store de SQL Server 2016
#JSS2015
Query Store: 1. collecte des informations
ALTER DATABASE MaBase SET QUERY_STORE = ON -- OFF
(
OPERATION_MODE = READ_WRITE, -- READ_ONLY
CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
DATA_FLUSH_INTERVAL_SECONDS = 30,
MAX_STORAGE_SIZE_MB = 1000,
INTERVAL_LENGTH_MINUTES = 5,
SIZE_BASED_CLEANUP_MODE = AUTO, --OFF
QUERY_CAPTURE_MODE = ALL, -- AUTO / NONE
MAX_PLANS_PER_QUERY = 10
)
GO
Le Query Store de SQL Server 2016
Collecte de données activée ou nonNombre de jours où l’on conserve
les informations d’une requête
Intervalle d’écriture
(persistance asynchrone)
Taille maximale occupée par
le Query Store dans la base
Intervalle d’agrégation des informations
statistiques sur les exécutions
1, 5, 10, 15, 30, 60, ou 1440
Si sur AUTO, dès que l’occupation dépassera 90%,
supprimera les requêtes les moins coûteuses et plus
anciennes, jusqu’à passer sous les 80% d’espace occupéALL : capture tout
AUTO : ignore les requêtes considérées comme mineures
NONE : ne capture que les statistiques d’exécution des
requêtes déjà capturées
Nombre maximal de plans capturés par requête
#JSS2015
Query Store: 2. Restitution des informations
Les DMVs suivantes (nécessitent « VIEW DATABASE STATE »)
sys.database_query_store_options
sys.query_context_settings (à utiliser avec sys.dm_exec_plan_attributes)
sys.query_store_plan
sys.query_store_query
sys.query_store_query_text (attention aux valeurs de la colonne « has_restricted_text »)
sys.query_store_runtime_stats
sys.query_store_runtime_stats_interval
Beaucoup d’exemples de requêtes sur l’URL :
Monitoring Performance By Using the Query Store
https://msdn.microsoft.com/en-us/library/dn817826.aspx
Le Query Store de SQL Server 2016
#JSS2015
Query Store: 3. Choix d’un plan
Les Procédures Stockées :
• sp_query_store_force_plan
(Valide tant que le QS est actif, survit à un redémarrage et une restauration)
• sp_query_store_unforce_plan
Attention, différences entre forçage de plan et plan guide !
 Plan guide plus souple (forçage externe hint, création depuis un autre env …), mais
très complexe et fastidieux à implémenter
 Query Store force plan ne peut forcer qu’un plan qu’il a déjà rencontré sur une
requête telle qu’elle est écrite !
Le Query Store de SQL Server 2016
#JSS2015
DÉMO 2 - ACTIVATION
Usage dans SSMS et gestion
#JSS2015
Résumé de la démo n°2
Démonstration de l’activation du Query Store en ligne de commande.
Vérification par requêtes que le Query Store ne renvoie rien si la session de l’utilisateur n’est pas
sur la base où est activé le QS (ex: si on est sur master ou tempdb, même si on requête les objets
d’autres bases).
Rappel du côté Read_Write ou Read_Only (notamment passage en RO si plus de place).
Requête type :
SELECT q.query_id, qt.query_text_id, qt.query_sql_text,
SUM(rs.count_executions) AS total_execution_count
FROM sys.query_store_query_text AS qt
JOIN sys.query_store_query AS q
ON qt.query_text_id = q.query_text_id
JOIN sys.query_store_plan AS p
ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats AS rs
ON p.plan_id = rs.plan_id
GROUP BY q.query_id, qt.query_text_id, qt.query_sql_text
ORDER BY total_execution_count DESC;
Le Query Store de SQL Server 2016
#JSS2015
DÉMO 3 - INVESTIGATION
Usage dans SSMS et gestion
#JSS2015
Résumé de la démo n°3
Démonstration d’un cas de parameter sniffing avec localisation facile de la requête incriminée et des deux plans.
Présentation des 4 panneaux du Query Store dans SSMS :
- Overall Resources comsumption (choix des indicateurs/périodes)
- Top resources consumer (choix du critère du top 25, de la métrique remontée, …)
- Regressed queries (périodes : récente et historique, avec remontée des requêtes dont le comportement a changé)
- Tracked queries (obtenue par clic sur une requête, permet de voir côte à côte tous les plans, par exemple)
Proposition de fix par création d’un index (qui crééra un 3ème plan, mais toujours instable à cause de la date trop
sélective parfois), ainsi que de l’ajout du hint « optimize for unknown » dans la requête.
Démonstration du Live Query Statistics
Nécessite « SET STATISTICS XML ON » ou « SET STATISTICS PROFILE ON; » (session) / ou activation globale de l’XE
query_post_execution_showplan (pb perfs !!!)
Observation d’un cas de sur-itération d'udf et démonstration de son repérage via :
select object_name(FS.object_id), FS.execution_count, FS.last_execution_time, * from sys.dm_exec_function_stats FS
where FS.database_id=db_id() order by FS.execution_count DESC, FS.last_execution_time DESC
Le Query Store de SQL Server 2016
#JSS2015
Résumé de la démo n°3 – Captures d’écran
Le Query Store de SQL Server 2016
#JSS2015
DÉMO 4 - ACTION
Usage dans SSMS et gestion
#JSS2015
Résumé de la démo n°4
Possibilité de forcer des plans via l’interface d’un simple clic sur le plan déjà capturer que l’on veut
garantir (qui apparaît alors avec une petite coche). Cela ne créé pas de plan guide.
Si on effectue un changement qui rend ce plan impossible à appliquer, on pourra retrouver la
remontée d’erreur via une requête ou le XEvent « query_store_plan_forcing_failed » :
CREATE EVENT SESSION [ForcePlanQueryStore_Failed] ON SERVER
ADD EVENT qds.query_store_plan_forcing_failed
ADD TARGET package0.ring_buffer(SET max_memory=(102400))
WITH (STARTUP_STATE=ON)
GO
select P.last_force_failure_reason_desc, P.*
from sys.query_store_plan P
where P.query_id=45
order by P.last_execution_time DESC
GO
Le Query Store de SQL Server 2016
#JSS2015
Résumé de la démo n°4 – Captures d’écran
Le Query Store de SQL Server 2016
#JSS2015
• Inconnue sur les éditions qui l’inclueront au-delà de
Standard et Enterprise
• Stocké dans la base du contexte … et pas activable sur
master ou tempdb !
• Db_name harcodé, à une restauration, mais pas à un
renommage
• Supporte in-memory, mais avec restrictions (moins
depuis la CTP3)
Mais … Limites de la « V1 »
#JSS2015
• Le bon plan doit avoir été exécuté pour pouvoir être forcé
(comment y parvenir ? Plan_guide ??? ;-) )
• Pas de lien avec l’usager (login/machine/…) qui sont à l’origine
du workload (limite potentielle dans les critères de recherche)
• Attention, id de req/plan != ceux des dm_exec_*
Mais possibilité de retrouver à partir du texte de req donné
par le QS via la fn : sys.fn_stmt_sql_handle_from_sql_stmt
Ex :
Mais … Limites de la « V1 »
SELECT qt.query_text_id, q.query_id, qt.query_sql_text, qt.statement_sql_handle,
q.context_settings_id, qs.statement_context_id
FROM sys.query_store_query_text AS qt
INNER JOIN sys.query_store_query AS q
ON qt.query_text_id = q.query_id
CROSS APPLY sys.fn_stmt_sql_handle_from_sql_stmt (qt.query_sql_text, null) AS
fn_handle_from_stmt
INNER JOIN sys.dm_exec_query_stats AS qs
ON fn_handle_from_stmt.statement_sql_handle = qs.statement_sql_handle;
#JSS2015
• « Batch de nuit », valeurs de variables différentes selon la plage horaire
d’exécution d’une même requête
 1 plan forcé par plage horaire différente
• Mise en production complexe et peu validée
Changement de Compat / TraceFlag 4199
 Effectuer un jeu de test dans le compat level source puis cible, comparer les
résultats (dans SSMS ou via requêtes)
 Eviter la régression en forçant les plans des requêtes critiques
• Possibilité d’obtenir facilement une vue complète du comportement
d’une production, à distance par l’intermédiaire d’une simple sauvegarde
Quelques cas potentiels d’utilisation
#JSS2015
Vos questions
Vos remarques
#JSS2015#JSS2015
Les évaluations des sessions,
c’est important !!
http://GUSS.Pro/jss
#JSS2015
Merci à nos volontaires…
#JSS2015#JSS2015
#JSS2015
Scripts SQL des démos :

Mais conteúdo relacionado

Destaque

To g chapter season 2 chapter 6.cv
To g chapter season 2 chapter 6.cvTo g chapter season 2 chapter 6.cv
To g chapter season 2 chapter 6.cvMax Kerkula
 
Projeto AN9 - Uberlândia
Projeto AN9 - UberlândiaProjeto AN9 - Uberlândia
Projeto AN9 - UberlândiaFilipe Detrey
 
Examen sybase - Administration base de donnees
Examen sybase - Administration base de donneesExamen sybase - Administration base de donnees
Examen sybase - Administration base de donneeswebreaker
 
Dat202 Techdays Paris 2015: PowerBI un an après
Dat202 Techdays Paris 2015: PowerBI un an aprèsDat202 Techdays Paris 2015: PowerBI un an après
Dat202 Techdays Paris 2015: PowerBI un an aprèsIsabelle Van Campenhoudt
 
QUALITY MANAGEMENT
QUALITY MANAGEMENTQUALITY MANAGEMENT
QUALITY MANAGEMENTsmcci
 
Tuning Sql Server for SharePoint--- Community Day Belgium 2013
Tuning Sql Server for SharePoint--- Community Day Belgium 2013Tuning Sql Server for SharePoint--- Community Day Belgium 2013
Tuning Sql Server for SharePoint--- Community Day Belgium 2013Isabelle Van Campenhoudt
 
Smci
SmciSmci
Smcismcci
 
Relational databases & NoSQL databases
Relational databases & NoSQL databasesRelational databases & NoSQL databases
Relational databases & NoSQL databasesCédric Villa
 
SharePoint 2016 les nouveautés / yosTour Lyon / Etienne Bailly | Benoit Jester
SharePoint 2016 les nouveautés / yosTour Lyon / Etienne Bailly | Benoit JesterSharePoint 2016 les nouveautés / yosTour Lyon / Etienne Bailly | Benoit Jester
SharePoint 2016 les nouveautés / yosTour Lyon / Etienne Bailly | Benoit JesterEtienne Bailly
 
Microsoft BI demystified: SharePoint 2016 BI or for PowerBI v2?
Microsoft BI demystified: SharePoint 2016 BI or for PowerBI v2?Microsoft BI demystified: SharePoint 2016 BI or for PowerBI v2?
Microsoft BI demystified: SharePoint 2016 BI or for PowerBI v2?SPC Adriatics
 
SharePoint 2016 BI or PowerBI v2 - SharePoint Saturday Cambridge
SharePoint 2016 BI or PowerBI v2 - SharePoint Saturday CambridgeSharePoint 2016 BI or PowerBI v2 - SharePoint Saturday Cambridge
SharePoint 2016 BI or PowerBI v2 - SharePoint Saturday Cambridgeserge luca
 
Dart structured web apps
Dart   structured web appsDart   structured web apps
Dart structured web appschrisbuckett
 
บทที่ ๔ สื่อการสอนและห้องเรียนภาษาไทยในฐานะภาษาต่างประเทศ
บทที่ ๔ สื่อการสอนและห้องเรียนภาษาไทยในฐานะภาษาต่างประเทศบทที่ ๔ สื่อการสอนและห้องเรียนภาษาไทยในฐานะภาษาต่างประเทศ
บทที่ ๔ สื่อการสอนและห้องเรียนภาษาไทยในฐานะภาษาต่างประเทศเจริญขวัญ นาคประดิษฐ์
 
PowerBI v2, Power to the People, 1 year later
PowerBI v2, Power to the People, 1 year laterPowerBI v2, Power to the People, 1 year later
PowerBI v2, Power to the People, 1 year laterserge luca
 
SQL Saturday 510 Paris 2016 - Query Store session - final
SQL Saturday 510 Paris 2016 - Query Store session - finalSQL Saturday 510 Paris 2016 - Query Store session - final
SQL Saturday 510 Paris 2016 - Query Store session - finalPhilippe Geiger
 
Unbreakable Sharepoint 2016 With SQL Server 2016 availability groups
Unbreakable Sharepoint 2016 With SQL Server 2016 availability groupsUnbreakable Sharepoint 2016 With SQL Server 2016 availability groups
Unbreakable Sharepoint 2016 With SQL Server 2016 availability groupsIsabelle Van Campenhoudt
 

Destaque (20)

To g chapter season 2 chapter 6.cv
To g chapter season 2 chapter 6.cvTo g chapter season 2 chapter 6.cv
To g chapter season 2 chapter 6.cv
 
Portfolio henderson a
Portfolio henderson aPortfolio henderson a
Portfolio henderson a
 
Sesión 4
Sesión 4Sesión 4
Sesión 4
 
Projeto AN9 - Uberlândia
Projeto AN9 - UberlândiaProjeto AN9 - Uberlândia
Projeto AN9 - Uberlândia
 
Examen sybase - Administration base de donnees
Examen sybase - Administration base de donneesExamen sybase - Administration base de donnees
Examen sybase - Administration base de donnees
 
Dat202 Techdays Paris 2015: PowerBI un an après
Dat202 Techdays Paris 2015: PowerBI un an aprèsDat202 Techdays Paris 2015: PowerBI un an après
Dat202 Techdays Paris 2015: PowerBI un an après
 
QUALITY MANAGEMENT
QUALITY MANAGEMENTQUALITY MANAGEMENT
QUALITY MANAGEMENT
 
Tuning Sql Server for SharePoint--- Community Day Belgium 2013
Tuning Sql Server for SharePoint--- Community Day Belgium 2013Tuning Sql Server for SharePoint--- Community Day Belgium 2013
Tuning Sql Server for SharePoint--- Community Day Belgium 2013
 
Cycle Power BI Part1
Cycle Power BI Part1Cycle Power BI Part1
Cycle Power BI Part1
 
Smci
SmciSmci
Smci
 
Relational databases & NoSQL databases
Relational databases & NoSQL databasesRelational databases & NoSQL databases
Relational databases & NoSQL databases
 
SharePoint 2016 les nouveautés / yosTour Lyon / Etienne Bailly | Benoit Jester
SharePoint 2016 les nouveautés / yosTour Lyon / Etienne Bailly | Benoit JesterSharePoint 2016 les nouveautés / yosTour Lyon / Etienne Bailly | Benoit Jester
SharePoint 2016 les nouveautés / yosTour Lyon / Etienne Bailly | Benoit Jester
 
Microsoft BI demystified: SharePoint 2016 BI or for PowerBI v2?
Microsoft BI demystified: SharePoint 2016 BI or for PowerBI v2?Microsoft BI demystified: SharePoint 2016 BI or for PowerBI v2?
Microsoft BI demystified: SharePoint 2016 BI or for PowerBI v2?
 
SharePoint 2016 BI or PowerBI v2 - SharePoint Saturday Cambridge
SharePoint 2016 BI or PowerBI v2 - SharePoint Saturday CambridgeSharePoint 2016 BI or PowerBI v2 - SharePoint Saturday Cambridge
SharePoint 2016 BI or PowerBI v2 - SharePoint Saturday Cambridge
 
Dart structured web apps
Dart   structured web appsDart   structured web apps
Dart structured web apps
 
บทที่ ๔ สื่อการสอนและห้องเรียนภาษาไทยในฐานะภาษาต่างประเทศ
บทที่ ๔ สื่อการสอนและห้องเรียนภาษาไทยในฐานะภาษาต่างประเทศบทที่ ๔ สื่อการสอนและห้องเรียนภาษาไทยในฐานะภาษาต่างประเทศ
บทที่ ๔ สื่อการสอนและห้องเรียนภาษาไทยในฐานะภาษาต่างประเทศ
 
PowerBI v2, Power to the People, 1 year later
PowerBI v2, Power to the People, 1 year laterPowerBI v2, Power to the People, 1 year later
PowerBI v2, Power to the People, 1 year later
 
Powerbi 365
Powerbi 365Powerbi 365
Powerbi 365
 
SQL Saturday 510 Paris 2016 - Query Store session - final
SQL Saturday 510 Paris 2016 - Query Store session - finalSQL Saturday 510 Paris 2016 - Query Store session - final
SQL Saturday 510 Paris 2016 - Query Store session - final
 
Unbreakable Sharepoint 2016 With SQL Server 2016 availability groups
Unbreakable Sharepoint 2016 With SQL Server 2016 availability groupsUnbreakable Sharepoint 2016 With SQL Server 2016 availability groups
Unbreakable Sharepoint 2016 With SQL Server 2016 availability groups
 

Semelhante a Présentation JSS2015 - Le Query Store de SQL Server 2016

Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaMicrosoft
 
Une gestion efficace du changement de vos structures de données relationnelle...
Une gestion efficace du changement de vos structures de données relationnelle...Une gestion efficace du changement de vos structures de données relationnelle...
Une gestion efficace du changement de vos structures de données relationnelle...Olivier DASINI
 
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...Ippon
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Normandy JUG
 
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdfc11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdftepoha4848
 
S17 adressez vos besoins complexes de reporting avec db2 web query
S17   adressez vos besoins complexes de reporting avec db2 web queryS17   adressez vos besoins complexes de reporting avec db2 web query
S17 adressez vos besoins complexes de reporting avec db2 web queryGautier DUMAS
 
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?Benoit Fillon
 
JSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéJSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéChristophe Laporte
 
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data LakeGUSS
 
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnelsUSI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnelsJoseph Glorieux
 
20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven developmentLeClubQualiteLogicielle
 
[JSS2015] Nouveautés SSIS SSRS 2016
[JSS2015] Nouveautés SSIS SSRS 2016[JSS2015] Nouveautés SSIS SSRS 2016
[JSS2015] Nouveautés SSIS SSRS 2016GUSS
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Microsoft
 
Automatiser les tests des développements BI grâce à NBi
Automatiser les tests des développements BI grâce à NBiAutomatiser les tests des développements BI grâce à NBi
Automatiser les tests des développements BI grâce à NBiCédric Charlier
 

Semelhante a Présentation JSS2015 - Le Query Store de SQL Server 2016 (20)

Conversion de devises avec Power Query
Conversion de devises avec Power QueryConversion de devises avec Power Query
Conversion de devises avec Power Query
 
20110125 04 - Présentation Squash
20110125 04 - Présentation Squash20110125 04 - Présentation Squash
20110125 04 - Présentation Squash
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmedia
 
Corrige_partie_ADM.pdf
Corrige_partie_ADM.pdfCorrige_partie_ADM.pdf
Corrige_partie_ADM.pdf
 
Une gestion efficace du changement de vos structures de données relationnelle...
Une gestion efficace du changement de vos structures de données relationnelle...Une gestion efficace du changement de vos structures de données relationnelle...
Une gestion efficace du changement de vos structures de données relationnelle...
 
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
Système d’Information à l’Apec : un nouveau coeur de métier mis en place avec...
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
 
JSS2013 : Hekaton
JSS2013 : HekatonJSS2013 : Hekaton
JSS2013 : Hekaton
 
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdfc11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
 
S17 adressez vos besoins complexes de reporting avec db2 web query
S17   adressez vos besoins complexes de reporting avec db2 web queryS17   adressez vos besoins complexes de reporting avec db2 web query
S17 adressez vos besoins complexes de reporting avec db2 web query
 
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
 
JSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéJSS2013 : Haute disponibilité
JSS2013 : Haute disponibilité
 
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
 
Migration sharepoint 2013
Migration sharepoint 2013Migration sharepoint 2013
Migration sharepoint 2013
 
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnelsUSI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
USI 2013 : 7 changements nécessaires pour sauver vos SI décisionnels
 
20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development
 
[JSS2015] Nouveautés SSIS SSRS 2016
[JSS2015] Nouveautés SSIS SSRS 2016[JSS2015] Nouveautés SSIS SSRS 2016
[JSS2015] Nouveautés SSIS SSRS 2016
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016
 
YaJUG - Spring 3.0
YaJUG - Spring 3.0YaJUG - Spring 3.0
YaJUG - Spring 3.0
 
Automatiser les tests des développements BI grâce à NBi
Automatiser les tests des développements BI grâce à NBiAutomatiser les tests des développements BI grâce à NBi
Automatiser les tests des développements BI grâce à NBi
 

Présentation JSS2015 - Le Query Store de SQL Server 2016

  • 1. #JSS2015 Les journées SQL Server 2015 Un événement organisé par GUSS @GUSS_FRANCE
  • 2. #JSS2015 Les journées SQL Server 2015 Un événement organisé par GUSS Session - Le query store, le (nouveau) meilleur ami du DBA Benjamin Vesan Guillaume Nocent
  • 4. #JSS2015 • Benjamin Vesan – Cap Data MVP SQL Server DBA depuis 2001 – SQL 6.5 bvesan@capdata-osmozium.com @captain_BV http://blog.capdata.fr/ • Guillaume Nocent – Viatéa DBA depuis 1999 – SQL 6.0 gnocent@viatea.fr @gnocent_sql http://www.dba-sqlserver.fr/ Présentation speakers
  • 5. #JSS2015 • Introduction • La régression de performance • Les outils à disposition jusqu’ici • Le Query Store de SQL Server 2016  • Les limites de la « V1 » • Quelques cas potentiels d’utilisation Agenda
  • 6. #JSS2015 Fonctionnalité à venir dans SQL 2016. Basé sur plusieurs sources : - Documentation Microsoft - Présentation PASS et SQLBITS de Conor Cunningham - Plusieurs articles de blog ou présentations de Microsoft et MVP - Nos tests réalisés sur SQL Server 2016 CTP3 Introduction
  • 7. #JSS2015 Une réalité dans la vie de nos bases • Utilisateurs remontent lenteurs - Sur certaines actions - À certains moments • Blocage de la production « plus rien ne répond » • Crainte face aux changements de version/patches (logiciels internes ou SQL Server) La régression de performance
  • 8. #JSS2015 Les attentes (encore et toujours) • Observer les attentes permettra d’identifier des goulots d’étranglement (saturation CPU ou disque, concurrence de verrous, …). • Une ou plusieurs requêtes pourront apparaître comme très « consommatrices ». • Reste à répondre à la question « Qu’est-ce qui a changé ? » La régression de performance
  • 9. #JSS2015 Plan d’exécution : instable par nature • Généré lorsqu’aucun plan en cache n’est trouvé • Dépend : – des Statistiques sur les objets – du Modèle Physique de chaque objet – de la valeur des variables – de la configuration de la session – de la configuration de l’instance La régression de performance
  • 10. #JSS2015 Plan d’exécution : instable par nature • Invalidé lorsque: – les statistiques sont considérées obsolètes – le modèle physique d’un objet est modifié – SQLOS décide de le supprimer de la mémoire – l’instance redémarre • Le nouveau plan peut être totalement différent de l’ancien (effets de seuils, valeurs des variables, stats différentes) • On ne peut déterminer combien de temps un plan sera utilisé ! La régression de performance
  • 11. #JSS2015 DÉMO 1 – INSTABILITE DES PLANS La régression de performance
  • 12. #JSS2015 Résumé de la démo n°1 Le Query Store de SQL Server 2016 Démonstration des problématiques d’instabilité de plan : modification d’une table de démonstration avec une répartition très déséquilibrée (une ligne contre 113442 selon la valeur choisie). Selon le premier appel effectué après perte du plan (valeur transmise), le nouveau plan généré sera très différent et réutilisé les fois suivantes (même pour d’autres paramètres). Ensuite, beaucoup de situations peuvent invalider un plan (modification de + de 20% de la volumétrie, entrainant un auto update stats, même si c’est rollbacké, ou alter database même pour des paramètres n’affectant pas l’optimizer). Possibilité de réorienter un nouveau plan, soit par une directive (« hint »), soit par plan_guide (forçage d’un hint en externe, ou d’un plan complet).
  • 13. #JSS2015 Monitoring Depuis la version 2005, les outils sont nombreux pour : • Identifier un problème « à chaud » – DMVs – Rapports SSMS – Activity Monitor • Suivre l’activité sur la durée – Trace profiler ou XEvents – Trace PerfMon / SQLDiag / RML Utilities (PAL) – Performance Datawarehouse Aucun de ces outils n’est orienté « suivi du changement ». Les outils à disposition jusqu’ici Branchés en permanence sur la production ?
  • 14. #JSS2015 Actions correctives Des outils existent, avec différents niveaux de facilité et de risque : • Directives dans une requête (maxdop/index/jointures/optimize for) – Nécessite l’accès au code d’une requête • Plan Guides – Risqué à long terme • Recompile – Surcoût à chaque exécution Les outils à disposition jusqu’ici
  • 15. #JSS2015 Actions correctives Des outils existent, avec différents niveaux de facilité et de risque : • Directives dans une requête (maxdop/index/jointures/optimize for) – Nécessite l’accès au code d’une requête • Plan Guides – Risqué à long terme • Recompile – Surcoût à chaque exécution Les outils à disposition jusqu’ici
  • 16. #JSS2015 Query Store: 1. collecte des informations • Plan d’exécution pour chaque requête lors de la compilation («plan store ») • Statistiques d’exécution pour toutes les requêtes (« runtime stats store ») • Agrégat et purge paramétrables (Présentation QS par Conor Cunningham) Le Query Store de SQL Server 2016
  • 17. #JSS2015 Query Store: 1. collecte des informations ALTER DATABASE MaBase SET QUERY_STORE = ON -- OFF ( OPERATION_MODE = READ_WRITE, -- READ_ONLY CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ), DATA_FLUSH_INTERVAL_SECONDS = 30, MAX_STORAGE_SIZE_MB = 1000, INTERVAL_LENGTH_MINUTES = 5, SIZE_BASED_CLEANUP_MODE = AUTO, --OFF QUERY_CAPTURE_MODE = ALL, -- AUTO / NONE MAX_PLANS_PER_QUERY = 10 ) GO Le Query Store de SQL Server 2016 Collecte de données activée ou nonNombre de jours où l’on conserve les informations d’une requête Intervalle d’écriture (persistance asynchrone) Taille maximale occupée par le Query Store dans la base Intervalle d’agrégation des informations statistiques sur les exécutions 1, 5, 10, 15, 30, 60, ou 1440 Si sur AUTO, dès que l’occupation dépassera 90%, supprimera les requêtes les moins coûteuses et plus anciennes, jusqu’à passer sous les 80% d’espace occupéALL : capture tout AUTO : ignore les requêtes considérées comme mineures NONE : ne capture que les statistiques d’exécution des requêtes déjà capturées Nombre maximal de plans capturés par requête
  • 18. #JSS2015 Query Store: 2. Restitution des informations Les DMVs suivantes (nécessitent « VIEW DATABASE STATE ») sys.database_query_store_options sys.query_context_settings (à utiliser avec sys.dm_exec_plan_attributes) sys.query_store_plan sys.query_store_query sys.query_store_query_text (attention aux valeurs de la colonne « has_restricted_text ») sys.query_store_runtime_stats sys.query_store_runtime_stats_interval Beaucoup d’exemples de requêtes sur l’URL : Monitoring Performance By Using the Query Store https://msdn.microsoft.com/en-us/library/dn817826.aspx Le Query Store de SQL Server 2016
  • 19. #JSS2015 Query Store: 3. Choix d’un plan Les Procédures Stockées : • sp_query_store_force_plan (Valide tant que le QS est actif, survit à un redémarrage et une restauration) • sp_query_store_unforce_plan Attention, différences entre forçage de plan et plan guide !  Plan guide plus souple (forçage externe hint, création depuis un autre env …), mais très complexe et fastidieux à implémenter  Query Store force plan ne peut forcer qu’un plan qu’il a déjà rencontré sur une requête telle qu’elle est écrite ! Le Query Store de SQL Server 2016
  • 20. #JSS2015 DÉMO 2 - ACTIVATION Usage dans SSMS et gestion
  • 21. #JSS2015 Résumé de la démo n°2 Démonstration de l’activation du Query Store en ligne de commande. Vérification par requêtes que le Query Store ne renvoie rien si la session de l’utilisateur n’est pas sur la base où est activé le QS (ex: si on est sur master ou tempdb, même si on requête les objets d’autres bases). Rappel du côté Read_Write ou Read_Only (notamment passage en RO si plus de place). Requête type : SELECT q.query_id, qt.query_text_id, qt.query_sql_text, SUM(rs.count_executions) AS total_execution_count FROM sys.query_store_query_text AS qt JOIN sys.query_store_query AS q ON qt.query_text_id = q.query_text_id JOIN sys.query_store_plan AS p ON q.query_id = p.query_id JOIN sys.query_store_runtime_stats AS rs ON p.plan_id = rs.plan_id GROUP BY q.query_id, qt.query_text_id, qt.query_sql_text ORDER BY total_execution_count DESC; Le Query Store de SQL Server 2016
  • 22. #JSS2015 DÉMO 3 - INVESTIGATION Usage dans SSMS et gestion
  • 23. #JSS2015 Résumé de la démo n°3 Démonstration d’un cas de parameter sniffing avec localisation facile de la requête incriminée et des deux plans. Présentation des 4 panneaux du Query Store dans SSMS : - Overall Resources comsumption (choix des indicateurs/périodes) - Top resources consumer (choix du critère du top 25, de la métrique remontée, …) - Regressed queries (périodes : récente et historique, avec remontée des requêtes dont le comportement a changé) - Tracked queries (obtenue par clic sur une requête, permet de voir côte à côte tous les plans, par exemple) Proposition de fix par création d’un index (qui crééra un 3ème plan, mais toujours instable à cause de la date trop sélective parfois), ainsi que de l’ajout du hint « optimize for unknown » dans la requête. Démonstration du Live Query Statistics Nécessite « SET STATISTICS XML ON » ou « SET STATISTICS PROFILE ON; » (session) / ou activation globale de l’XE query_post_execution_showplan (pb perfs !!!) Observation d’un cas de sur-itération d'udf et démonstration de son repérage via : select object_name(FS.object_id), FS.execution_count, FS.last_execution_time, * from sys.dm_exec_function_stats FS where FS.database_id=db_id() order by FS.execution_count DESC, FS.last_execution_time DESC Le Query Store de SQL Server 2016
  • 24. #JSS2015 Résumé de la démo n°3 – Captures d’écran Le Query Store de SQL Server 2016
  • 25. #JSS2015 DÉMO 4 - ACTION Usage dans SSMS et gestion
  • 26. #JSS2015 Résumé de la démo n°4 Possibilité de forcer des plans via l’interface d’un simple clic sur le plan déjà capturer que l’on veut garantir (qui apparaît alors avec une petite coche). Cela ne créé pas de plan guide. Si on effectue un changement qui rend ce plan impossible à appliquer, on pourra retrouver la remontée d’erreur via une requête ou le XEvent « query_store_plan_forcing_failed » : CREATE EVENT SESSION [ForcePlanQueryStore_Failed] ON SERVER ADD EVENT qds.query_store_plan_forcing_failed ADD TARGET package0.ring_buffer(SET max_memory=(102400)) WITH (STARTUP_STATE=ON) GO select P.last_force_failure_reason_desc, P.* from sys.query_store_plan P where P.query_id=45 order by P.last_execution_time DESC GO Le Query Store de SQL Server 2016
  • 27. #JSS2015 Résumé de la démo n°4 – Captures d’écran Le Query Store de SQL Server 2016
  • 28. #JSS2015 • Inconnue sur les éditions qui l’inclueront au-delà de Standard et Enterprise • Stocké dans la base du contexte … et pas activable sur master ou tempdb ! • Db_name harcodé, à une restauration, mais pas à un renommage • Supporte in-memory, mais avec restrictions (moins depuis la CTP3) Mais … Limites de la « V1 »
  • 29. #JSS2015 • Le bon plan doit avoir été exécuté pour pouvoir être forcé (comment y parvenir ? Plan_guide ??? ;-) ) • Pas de lien avec l’usager (login/machine/…) qui sont à l’origine du workload (limite potentielle dans les critères de recherche) • Attention, id de req/plan != ceux des dm_exec_* Mais possibilité de retrouver à partir du texte de req donné par le QS via la fn : sys.fn_stmt_sql_handle_from_sql_stmt Ex : Mais … Limites de la « V1 » SELECT qt.query_text_id, q.query_id, qt.query_sql_text, qt.statement_sql_handle, q.context_settings_id, qs.statement_context_id FROM sys.query_store_query_text AS qt INNER JOIN sys.query_store_query AS q ON qt.query_text_id = q.query_id CROSS APPLY sys.fn_stmt_sql_handle_from_sql_stmt (qt.query_sql_text, null) AS fn_handle_from_stmt INNER JOIN sys.dm_exec_query_stats AS qs ON fn_handle_from_stmt.statement_sql_handle = qs.statement_sql_handle;
  • 30. #JSS2015 • « Batch de nuit », valeurs de variables différentes selon la plage horaire d’exécution d’une même requête  1 plan forcé par plage horaire différente • Mise en production complexe et peu validée Changement de Compat / TraceFlag 4199  Effectuer un jeu de test dans le compat level source puis cible, comparer les résultats (dans SSMS ou via requêtes)  Eviter la régression en forçant les plans des requêtes critiques • Possibilité d’obtenir facilement une vue complète du comportement d’une production, à distance par l’intermédiaire d’une simple sauvegarde Quelques cas potentiels d’utilisation
  • 32. #JSS2015#JSS2015 Les évaluations des sessions, c’est important !! http://GUSS.Pro/jss
  • 33. #JSS2015 Merci à nos volontaires…

Notas do Editor

  1. Présentations : Conor Cunningham (Principal Software Architect at Microsoft on the SQL Team) @ PASS et @ SQLBits Borko Novakovic (Program Manager on the SQL Server team) @ webcast Channel9 David Barbarin @ blog DBI Services Isabelle Van Campenhoudt @ SQL Saturdays
  2. (Voir scripts SQL en dernière diapo)
  3. Je fais une démo, juste après sur SSMS
  4. (Voir scripts SQL en dernière diapo)
  5. (Voir scripts SQL en dernière diapo)
  6. (Voir scripts SQL en dernière diapo)
  7. On parlait des speakers, il y a une chose qui leur tient à cœur !