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
azure SQL Managed Instance
Tento článek popisuje, jak můžete monitorovat výkon nativně zkompilovaných uložených procedur a dalších nativně kompilovaných modulů T-SQL.
Použití rozšířených událostí
Pro trasování spuštění dotazu použijte rozšířenou událost sp_statement_completed. Vytvořte rozšířenou relaci událostí s touto událostí, volitelně s filtrem na object_id pro konkrétní nativně kompilovanou uloženou proceduru. Rozšířená událost je vyvolána po provedení každého dotazu. Čas a doba trvání procesoru hlášené rozšířenou událostí udává, kolik procesoru dotaz použil a čas spuštění. Nativně zkompilovaná uložená procedura, která používá hodně času procesoru, může mít problémy s výkonem.
K prozkoumání dotazu lze použít line_numberspolu s object_id v rozšířené události. Následující dotaz lze použít k načtení definice procedury. Číslo řádku lze použít k identifikaci dotazu v rámci definice:
SELECT [definition]
FROM sys.sql_modules
WHERE object_id=object_id;
Použití zobrazení správy dat a úložiště dotazů
SQL Server a Azure SQL Database podporují shromažďování statistik provádění pro nativně zkompilované uložené procedury, a to jak na úrovni procedury, tak na úrovni dotazu. Shromažďování statistik provádění není ve výchozím nastavení povolené kvůli dopadu na výkon.
Statistika provádění se odráží v systémových zobrazeních sys.dm_exec_procedure_stats a sys.dm_exec_query_stats, stejně jako v úložiště dotazů.
Statistiky výkonu Procedure-Level
SQL Server: Povolte nebo zakažte shromažďování statistik v nativně kompilovaných uložených procedurách na úrovni procedury pomocí sys.sp_xtp_control_proc_exec_stats (Transact-SQL). Následující příkaz umožňuje kolekci statistik provádění na úrovni procedury pro všechny nativně zkompilované moduly T-SQL v aktuální instanci:
EXEC sys.sp_xtp_control_proc_exec_stats 1
cs-CZ: Azure SQL Database a SQL Serveru: Povolte nebo zakažte shromažďování statistik na úrovni nativně kompilovaných uložených procedur pomocí možnosti konfigurace s oborem databázeXTP_PROCEDURE_EXECUTION_STATISTICS
. Následující příkaz umožňuje kolekci statistik provádění na úrovni procedury pro všechny nativně kompilované moduly T-SQL v aktuální databázi:
ALTER DATABASE SCOPED CONFIGURATION SET XTP_PROCEDURE_EXECUTION_STATISTICS = ON;
Statistika provedení Query-Level
SQL Server: Povolte nebo zakažte shromažďování statistik v nativně kompilovaných uložených procedurách na úrovni dotazu pomocí sys.sp_xtp_control_query_exec_stats (Transact-SQL). Následující příkaz umožňuje kolekci statistik provádění na úrovni dotazu pro všechny nativně kompilované moduly T-SQL v aktuální instanci:
EXEC sys.sp_xtp_control_query_exec_stats 1
Azure SQL Database a SQL Server: Povolte nebo zakažte shromažďování statistik nativně kompilovaných uložených procedur na úrovni jednotlivých příkazů prostřednictvím možnosti konfigurace s oborem databáze XTP_QUERY_EXECUTION_STATISTICS
. Následující příkaz umožňuje kolekci statistik provádění na úrovni dotazu pro všechny nativně kompilované moduly T-SQL v aktuální databázi:
ALTER DATABASE SCOPED CONFIGURATION SET XTP_QUERY_EXECUTION_STATISTICS = ON;
Ukázkové dotazy
Jakmile shromáždíte statistiky, můžete na proceduru s sys.dm_exec_procedure_stats (Transact-SQL) dotazovat statistiky provádění pro nativně zkompilované uložené procedury a dotazy s sys.dm_exec_query_stats (Transact-SQL).
Následující dotaz vrátí názvy procedur a statistiky provádění pro nativně zkompilované uložené procedury v aktuální databázi po kolekci statistik:
SELECT object_id, object_name(object_id) AS 'object name',
cached_time, last_execution_time, execution_count,
total_worker_time, last_worker_time,
min_worker_time, max_worker_time,
total_elapsed_time, last_elapsed_time,
min_elapsed_time, max_elapsed_time
FROM sys.dm_exec_procedure_stats
WHERE database_id = DB_ID()
AND object_id IN (SELECT object_id FROM sys.sql_modules WHERE uses_native_compilation = 1)
ORDER BY total_worker_time desc;
Následující dotaz vrátí text dotazu a statistiku provádění pro všechny dotazy v nativně zkompilovaných uložených procedurách v aktuální databázi, pro které byly shromážděny statistiky seřazené podle celkového času pracovního procesu v sestupném pořadí:
SELECT st.objectid,
OBJECT_NAME(st.objectid) AS 'object name',
SUBSTRING(
st.text,
(qs.statement_start_offset/2) + 1,
((qs.statement_end_offset-qs.statement_start_offset)/2) + 1
) AS 'query text',
qs.creation_time, qs.last_execution_time, qs.execution_count,
qs.total_worker_time, qs.last_worker_time, qs.min_worker_time,
qs.max_worker_time, qs.total_elapsed_time, qs.last_elapsed_time,
qs.min_elapsed_time, qs.max_elapsed_time
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(sql_handle) st
WHERE database_id = DB_ID()
AND object_id IN (SELECT object_id FROM sys.sql_modules WHERE uses_native_compilation = 1)
ORDER BY total_worker_time desc;
Plány provádění dotazů
Nativně zkompilované uložené procedury podporují SHOWPLAN_XML (odhadovaný plán provádění). Odhadovaný plán provádění je možné použít ke kontrole plánu dotazu a k nalezení případných problémů s chybným plánem. Mezi běžné důvody špatných plánů patří:
Statistiky nebyly aktualizovány před vytvořením procedury.
Chybějící indexy
Kód Showplan XML se získá spuštěním následujícího jazyka Transact-SQL:
SET SHOWPLAN_XML ON
GO
EXEC my_proc
GO
SET SHOWPLAN_XML OFF
GO
Případně v aplikaci SQL Server Management Studio vyberte název procedury a klikněte na Zobrazit odhadovaný plán provádění.
Odhadovaný plán provádění pro nativně zkompilované uložené procedury zobrazuje operátory dotazu a výrazy pro dotazy v postupu. SQL Server 2014 (12.x) nepodporuje všechny atributy SHOWPLAN_XML pro nativně kompilované uložené procedury. Například atributy související s náklady optimalizátoru dotazů nejsou součástí SHOWPLAN_XML postupu.