it-swarm-eu.dev

Oznámení o dlouhodobém dotazu nebo zablokování v SQL Server 2008 R2?

Chtěl bych vědět, jestli existuje způsob, jak poslat upozornění na zablokování? Pokud ano, jaké dotazy by byly vyžadovány. Chápu, že SQL Server se stará o zablokování, jednoduše bych chtěl informace o příslušných dotazech.

Při určování dlouhodobých dotazů jsem našel následující:

SELECT 
    creation_time
    ,last_execution_time
    ,total_physical_reads
    ,total_logical_reads
    ,total_logical_writes
    , execution_count
    , total_worker_time
    , total_elapsed_time
    , total_elapsed_time / execution_count avg_elapsed_time
    ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
    ((CASE statement_end_offset
        WHEN -1 THEN DATALENGTH(st.text)
        ELSE qs.statement_end_offset END
    - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st  
where total_elapsed_time >= 300000000 --5 min
ORDER BY total_elapsed_time / execution_count DESC; 

Chtěl bych vědět, zda je výše uvedený způsob správný, nebo existuje lepší způsob, jak zjistit, zda nějaký dotaz trvá déle než určitý interval, řekněme 5 minut, jak je uvedeno?

Dík

15
Hasanain

S SQL 2008 je nová funkce, kterou můžete použít pro uváznutí a dlouhé dotazy na dotazy: rozšířené události . Rozšířené události jsou objekty nízké úrovně a spotřebovávají mnohem méně prostředků než jiné metody, jako je profilování/trasování, upozornění atd. ...

Pro použití rozšířených událostí s deadlocks podívejte se na toto příspěvek Jonathan Kehayias , SQL server MVP.

Pro použití rozšířených událostí k nalezení long running queries, podívejte se na tento podrobný příspěvek od Pinal Dave , další SQL server MVP.

8
StanleyJohns

Můžete nakonfigurovat výstrahy pro obě z nich pomocí agenta SQL. Vytvořte nové upozornění a vyberte typ „Výstraha stavu výkonu serveru SQL“

Pro dlouhodobé dotazy zvolte Objekt "MSSQL $ InstanceName: Transactions" a Counter: Longest Transaction Running Time. Nakonfigurujte hodnoty a možnosti upozornění na upozornění a je dobré jít.

Pro zablokování je objekt „MSSQL $ InstanceName: Locks“ a čítač je „Number of Deadlock/sec“

Pokud chcete podrobnější kontrolu oznámení o zablokování, zkontrolujte toto: http://www.sqlservercentral.com/articles/Administration/3243/

10
FortyNine

Pokud máte SQL2008, rád bych doporučil návrh @ StanleyJohns. Rozšířené události stojí za to se s nimi seznámit jako s diagnostickým nástrojem a Jonathonova řada An XEvent a Day je skvělé místo pro zahájení.

Alternativou pro zablokování je povolit příznaky trasování 1204 a 1222 , které vypíší informace o zablokování do protokolu chyb SQL. Povolte obojí, abyste získali informace ve dvou různých formátech, což může usnadnit pochopení složitých řetězců zablokování.

4