SlideShare una empresa de 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 :

Más contenido relacionado

La actualidad más candente

Azure Camp 9 Décembre 2014 - slides Keynote
Azure Camp 9 Décembre 2014 - slides KeynoteAzure Camp 9 Décembre 2014 - slides Keynote
Azure Camp 9 Décembre 2014 - slides KeynoteMicrosoft
 
Premiers pas avec Microsoft Azure Search
Premiers pas avec Microsoft Azure SearchPremiers pas avec Microsoft Azure Search
Premiers pas avec Microsoft Azure SearchMCKLMT
 
Azure Data Lake, le big data 2.0 (Global Azure Bootcamp Paris 2017)
Azure Data Lake, le big data 2.0 (Global Azure Bootcamp Paris 2017)Azure Data Lake, le big data 2.0 (Global Azure Bootcamp Paris 2017)
Azure Data Lake, le big data 2.0 (Global Azure Bootcamp Paris 2017)Jean-Pierre Riehl
 
DataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le CloudDataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le CloudVictor Coustenoble
 
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...MongoDB
 
DataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache CassandraDataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache CassandraVictor Coustenoble
 
SharePoint et SQL Server sur Windows Azure
SharePoint et SQL Server sur Windows AzureSharePoint et SQL Server sur Windows Azure
SharePoint et SQL Server sur Windows AzureMicrosoft Technet France
 
SQL Saturday Paris 2015 - Polybase
SQL Saturday Paris 2015 - PolybaseSQL Saturday Paris 2015 - Polybase
SQL Saturday Paris 2015 - PolybaseRomain Casteres
 
Cloud et BI, quelle architecture pour 2014 ?
Cloud et BI, quelle architecture pour 2014 ?Cloud et BI, quelle architecture pour 2014 ?
Cloud et BI, quelle architecture pour 2014 ?Jean-Pierre Riehl
 
Panorama des offres NoSQL disponibles dans Azure
Panorama des offres NoSQL disponibles dans AzurePanorama des offres NoSQL disponibles dans Azure
Panorama des offres NoSQL disponibles dans AzureMicrosoft Décideurs IT
 
Azure Data Lake, le Big Data 2.0 - SQL Saturday Montreal 2017
Azure Data Lake, le Big Data 2.0 - SQL Saturday Montreal 2017Azure Data Lake, le Big Data 2.0 - SQL Saturday Montreal 2017
Azure Data Lake, le Big Data 2.0 - SQL Saturday Montreal 2017Jean-Pierre Riehl
 
J1 T1 1 - Azure Data Platform, quelle solution pour quel usage - Charles-Hen...
J1 T1 1 - Azure Data Platform, quelle solution pour quel usage  - Charles-Hen...J1 T1 1 - Azure Data Platform, quelle solution pour quel usage  - Charles-Hen...
J1 T1 1 - Azure Data Platform, quelle solution pour quel usage - Charles-Hen...MS Cloud Summit
 
myLittleAdmin and myLittleBackup Presentation
myLittleAdmin and myLittleBackup PresentationmyLittleAdmin and myLittleBackup Presentation
myLittleAdmin and myLittleBackup PresentationElian Chrebor
 
DataStax et Apache Cassandra pour la gestion des flux IoT
DataStax et Apache Cassandra pour la gestion des flux IoTDataStax et Apache Cassandra pour la gestion des flux IoT
DataStax et Apache Cassandra pour la gestion des flux IoTVictor Coustenoble
 
Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?Victor Coustenoble
 
MySQL資料庫設計規劃與phpMyAdmin
MySQL資料庫設計規劃與phpMyAdminMySQL資料庫設計規劃與phpMyAdmin
MySQL資料庫設計規劃與phpMyAdmin資彥 解
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysVictor Coustenoble
 
Livecast: Mettez à disposition de vos partenaires une base de données SQL Azure
Livecast: Mettez à disposition de vos partenaires une base de données SQL AzureLivecast: Mettez à disposition de vos partenaires une base de données SQL Azure
Livecast: Mettez à disposition de vos partenaires une base de données SQL AzureMicrosoft Technet France
 

La actualidad más candente (20)

Azure Camp 9 Décembre 2014 - slides Keynote
Azure Camp 9 Décembre 2014 - slides KeynoteAzure Camp 9 Décembre 2014 - slides Keynote
Azure Camp 9 Décembre 2014 - slides Keynote
 
Premiers pas avec Microsoft Azure Search
Premiers pas avec Microsoft Azure SearchPremiers pas avec Microsoft Azure Search
Premiers pas avec Microsoft Azure Search
 
Azure Data Lake, le big data 2.0 (Global Azure Bootcamp Paris 2017)
Azure Data Lake, le big data 2.0 (Global Azure Bootcamp Paris 2017)Azure Data Lake, le big data 2.0 (Global Azure Bootcamp Paris 2017)
Azure Data Lake, le big data 2.0 (Global Azure Bootcamp Paris 2017)
 
DataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le CloudDataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le Cloud
 
DataStax Enterprise BBL
DataStax Enterprise BBLDataStax Enterprise BBL
DataStax Enterprise BBL
 
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
Morning with MongoDB Paris 2012 - Cas d'usages courant en entreprise. Présent...
 
DataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache CassandraDataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache Cassandra
 
SharePoint et SQL Server sur Windows Azure
SharePoint et SQL Server sur Windows AzureSharePoint et SQL Server sur Windows Azure
SharePoint et SQL Server sur Windows Azure
 
SQL Saturday Paris 2015 - Polybase
SQL Saturday Paris 2015 - PolybaseSQL Saturday Paris 2015 - Polybase
SQL Saturday Paris 2015 - Polybase
 
Cloud et BI, quelle architecture pour 2014 ?
Cloud et BI, quelle architecture pour 2014 ?Cloud et BI, quelle architecture pour 2014 ?
Cloud et BI, quelle architecture pour 2014 ?
 
Panorama des offres NoSQL disponibles dans Azure
Panorama des offres NoSQL disponibles dans AzurePanorama des offres NoSQL disponibles dans Azure
Panorama des offres NoSQL disponibles dans Azure
 
Azure Data Lake, le Big Data 2.0 - SQL Saturday Montreal 2017
Azure Data Lake, le Big Data 2.0 - SQL Saturday Montreal 2017Azure Data Lake, le Big Data 2.0 - SQL Saturday Montreal 2017
Azure Data Lake, le Big Data 2.0 - SQL Saturday Montreal 2017
 
J1 T1 1 - Azure Data Platform, quelle solution pour quel usage - Charles-Hen...
J1 T1 1 - Azure Data Platform, quelle solution pour quel usage  - Charles-Hen...J1 T1 1 - Azure Data Platform, quelle solution pour quel usage  - Charles-Hen...
J1 T1 1 - Azure Data Platform, quelle solution pour quel usage - Charles-Hen...
 
myLittleAdmin and myLittleBackup Presentation
myLittleAdmin and myLittleBackup PresentationmyLittleAdmin and myLittleBackup Presentation
myLittleAdmin and myLittleBackup Presentation
 
DataStax et Apache Cassandra pour la gestion des flux IoT
DataStax et Apache Cassandra pour la gestion des flux IoTDataStax et Apache Cassandra pour la gestion des flux IoT
DataStax et Apache Cassandra pour la gestion des flux IoT
 
Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?
 
MySQL資料庫設計規劃與phpMyAdmin
MySQL資料庫設計規劃與phpMyAdminMySQL資料庫設計規劃與phpMyAdmin
MySQL資料庫設計規劃與phpMyAdmin
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft Techdays
 
Livecast: Mettez à disposition de vos partenaires une base de données SQL Azure
Livecast: Mettez à disposition de vos partenaires une base de données SQL AzureLivecast: Mettez à disposition de vos partenaires une base de données SQL Azure
Livecast: Mettez à disposition de vos partenaires une base de données SQL Azure
 
Aws vs azure
Aws vs azureAws vs azure
Aws vs azure
 

Similar a [JSS2015] Query Store

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
 
SQL Server : Tuning et Troubleshooting
SQL Server : Tuning et TroubleshootingSQL Server : Tuning et Troubleshooting
SQL Server : Tuning et TroubleshootingMicrosoft
 
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
 
Deep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerDeep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerMicrosoft
 
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
 
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
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Microsoft
 

Similar a [JSS2015] Query Store (20)

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
 
SQL Server : Tuning et Troubleshooting
SQL Server : Tuning et TroubleshootingSQL Server : Tuning et Troubleshooting
SQL Server : Tuning et Troubleshooting
 
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
 
Deep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerDeep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL Server
 
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é
 
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
 
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
 

Más de GUSS

GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS
 
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)GUSS
 
JSS2015 - Machine Learning like a boss
JSS2015 - Machine Learning like a bossJSS2015 - Machine Learning like a boss
JSS2015 - Machine Learning like a bossGUSS
 
JSS2015 - Keynote jour 2
JSS2015 - Keynote jour 2JSS2015 - Keynote jour 2
JSS2015 - Keynote jour 2GUSS
 
[JSS2015] Power BI Dev
[JSS2015] Power BI Dev[JSS2015] Power BI Dev
[JSS2015] Power BI DevGUSS
 
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch TablesGUSS
 
[JSS2015] Power BI: Nouveautés archi et hybrides
[JSS2015] Power BI: Nouveautés archi et hybrides[JSS2015] Power BI: Nouveautés archi et hybrides
[JSS2015] Power BI: Nouveautés archi et hybridesGUSS
 
