Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLDatabáze SQL v Microsoft Fabric
Databázový stroj SQL Serveru poskytuje přístup k informacím modulu runtime o plánech provádění dotazů. Jednou z nejdůležitějších akcí, když dojde k problému s výkonem, je získat přesné porozumění úlohu, která se provádí, a jak je řízeno využití prostředků. Proto je důležitý přístup k skutečnému plánu provádění .
I když je dokončení dotazu předpokladem pro dostupnost skutečného plánu dotazu, statistiky živého dotazu mohou poskytnout přehledy o procesu provádění dotazu v reálném čase, když data plynou z jednoho operátoru plánu dotazu do jiného. Plán živého dotazu zobrazuje celkový průběh dotazu a statistiky spouštění na úrovni operátora, jako je počet řádků vytvořených, uplynulý čas, průběh operátoru atd. Vzhledem k tomu, že tato data jsou dostupná v reálném čase, aniž by bylo nutné čekat na dokončení dotazu, jsou tyto statistiky provádění velmi užitečné pro ladění problémů s výkonem dotazů, jako jsou dlouhotrvající dotazy a dotazy, které běží neomezeně dlouho a nikdy se nedokončí.
Standardní infrastruktura profilace statistik provádění dotazů
Aby bylo možné shromažďovat informace o plánech provádění, konkrétně o počtu řádků, procesoru a využití vstupně-výstupních operací, musí být povolena infrastruktura profilu spouštění dotazů nebo standardní profilace. Následující metody shromažďování informací o plánu provádění pro cílovou relaci používají standardní infrastrukturu profilace:
- NASTAVENÍ STATISTIK XML
- NASTAVIT PROFILU STATISTIKY
- statistiky živých dotazů
Poznámka
Výběr tlačítka Zahrnout statistiku živého dotazu v aplikaci SQL Server Management Studio používá standardní infrastrukturu profilace. Pokud je v novějších verzích SQL Serveru povolená odlehčená infrastruktura profilace , používá se statistika živého dotazu místo standardní profilace při prohlížení prostřednictvím monitorování aktivit nebo přímé dotazování na sys.dm_exec_query_profiles ZOBRAZENÍ dynamické správy.
Následující metody globálního shromažďování informací o plánu provádění pro všechny relace používají standardní infrastrukturu profilace:
- Rozšířená
query_post_execution_showplanudálost. Pokud chcete povolit rozšířené události, přečtěte si téma Monitorování systémové aktivity pomocí rozšířených událostí. - Událost trasování xml showplan v sql Trace a SQL Server Profiler. Další informace o této události trasování naleznete v tématu třída událostí Showplan XML.
Při spuštění rozšířené relace událostí, která tuto událost používá query_post_execution_showplan , se naplní také sys.dm_exec_query_profiles zobrazení dynamické správy, která umožňuje statistiky živého dotazu pro všechny relace pomocí sledování aktivit nebo přímé dotazování zobrazení dynamické správy. Další informace naleznete v části Live Query Statistics.
Zjednodušená infrastruktura profilace statistik provádění dotazů
Počínaje SQL Serverem 2014 (12.x) SP2 a SQL Serverem 2016 (13.x) byla zavedena nová lehká infrastruktura profilování statistik provádění dotazů, nebo lehká profilace.
Poznámka
Nativní zkompilované uložené procedury nejsou podporovány jednoduchým profilováním.
Lehká profilovací infrastruktura pro statistiky vykonávání dotazů v1
Platí pro: SQL Server 2014 (12.x) SP2 až SQL Server 2016 (13.x).
Počínaje verzí SQL Server 2014 (12.x) SP2 a SQL Server 2016 (13.x) se snížila výkonová režie pro sběr informací o plánech provádění v důsledku zavedení zjednodušené profilace. Na rozdíl od standardní profilace neshromažďuje zjednodušená profilace informace o modulu runtime procesoru. Zjednodušená profilace ale stále shromažďuje informace o počtu řádků a vstupně-výstupních operacích.
Byla zavedena také nová query_thread_profile rozšířená událost, která používá zjednodušené profilování. Tato rozšířená událost zveřejňuje statistiky provádění jednotlivých operátorů, což umožňuje lepší přehled o výkonu jednotlivých uzlů a vláken. Ukázkovou relaci, která používá tuto rozšířenou událost, je možné nakonfigurovat jako v následujícím příkladu:
CREATE EVENT SESSION [NodePerfStats] ON SERVER
ADD EVENT sqlserver.query_thread_profile
(
ACTION (sqlos.scheduler_id,
sqlserver.database_id,
sqlserver.is_system,
sqlserver.plan_handle,
sqlserver.query_hash_signed,
sqlserver.query_plan_hash_signed,
sqlserver.server_instance_name,
sqlserver.session_id,
sqlserver.session_nt_username,
sqlserver.sql_text)
)
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
Poznámka
Další informace o výkonnostním dopadu profilace dotazů najdete v blogovém příspěvku Volba vývojářů: Průběh dotazů – kdykoli, kdekoli.
Při spuštění rozšířené relace událostí, která tuto událost používá query_thread_profile , se pak sys.dm_exec_query_profiles zobrazení dynamické správy naplní také pomocí zjednodušené profilace, která umožňuje statistiky živého dotazu pro všechny relace, pomocí monitorování aktivit nebo přímé dotazování zobrazení dynamické správy.
Zjednodušená statistika provádění dotazů – profilace infrastruktury v2
Platí pro: SQL Server 2016 (13.x) SP1 až SQL Server 2017 (14.x).
SQL Server 2016 (13.x) SP1 obsahuje revidovanou verzi zjednodušeného profilování s minimální režií. Zjednodušené profilování lze také povolit globálně pomocí příznaku trasování 7412 pro verze uvedené dříve v části Platí pro. Zavádí se nový DMF sys.dm_exec_query_statistics_xml, který vrátí plán provádění dotazů pro aktuálně zpracovávané požadavky.
Počínaje SQL Serverem 2016 (13.x) SP2 CU3 a SQL Serverem 2017 (14.x) CU11, pokud zjednodušené profilování není povolené globálně, můžete použít nový argument QUERY_PLAN_PROFILE k povolení zjednodušené profilace na úrovni dotazu pro libovolnou relaci. Když se dokončí dotaz, který obsahuje tento nový tip, je také výstup nové query_plan_profile rozšířené události, která poskytuje skutečný plán provádění XML podobný query_post_execution_showplan rozšířené události.
Poznámka
Rozšířená query_plan_profile událost také používá odlehčené profilování, i když se nepoužívá nápověda k dotazu.
Ukázkovou relaci s rozšířenou query_plan_profile událostí je možné nakonfigurovat jako v následujícím příkladu:
CREATE EVENT SESSION [PerfStats_LWP_Plan] ON SERVER
ADD EVENT sqlserver.query_plan_profile
(
ACTION (sqlos.scheduler_id,
sqlserver.database_id,
sqlserver.is_system,
sqlserver.plan_handle,
sqlserver.query_hash_signed,
sqlserver.query_plan_hash_signed,
sqlserver.server_instance_name,
sqlserver.session_id,
sqlserver.session_nt_username,
sqlserver.sql_text)
)
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
Zjednodušená statistika provádění dotazů profilace infrastruktury v3
platí pro: SQL Server 2019 (15.x) a novější verze a Azure SQL Database
SQL Server 2019 (15.x) a Azure SQL Database zahrnují nově upravenou verzi zjednodušené profilace, která shromažďuje informace o počtu řádků pro všechna spuštění. Zjednodušené profilování je ve výchozím nastavení povolené pro SQL Server 2019 (15.x) a Azure SQL Database. V SQL Serveru 2019 (15.x) a novějších verzích nemá příznak trasování 7412 žádný vliv. Zjednodušené profilování lze zakázat na úrovni databáze pomocí LIGHTWEIGHT_QUERY_PROFILING databáze: ALTER DATABASE SCOPED CONFIGURATION SET LIGHTWEIGHT_QUERY_PROFILING = OFF;.
Zavádí se nový DMF sys.dm_exec_query_plan_stats, který vrátí ekvivalent posledního známého skutečného plánu provádění pro většinu dotazů a nazývá se statistiky posledního plánu dotazu. Statistiky plánu posledního dotazu lze povolit na úrovni databáze pomocí LAST_QUERY_PLAN_STATS databáze: ALTER DATABASE SCOPED CONFIGURATION SET LAST_QUERY_PLAN_STATS = ON;.
Nová query_post_execution_plan_profile rozšířená událost shromažďuje ekvivalent skutečného plánu provádění na základě zjednodušené profilace, na rozdíl od query_post_execution_showplanstandardní profilace. SQL Server 2017 (14.x) také nabízí tuto funkci počínaje verzí CU14. Ukázkovou relaci s rozšířenou query_post_execution_plan_profile událostí je možné nakonfigurovat jako v následujícím příkladu:
CREATE EVENT SESSION [PerfStats_LWP_All_Plans] ON SERVER
ADD EVENT sqlserver.query_post_execution_plan_profile
(
ACTION (sqlos.scheduler_id,
sqlserver.database_id,
sqlserver.is_system,
sqlserver.plan_handle,
sqlserver.query_hash_signed,
sqlserver.query_plan_hash_signed,
sqlserver.server_instance_name,
sqlserver.session_id,
sqlserver.session_nt_username,
sqlserver.sql_text)
)
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
Příklad 1 – Rozšířená relace událostí s využitím standardního profilování
CREATE EVENT SESSION [QueryPlanOld] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan
(
ACTION (sqlos.task_time,
sqlserver.database_id,
sqlserver.database_name,
sqlserver.query_hash_signed,
sqlserver.query_plan_hash_signed,
sqlserver.sql_text)
)
ADD TARGET package0.event_file
(
SET filename = N'C:\Temp\QueryPlanStd.xel'
)
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
Příklad 2 – Rozšířená relace událostí s využitím zjednodušené profilace
CREATE EVENT SESSION [QueryPlanLWP] ON SERVER
ADD EVENT sqlserver.query_post_execution_plan_profile
(
ACTION (sqlos.task_time,
sqlserver.database_id,
sqlserver.database_name,
sqlserver.query_hash_signed,
sqlserver.query_plan_hash_signed,
sqlserver.sql_text)
)
ADD TARGET package0.event_file
(
SET filename = N'C:\Temp\QueryPlanLWP.xel'
)
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF
);
Pokyny k použití infrastruktury pro profilování dotazů
Následující tabulka shrnuje akce, které umožňují standardní profilaci nebo zjednodušené profilování, a to jak globálně (na úrovni serveru), tak i v jedné relaci. Obsahuje také nejstarší verzi, pro kterou je akce k dispozici.
| Scope | Standardní profilace | Odlehčená profilace |
|---|---|---|
| Globální | Rozšířená relace událostí s query_post_execution_showplan XE; Počínaje SQL Serverem 2012 (11.x) |
Příznak trasování 7412; Počínaje SQL Serverem 2016 (13.x) SP1 |
| Globální | Trasování SQL a SQL Server Profiler s událostí Showplan XML trasování |
Rozšířená relace událostí s query_thread_profile XE; Počínaje SQL Serverem 2014 (12.x) SP2 |
| Globální | N/A | Rozšířená relace událostí s query_post_execution_plan_profile XE; Počínaje SQL Serverem 2017 (14.x) CU14 a SQL Serverem 2019 (15.x) |
| Sezení | Použijte SET STATISTICS XML ON |
Použijte nápovědu QUERY_PLAN_PROFILE dotazu společně s relací rozšířených událostí s query_plan_profile XE; Počínaje SQL Serverem 2016 (13.x) SP2 CU3 a SQL Serverem 2017 (14.x) CU11 |
| Sezení | Použijte SET STATISTICS PROFILE ON |
N/A |
| Sezení | Vyberte tlačítko Live Query Statistics (Statistika živého dotazu ) v aplikaci SSMS; Počínaje SQL Serverem 2014 (12.x) SP2 | N/A |
Poznámky
Důležitý
Vzhledem k možnému narušení náhodného přístupu při provádění uložené procedury monitorování, která odkazuje na sys.dm_exec_query_statistics_xml, ujistěte se, KB 4078596 je nainstalován v SQL Server 2016 (13.x) a SQL Server 2017 (14.x).
Počínaje zjednodušenou profilací verze 2 a nízkou režií může jakýkoli server, který ještě není vázán na procesor, spouštět odlehčené profilace nepřetržitě a umožnit odborníkům v databázi kdykoli klepnout na jakékoli spuštění, například pomocí monitorování aktivit nebo přímé dotazování sys.dm_exec_query_profiles, a získat plán dotazu se statistikami modulu runtime.
Další informace o výkonnostním dopadu profilace dotazů najdete v blogovém příspěvku Volba vývojářů: Průběh dotazů – kdykoli, kdekoli.
Rozšířené události, které používají odlehčenou profilaci, používají informace ze standardní profilace v případě, že je už povolená standardní infrastruktura profilace. Například rozšířená relace událostí používající query_post_execution_showplan je spuštěná a spustí se jiná relace používající query_post_execution_plan_profile. Druhá relace stále používá informace ze standardní profilace.
Poznámka
Na SQL Serveru 2017 (14.x) je zjednodušené profilování ve výchozím nastavení vypnuté, ale aktivuje se při spuštění rozšířeného trasování query_post_execution_plan_profile událostí a po zastavení trasování se znovu deaktivuje. V důsledku toho platí, že pokud se rozšířené trasování událostí založené na query_post_execution_plan_profile často spouští a zastavuje v instanci SQL Serveru 2017 (14.x), měli byste aktivovat lehké profilování na globální úrovni s příznakem trasování 7412, abyste se vyhnuli režii opakované aktivace/deaktivace.
Související obsah
- Monitorování a ladění výkonu
- Nástroje pro monitorování výkonu a ladění
- Open Activity Monitor in SQL Server Management Studio (SSMS)
- Monitorování aktivit
- Monitorování výkonu s využitím úložiště dotazů
- Monitorování systémové aktivity pomocí rozšířených událostí
- sys.dm_exec_query_statistics_xml
- sys.dm_exec_query_profiles
- Nastavení příznaků trasování pomocí DBCC TRACEON (Transact-SQL)
- Odkaz na operátory logického a fyzického plánu zobrazení
- skutečný plán provádění
- statistiky živých dotazů