어떻게 만들의 SQL 서버처럼 행동은 인간을 사용하여 WAITFOR
사진 의 피셔에서 쌍둥이무 것도 주 다운로드 파
당신은 아마 조정하는 쿼리를 위한 최대 성능. 당신이 알에 자부심을 가지고 어떻게 추가 인덱스와 리팩터 코드 순서를 짜 모든 마지막 떨어는 서버의 성능을 잠재력입니다. 속도는 일반적으로 왕입니다. sql Server 의 WAITFOR 명령을 정기적으로 사용하지 않는 이유는 실제로 전체 쿼리가 느리게 실행되기 때문입니다. 그러나 속도 저하가 항상 나쁜 것은 아닙니다. 오늘 저는 WAITFOR 명령을 사용하기 위해 내가 가장 좋아하는 두 가지 방법을 보여 드리고자합니다.
YouTube 에서 이번 주 비디오보기
내 YouTube 채널에서 이번 주 콘텐츠를 볼 수도 있습니다.
1. 인간 구축
현대 컴퓨터는 빠릅니다. Cpu 를 수행하는 수십억의 동작하는 초당,RAM 용량 제조할 수 있는 벼락에 지팡이 정기적으로 증가 및 Ssd 신속하게 만드는 디스크 I/O 에 관한 과거의 일이다. 이러한 모든 것들이 대규모 워크로드를 처리하는 데 적합하지만 컴퓨터를”인간의 속도”에서 점점 더 멀리 이동시킵니다.
그러나”인간의 속도”는 때때로 당신이 원하는 것입니다. 어쩌면 당신이 원하는 응용 프로그램을 시뮬레이션에 사용량의 데이터베이스 또는 부하에 의해 만들어 분석을 실행하 ad hoc 에 대한 쿼리를 당신의 서버입니다.
이것은 사랑을 사용하여 WAITFOR DELAY-그것은 시뮬레이션 할 수 있습니다 인간은 쿼리를 실행하는 매우 모든
-- Run foreverWHILE (1=1)BEGIN --Insert data to simulate an app action from our app EXEC dbo.BuyDonuts 12 -- We usually average an order every 3 seconds WAITFOR DELAY '00:00:03'END
에 던져 일부 의사 난수의 생성과 어떤 경우 문을,당신은 가짜는 서버 부하를 사용하여 시작할 수 있습니다:
WHILE (1=1)BEGIN -- Generate command values 1-24 DECLARE @RandomDonutAmount int = ABS(CHECKSUM(NEWID()) % 25) + 1 -- Generate a delay between 0 and 5 seconds DECLARE @RandomDelay int = ABS(CHECKSUM(NEWID()) % 6) EXEC dbo.BuyDonuts @RandomDonutAmount WAITFOR DELAY @RandomDelayEND
2. Poor Man’s Service Broker
Service Broker 는 SQL Server 에서 훌륭한 기능입니다. 그것은 손잡이징 큐 시나리오를 정말 잘하지만,필요 이상의 설정 시간 그래서 일반적으로 좋아하지 않아 그것을 사용하는 시나리오에서 나는 뭔가가 필요한 빠르고 더럽습니다.
대하여 설 서비스 브로커 때를 알고 일부 사용할 수 있는 데이터나 프로세스가 될 준비가 쫓겨 나가 동일한 작업을 수행 할 수 있습는 루프 및 WAITFOR:
DECLARE @Quantity smallint = NULL-- Keep checking our table data until we find the data we wantWHILE (@Quantity IS NULL)BEGIN -- Delay each iteration of our loop for 10 seconds WAITFOR DELAY '00:00:03' -- Check to see if someone has bought a dozen donuts yet SELECT @Quantity = Quantity FROM dbo.Orders WHERE Quantity = 12END-- Run some other query now that our dozen donut purchase condition has been metEXEC dbo.GenerateCoupon
Fancy? 아니. 실용적입니까? 예.
더 이상 쿼리를 실행하기 전에 결과에 대한 테이블을 계속 검사 할 필요가 없습니다.
알고 있는 경우가 있는 특정 시간에 당신을 기다릴 때까지 당신은 시작 핑 일부 프로세스에 통합할 수 있습 WAITFOR 시간을 검사하더라도 더 많은 지능형
DECLARE @Quantity smallint = NULL-- Let's not start checking until 6am...that's when the donut shop opensWAITFOR TIME '06:00:00'-- Keep checking our table data until we find the data we wantWHILE (@Quantity IS NULL)BEGIN -- Delay each iteration of our loop for 10 seconds WAITFOR DELAY '00:00:03' -- Check to see if someone has bought a dozen donuts yet SELECT @Quantity = Quantity FROM dbo.Orders WHERE Quantity = 12END-- Run some other query now that our dozen donut purchase condition has been metEXEC dbo.GenerateCoupon