七夕活動,網頁顯示異常:
504 Gateway Time-out The server didn't respond in time.
開發詢問數據庫是否正常,當時正鏈接在實例上查詢數據,感受響應確實慢(敲一個命令,要幾秒才顯示出來)。只分配一個SQL Server身份驗證的登陸名
一、查看ERRORLOG是否有異常信息sql
xp_readerrorlog 0,1,null,null,'20170828','20170829','desc'
二、查看鏈接信息,是否有阻塞、等待類型、鏈接狀態數據庫
select spid,kpid,blocked,waittime,waittype,waitresource,dbid,last_batch,status,open_tran from sys.sysprocesses where spid>50
在第2步中發現不少waittime>0的鏈接,且其等待類型所有是ASYNC_NETWORK_IO
三、查看正在執行的語句session
SELECT er.session_id ,DB_NAME(sp.dbid) [Database] ,er.start_time ,er.status ,er.wait_type ,er.wait_time ,er.command ,er.transaction_isolation_level ,er.total_elapsed_time/1000 [total_elapsed_time(s)] ,er.estimated_completion_time/1000 [estimated_completion_time(s)] ,er.percent_complete ,[SQLQuery] = SUBSTRING(qt.Text, (er.statement_start_offset / 2) + 1, (( CASE WHEN er.statement_end_offset = - 1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.TEXT)) * 2 ELSE er.statement_end_offset END - er.statement_start_offset ) / 2) + 1) ,[BatchQuery] = qt.Text ,Program = program_name ,sp.Hostname ,sp.loginame ,sp.nt_username ,sp.nt_domain FROM sys.dm_exec_requests er INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt WHERE er.session_id > 50
返回100+行ASYNC_NETWORK_IO等待信息(數量持續增長),它們的語句所有是dom
(@0 nvarchar(4000),@1 nvarchar(255) output,@2 nvarchar(255) output,@3 nvarchar(255) output,@4 nvarchar(255) output) SELECT [SevenDayUserInfo].[OpenId], [SevenDayUserInfo].[WxName], [SevenDayUserInfo].[WxHeadUrl] , [SevenDayUserInfo].[UserId], [SevenDayUserInfo].[UserName], [SevenDayUserInfo].[UserNickName] , [SevenDayUserInfo].[TotalDice], [SevenDayUserInfo].[TakeOutDice], [SevenDayUserInfo].[SurplusDice] , [SevenDayUserInfo].[IsBind], [SevenDayUserInfo].[IsSubscribe], [SevenDayUserInfo].[DiceSeat] , [SevenDayUserInfo].[CreateTime], [SevenDayUserInfo].[Count] FROM [SevenDayUserInfo] exec First_SevenDay @0,@1 output,@2 output,@3 output,@4 output
問題的關鍵就是執行存儲過程的前面有一條返回全表數據的語句!反饋給開發,覈實是程序代碼封裝有誤(⊙_⊙)async
ASYNC_NETWORK_IO This wait type is where SQL Server has sent some data to a client through TDS and is waiting for the client to acknowledge that is has consumed the data, and can also show up with transaction replication if the Log Reader Agent job is running slowly for some reason.