Sdílet prostřednictvím


Monitorování výkonu nativně kompilovaných uložených procedur

platí pro:SQL ServerAzure SQL Databaseazure 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.

Viz také

nativně kompilované uložené procedury