Huge "Network I/O" type resource waits

  1. Stop using Activity Monitor
  2. Use sp_WhoIsActive to figure out what's actually going on

It could be backups, in which case there's not a whole heck of a lot you can do that doesn't involve hardware upgrades (maybe that 1 Gb iSCSI wasn't such a great idea...)

It could be client-side code consuming data RBAR (think foreach loops for every row coming in), or asking for a lot of rows all at once (this is where paging queries can help).

It could be something else entirely!

To get an idea what your server is waiting on the most, head over to -- full disclosure, I contribute to this open source project -- and grab sp_BlitzFirst (or, heck, grab'em all).

You can run this command to look at your wait stats as a whole, since startup.

EXEC sp_BlitzFirst @SinceStartup = 1

Or this to get a sample of wait stats during a slowdown.

EXEC sp_BlitzFirst @Seconds = 30, @ExpertMode = 1

Hope this helps!

Monitor the queries coming from their application, including the waits (you can do this with Extended Events), and then run the same queries from sqlcmd or SSMS (but not with results to grid) and compare. This should help you distinguish between applications that can't consume results fast enough and a network that can't transmit data fast enough.

I don't know if "Network I/O" in Activity Monitor maps only to ASYNC_NETWORK_IO but on a network like yours that wait is almost certainly caused only by delays in client consumption.