[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale out[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale outGUSS
 
[JSS2015] In memory and operational analytics
[JSS2015] In memory and operational analytics[JSS2015] In memory and operational analytics
[JSS2015] In memory and operational analyticsGUSS
 
[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocks[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocksGUSS
 
[JSS2015] Architectures Lambda avec Azure Stream Analytics
[JSS2015] Architectures Lambda avec Azure Stream Analytics [JSS2015] Architectures Lambda avec Azure Stream Analytics
[JSS2015] Architectures Lambda avec Azure Stream Analytics GUSS
 
[JSS2015] - Azure automation
[JSS2015] - Azure automation[JSS2015] - Azure automation
[JSS2015] - Azure automationGUSS
 
[JSS2015] AlwaysOn 2016
[JSS2015] AlwaysOn 2016[JSS2015] AlwaysOn 2016
[JSS2015] AlwaysOn 2016GUSS
 
[JSS2015] x events
[JSS2015] x events[JSS2015] x events
[JSS2015] x eventsGUSS
 
JSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big DataJSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big DataGUSS
 
JSS2014 – Infrastructure et Always-On
JSS2014 – Infrastructure et Always-OnJSS2014 – Infrastructure et Always-On
JSS2014 – Infrastructure et Always-OnGUSS
 
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...GUSS
 
Journées SQL Server 2014 - Keynote Jour 1
Journées SQL Server 2014 - Keynote Jour 1Journées SQL Server 2014 - Keynote Jour 1
Journées SQL Server 2014 - Keynote Jour 1GUSS
 
JSS2014 – Le grand tour de Power BI
JSS2014 – Le grand tour de Power BIJSS2014 – Le grand tour de Power BI
JSS2014 – Le grand tour de Power BIGUSS
 
JSS2014 – Cloud et BI, quelle architecture pour 2014 ?
JSS2014 – Cloud et BI, quelle architecture pour 2014 ?JSS2014 – Cloud et BI, quelle architecture pour 2014 ?
JSS2014 – Cloud et BI, quelle architecture pour 2014 ?GUSS
 

Más de GUSS (20)

GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
 
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)
Bots & Cognitive Intelligence (Meetup GUSS & AZUG FR)
 
JSS2015 - Machine Learning like a boss
JSS2015 - Machine Learning like a bossJSS2015 - Machine Learning like a boss
JSS2015 - Machine Learning like a boss
 
JSS2015 - Keynote jour 2
JSS2015 - Keynote jour 2JSS2015 - Keynote jour 2
JSS2015 - Keynote jour 2
 
[JSS2015] Power BI Dev
[JSS2015] Power BI Dev[JSS2015] Power BI Dev
[JSS2015] Power BI Dev
 
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
[JSS2015] Nouveautés SQL Server 2016:Sécurité,Temporal & Stretch Tables
 
[JSS2015] Power BI: Nouveautés archi et hybrides
[JSS2015] Power BI: Nouveautés archi et hybrides[JSS2015] Power BI: Nouveautés archi et hybrides
[JSS2015] Power BI: Nouveautés archi et hybrides
 
[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale out[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale out
 
[JSS2015] In memory and operational analytics
[JSS2015] In memory and operational analytics[JSS2015] In memory and operational analytics
[JSS2015] In memory and operational analytics
 
[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocks[JSS2015] Eradiction des deadlocks
[JSS2015] Eradiction des deadlocks
 
[JSS2015] Architectures Lambda avec Azure Stream Analytics
[JSS2015] Architectures Lambda avec Azure Stream Analytics [JSS2015] Architectures Lambda avec Azure Stream Analytics
[JSS2015] Architectures Lambda avec Azure Stream Analytics
 
[JSS2015] - Azure automation
[JSS2015] - Azure automation[JSS2015] - Azure automation
[JSS2015] - Azure automation
 
[JSS2015] AlwaysOn 2016
[JSS2015] AlwaysOn 2016[JSS2015] AlwaysOn 2016
[JSS2015] AlwaysOn 2016
 
[JSS2015] x events
[JSS2015] x events[JSS2015] x events
[JSS2015] x events
 
JSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big DataJSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big Data
 
JSS2014 – Infrastructure et Always-On
JSS2014 – Infrastructure et Always-OnJSS2014 – Infrastructure et Always-On
JSS2014 – Infrastructure et Always-On
 
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...
JSS2014 – Comment réaliser et administrer un portail BI avec SharePoint, SQL ...
 
Journées SQL Server 2014 - Keynote Jour 1
Journées SQL Server 2014 - Keynote Jour 1Journées SQL Server 2014 - Keynote Jour 1
Journées SQL Server 2014 - Keynote Jour 1
 
JSS2014 – Le grand tour de Power BI
JSS2014 – Le grand tour de Power BIJSS2014 – Le grand tour de Power BI
JSS2014 – Le grand tour de Power BI
 
JSS2014 – Cloud et BI, quelle architecture pour 2014 ?
JSS2014 – Cloud et BI, quelle architecture pour 2014 ?JSS2014 – Cloud et BI, quelle architecture pour 2014 ?
JSS2014 – Cloud et BI, quelle architecture pour 2014 ?
 

[JSS2015] Query Store

  • 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 del 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 !