T-SQL sau mất khoảng 25 giây trên máy của tôi với SSMS v17.9:
DECLARE @outer_loop INT = 0,
@big_string_for_u VARCHAR(8000);
SET NOCOUNT ON;
WHILE @outer_loop < 50000000
BEGIN
SET @big_string_for_u = 'ZZZZZZZZZZ';
SET @outer_loop = @outer_loop + 1;
END;
Nó tích lũy 535 ms ASYNC_NETWORK_IO
chờ đợi theo cả hai sys.dm_exec_session_wait_stats
và sys.dm_os_wait_stats
. Tổng thời gian chờ tăng lên khi số lần lặp lặp tăng lên. Sử dụng wait_completed
sự kiện mở rộng tôi có thể thấy rằng sự chờ đợi xảy ra khoảng 43 ms với một vài ngoại lệ:
Ngoài ra, tôi có thể nhận được các ngăn xếp cuộc gọi xảy ra ngay trước khi ASYNC_NETWORK_IO
chờ:
sqldk.dll!SOS_DispatcherBase::GetTrack+0x7f6c
sqldk.dll!SOS_Scheduler::PromotePendingTask+0x204
sqldk.dll!SOS_Task::PostWait+0x5f
sqldk.dll!SOS_Scheduler::Suspend+0xb15
sqllang.dll!CSECCNGProvider::GetBCryptHandleFromAlgID+0xf6af
sqllang.dll!CSECCNGProvider::GetBCryptHandleFromAlgID+0xf44c
sqllang.dll!SNIPacketRelease+0xd63
sqllang.dll!SNIPacketRelease+0x2097
sqllang.dll!SNIPacketRelease+0x1f99
sqllang.dll!SNIPacketRelease+0x18fe
sqllang.dll!CAutoExecuteAsContext::Restore+0x52d
sqllang.dll!CSQLSource::Execute+0x151b
sqllang.dll!CSQLSource::Execute+0xe13
sqllang.dll!CSQLSource::Execute+0x474
sqllang.dll!SNIPacketRelease+0x165d
sqllang.dll!CValOdsRow::CValOdsRow+0xa92
sqllang.dll!CValOdsRow::CValOdsRow+0x883
sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x15d
sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x638
sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x2ad
sqldk.dll!SystemThread::MakeMiniSOSThread+0xdf8
sqldk.dll!SystemThread::MakeMiniSOSThread+0xf00
sqldk.dll!SystemThread::MakeMiniSOSThread+0x667
sqldk.dll!SystemThread::MakeMiniSOSThread+0xbb9
Cuối cùng, tôi nhận thấy rằng SSMS sử dụng một lượng CPU đáng ngạc nhiên trong vòng lặp (trung bình khoảng một nửa lõi). Tôi không thể hiểu SSMS đang làm gì trong thời gian đó.
Tại sao một vòng lặp đơn giản gây ra sự ASYNC_NETWORK_IO
chờ đợi khi được thực hiện thông qua SSMS? Đầu ra duy nhất mà tôi dường như nhận được từ máy khách từ việc thực hiện truy vấn này là "Các lệnh đã hoàn thành thành công". thông điệp.