T-SQL에서 선택 출력 숨기기


13

쿼리 실행 시간을 얻으려고하는데 쿼리 출력을 숨기고 싶습니다. 나는 단지 경과 시간을 원합니다-출력이 없습니다.

DECLARE @Start datetime
DECLARE @End datetime

SELECT @StartTimeWA=GETDATE() 

SELECT 
       [id] 
      ,[database_id]
      ,[proc_name]
      ,[exec_t] from
  [DB].[dbo].[STAT] 

SELECT @End=GETDATE()

SELECT DATEDIFF(MS,@Start,@End) AS [Duration]

현재 쿼리 출력 얻었고 맨 아래에 지속 시간이 있습니다. 출력이 진행되는 한 원하는 것입니다. 나는 이것을 할 수 없었고 다른 사람이 비슷한 문제를 겪었는지 궁금해 했습니까? 이것은 Management Studio가 아닌 T-SQL에서하고 싶은 일입니다.

select 문을 실행하고 서버에 다시보고하는 데 걸리는 시간을 모니터링하려고합니다. 나는 매분마다 그것을 실행하고 시간이 지남에 따라 추세 / 기준선에 사용할 시간을 가져 오는 외부 모니터 서버가 있습니다. 현재 쿼리가 선택한 결과와 내 지속 시간을 뱉어 내면 왜곡되어 모니터 서버가 혼란스러워집니다. 방금 기간 열을 원했습니다. 또한 인서트를 위해이 작업을 수행 할 것이며 선택을 수행 할 필요가 없으므로 간단합니다.

나는 순수하게 T-SQL에서 이것을하려고합니다 . 쿼리를 실행할 때 걸리는 시간 (스냅 샷)을 얻고 DMV를 사용하고 싶지 않으며 서버가 다양한 수준의 부하를 겪을 때 시간이 지남에 따라 변경되는지 확인하는 것이 좋습니다. 쿼리 실행 시간이 변경되는지 여부

답변:


28

이를 수행하는 방법에는 여러 가지가 있습니다.

#temptempdb로드 또는 자동 증가가 결과에 영향을 줄 수 있으므로 일반적으로 테이블에 삽입하는 것은 권장하지 않으며 @table변수에 대한 수정은 강제 직렬 (병렬 계획을 사용할 수 없음)이므로 변수를 사용하지 않는 것이 좋습니다. 실제 검색어 시간이 변경 될 수 있습니다.

변수 할당

다음과 같이 변수를 선언하고 열을 할당 할 수 있습니다.

DECLARE @Start datetime
DECLARE @End datetime
DECLARE @blob_eater SQL_VARIANT;

SELECT @StartTimeWA=GETDATE() 

SELECT 
       @blob_eater = [id] 
      ,@blob_eater = [database_id]
      ,@blob_eater = [proc_name]
      ,@blob_eater = [exec_t] from
  [DB].[dbo].[STAT] 

SELECT @End=GETDATE()

SELECT DATEDIFF(MS,@Start,@End) AS [Duration]

이렇게하면 일부 매개 변수 포함 최적화가 방해 될 수 있습니다. "임베딩 제한"아래 의 매개 변수 스니핑, 임베딩 및 권장 옵션을 참조하십시오 .

이 방법은 암시 적 변환에 대한 계획 경고를 유발할 수 있지만 걱정할 필요는 없습니다. 배경 :이 경고를 트리거하는 대상 : 식의 형식 변환이 쿼리 계획 선택의 "CardinalityEstimate"에 영향을 줄 수있는 내용은이 Q & A를 참조하십시오 .

SSMS에서

쿼리 결과를 삭제하도록 설정을 변경할 수 있습니다.

견과류

SQL 쿼리 스트레스

SQL 쿼리 스트레스 는 SQL Server에 대해 쿼리를 실행하여로드를 시뮬레이션 할 수있는 오픈 소스 도구입니다. 쿼리 결과는 실행될 때 응용 프로그램으로 반환되지 않습니다.

여기 에 대한 지침을 읽을 수 있습니다 .

ostress (RML 유틸리티)

ostress 는 Microsoft가 게시 한 유사한 도구로, 사용자가 선택하지 않는 한 결과를 클라이언트에 반환하지 않습니다.

나는 그것에 대해 몇 가지를 작성했습니다 여기에 .

계획 탐색기

SentryOne의 Plan Explorer 는 SQL Server 실행 계획 및 교착 상태를 볼 수있는 무료 대안입니다.

SQL Server를 어느 정도 쿼리하기 위해 클라이언트로 사용할 수도 있습니다.

견과류

결과도 삭제됩니다.

견과류

도움이 되었기를 바랍니다!


0

SET STATISTICS TIME ON외부 모니터 서버에서 모니터링 앱을 사용 하여 쿼리를 실행 하고 출력 메시지를 캡처 할 수 있습니다 .

.Net으로 출력 메시지를 캡처하는 방법은 AdaTheDev의 Stack Overflow 답변 에 설명되어 있습니다 .

연결시 InfoMessage 이벤트에 이벤트 핸들러를 추가하여이를 수행 할 수 있습니다 .

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);

void myConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    myStringBuilderDefinedAsClassVariable.AppendLine(e.Message);
}

0

초기 선택을 사용하여 @End를 반환 할 수 없습니까?

[DB]에서 @blob_eater = [id], @ blob_eater = [database_id], @ blob_eater = [proc_name], @ blob_eater = [exec_t]를 선택하십시오. [dbo]. [STAT]

SELECT @ End = GETDATE ()

된다

[DB]에서 @ End = GETDATE ()를 선택하십시오. [dbo]. [STAT]

마지막 값만 변수에 저장됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.