복붙노트

[SQL] SQL 쿼리는 SQL Server의 교착 상태를 얻기 위해 2008 [중복]

SQL

SQL 쿼리는 SQL Server의 교착 상태를 얻기 위해 2008 [중복]

SQLServer에 자동으로 모든 교착 상태를 기록합니다. 누구의 도움 나 최근의 이벤트를 수집되고 교착 상태 데이터를 캡처합니다 SQL 쿼리를 얻을 수 있습니다.

내 개발 활동을위한 SQL Server 2008 R2를 사용하고 있습니다.

감사 및 감사 산토 쉬 쿠마 논문

해결법

  1. ==============================

    1.당신은 교착 상태 그래프를 사용하여 로그 파일에서 필요한 정보를 수집 할 수 있습니다.

    당신은 교착 상태 그래프를 사용하여 로그 파일에서 필요한 정보를 수집 할 수 있습니다.

    내가 제안 할 수있는 유일한 다른 방법은 (곧되지되는) EXEC는 sp_lock, EXEC SP_WHO2 또는는 sys.dm_tran_locks 테이블을 사용하여 정보를 파기합니다.

    SELECT  L.request_session_id AS SPID, 
        DB_NAME(L.resource_database_id) AS DatabaseName,
        O.Name AS LockedObjectName, 
        P.object_id AS LockedObjectId, 
        L.resource_type AS LockedResource, 
        L.request_mode AS LockType,
        ST.text AS SqlStatementText,        
        ES.login_name AS LoginName,
        ES.host_name AS HostName,
        TST.is_user_transaction as IsUserTransaction,
        AT.name as TransactionName,
        CN.auth_scheme as AuthenticationMethod
    FROM    sys.dm_tran_locks L
        JOIN sys.partitions P ON P.hobt_id = L.resource_associated_entity_id
        JOIN sys.objects O ON O.object_id = P.object_id
        JOIN sys.dm_exec_sessions ES ON ES.session_id = L.request_session_id
        JOIN sys.dm_tran_session_transactions TST ON ES.session_id = TST.session_id
        JOIN sys.dm_tran_active_transactions AT ON TST.transaction_id = AT.transaction_id
        JOIN sys.dm_exec_connections CN ON CN.session_id = ES.session_id
        CROSS APPLY sys.dm_exec_sql_text(CN.most_recent_sql_handle) AS ST
    WHERE   resource_database_id = db_id()
    ORDER BY L.request_session_id
    

    http://www.sqlmag.com/article/sql-server-profiler/gathering-deadlock-information-with-deadlock-graph

    http://weblogs.sqlteam.com/mladenp/archive/2008/04/29/SQL-Server-2005-Get-full-information-about-transaction-locks.aspx

  2. ==============================

    2.추적을 (당신이 반드시 프로파일이 필요하지 않습니다) 사용하지 않고 캡처 교착 상태 그래프하기 위해, 당신은 오류 로그에 교착 상태 정보를 기록합니다 추적 플래그 1222이을 활성화 할 수 있습니다. 당신이 좋은 교착 상태 그래프 사진을 얻을되지 않도록 그러나, 오류 로그, 텍스트 - 당신은 그것을 알아 내기 위해 교착 상태의 텍스트를 읽을해야합니다.

    추적을 (당신이 반드시 프로파일이 필요하지 않습니다) 사용하지 않고 캡처 교착 상태 그래프하기 위해, 당신은 오류 로그에 교착 상태 정보를 기록합니다 추적 플래그 1222이을 활성화 할 수 있습니다. 당신이 좋은 교착 상태 그래프 사진을 얻을되지 않도록 그러나, 오류 로그, 텍스트 - 당신은 그것을 알아 내기 위해 교착 상태의 텍스트를 읽을해야합니다.

    나는 시작 추적 플래그 (이 경우이 서비스를 다시 시작해야합니다)로이 설정합니다. 그러나 다음 글로벌 추적 플래그 명령을 사용하여 당신은 단지 서비스의 현재 실행중인 인스턴스를 실행할 수 있습니다 (다시 시작할 필요는 없지만, 이는 다음에 다시 시작할 때 다시 시작되지 않습니다)

    DBCC TRACEON(1222, -1);
    

    빠른 검색이 튜토리얼을 산출 :

    http://www.mssqltips.com/sqlservertip/2130/finding-sql-server-deadlocks-using-trace-flag-1222/

    또한 시스템이 교착 상태가 많이 발생하는 경우,이 정말 당신의 오류 로그를 망치 할 수 있으며, 다른 중요한 오류를 익사, 소음이 꽤 많이 될 수 있습니다.

    당신은 타사 도구를 모니터링 생각이 있나요? SQL 센트리 성능 관리자는, 예를 들어, 개체를 보여주는, 훨씬 더 좋은 교착 상태 그래프를 가지고 / 인덱스 이름뿐만 아니라 잠금이 촬영 된 순서. 보너스로,이는 등, 자신의 흔적을 실행, 구성 추적 플래그 필요없이 자동으로 모니터링 서버에서 당신을 위해 캡처 :

    면책 조항 : SQL 센트리에 대한 I 작동합니다.

  3. from https://stackoverflow.com/questions/12422986/sql-query-to-get-the-deadlocks-in-sql-server-2008 by cc-by-sa and MIT license