데이터베이스에서 최근에 실행 된 모든 쿼리 찾기 비슷해 보였습니다. SELECT deqs.last_execution_time

[저는 초급 T-SQL 프로그래머입니다]
[.. 그리고 올바른 스택 교환 사이트에 있습니다.]

내가 실행 한 모든 쿼리 목록을 얻고 싶습니다 (최소한, 오늘 아침부터 실행 한 쿼리). 쿼리 실행 시간에 대한 보고서를 작성해야합니다.

온라인 검색으로 유용한 정보를 얻지 못했습니다. 온라인에서 찾은 유일한 쿼리는 거의 비슷해 보였습니다.

SELECT
    deqs.last_execution_time AS [Time],
    dest.TEXT AS [Query]
 FROM
    sys.dm_exec_query_stats AS deqs
    CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY
    deqs.last_execution_time DESC

이 쿼리는 몇 가지 이상한 결과를 반환했습니다 (대부분의 sproc). 또한이 모든 결과는 오늘 오후부터 실행 된 쿼리를 보여줍니다 (아침부터 쿼리가 필요합니다).

이전 질문에서 아무것도 찾을 수 없었습니다 (유사한 질문이 이미 요청 된 경우 알려주세요).

SQL Profiler와 관련하여 몇 가지 제안을 보았지만 이미 추적을 시작한 경우에만 Profiler가 도움이 될 것입니다 (잘못 된 경우 수정).

누군가 아침부터 데이터베이스에서 실행 된 모든 쿼리 목록 (쿼리 실행 시간 포함)을 얻는 방법을 제안 할 수 있습니까?

[어떻게 든 쿼리를 실행 한 사용자의 사용자 이름을 얻을 수 있다면 도움이 될 것입니다 (필수 아님)]



답변

이 쿼리는 몇 가지 이상한 결과를 반환했습니다 (대부분의 sproc). 또한이 모든 결과는 오늘 오후부터 실행 된 쿼리를 보여줍니다 (아침부터 쿼리가 필요합니다).

프로 시저 캐시를보고 있고 아침에 사용 된 계획이 더 이상 존재하지 않을 수 있기 때문입니다 (메모리 부족, 서버 / 인스턴스 재시작, proc 캐시 수동 지우기 등으로 인해).

인스턴스 (또는 데이터베이스)에 대해 쿼리를 실행하는 실제 방법은 SQL Trace 또는 Extended Events 세션을 만드는 것입니다. 올바르게 생성되면이 중 하나가 원하는 정보를 제공합니다.

오늘 아침과 오늘 아침에만 실행 통계를 찾고 있다면 (즉, 앞서 언급 한 모니터링 구현을 사전 예방적이고해야 할 다음 작업으로 설정하는 것만으로는 충분하지 않습니다), 이미 생성 된 경우가 아니면 방법 기본적으로 이 정보를 얻을 수 있습니다.

나중에 참조 할 수 있도록 SQL : StmtCompleted 이벤트 를 캡처하는 SQL 추적으로 시작하십시오 . XE에서는 sql_statement_completed이벤트 가 될 것 입니다.

내 의견으로는, 쿼리 실행 통계의 잔여 물에 대한 검색을 계속하는 대신 측정하려는 워크로드를 다시 실행하는 방법을 찾는 데 시간을 할애하기 시작합니다. 그러나 그 전에는 적절한 추적 / 모니터링을 설정하십시오.


답변