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:
Poznámka
Výběr tlačítka Zahrnout statistiku živého dotazu v aplikaci SQL Server Management Studio používá standardní infrastrukturu profilace. V novějších verzích SQL Serveru platí, že pokud je povolena infrastruktura odlehčeného profilování, používají se místo standardního profilování statistiky živých dotazů, a to při zobrazení v Monitoru aktivity nebo při přímém dotazování na DMV sys.dm_exec_query_profiles.
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í relace rozšířených událostí, která používá událost query_post_execution_showplan, se také naplní zobrazení dynamické správy (DMV) sys.dm_exec_query_profiles, což umožňuje statistiky živých dotazů pro všechny relace pomocí nástroje Activity Monitor nebo přímým dotazováním tohoto zobrazení DMV. 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á používá událost query_thread_profile, se také pomocí odlehčeného profilování naplní zobrazení dynamické správy sys.dm_exec_query_profiles, což umožňuje statistiky živých dotazů pro všechny relace pomocí nástroje Activity Monitor nebo přímým dotazováním na toto zobrazení dynamické správy.
Zjednodušená statistika provádění dotazů – profilace infrastruktury v2
Platí pro: od SQL Server 2016 (13.x) SP1 po 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 není zjednodušené profilování povoleno globálně, lze k povolení zjednodušeného profilování na úrovni dotazu v libovolné relaci použít nový argument USE HINT query hintQUERY_PLAN_PROFILE. Když se dokončí dotaz, který obsahuje tento nový hint, vygeneruje se také nová rozšířená událost query_plan_profile, která poskytuje skutečný plán spuštění ve formátu XML podobně jako rozšířená událost query_post_execution_showplan.
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 používající rozšířenou událost query_plan_profile lze nakonfigurovat podle následujícího 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. Odlehčené profilování lze zakázat na úrovni databáze pomocí LIGHTWEIGHT_QUERY_PROFILINGkonfigurace v rozsahu 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 posledního plánu dotazu lze povolit na úrovni databáze pomocí LAST_QUERY_PLAN_STATSkonfigurace s rozsahem databáze: ALTER DATABASE SCOPED CONFIGURATION SET LAST_QUERY_PLAN_STATS = ON;.
Nová rozšířená událost query_post_execution_plan_profile zachycuje ekvivalent skutečného plánu provádění na základě zjednodušené profilace, na rozdíl od query_post_execution_showplan, která používá standardní profilaci. SQL Server 2017 (14.x) také nabízí tuto funkci počínaje verzí CU14. Ukázkovou relaci využívající rozšířenou událost query_post_execution_plan_profile lze nakonfigurovat například takto:
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í | SQL Trace a SQL Server Profiler s událostí trasování Showplan XML |
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 dotazu QUERY_PLAN_PROFILE společně s relací Extended Events s XE query_plan_profile; Od SQL Serveru 2016 (13.x) SP2 CU3 a SQL Serveru 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).
Od verze 2 má odlehčené profilování nízkou režii, takže na každém serveru, který už není omezen výkonem procesoru, může běžet nepřetržitě a databázovým specialistům umožňuje kdykoli přistupovat k libovolnému právě běžícímu provádění, například pomocí Monitoru aktivity nebo přímým dotazem na sys.dm_exec_query_profiles, a získat plán dotazu se statistikami za běhu.
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, pokud je již povolena 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ího profilování.
Poznámka
V SQL Serveru 2017 (14.x) je odlehčené profilování ve výchozím nastavení vypnuté, ale aktivuje se při spuštění trasování Extended Events využívajícího query_post_execution_plan_profile a po zastavení trasování se opět 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ů