We have a lot of custom pollers. OK, perhaps that isn't completely accurate. We have a lot of custom pollers assigned. 68,329 assignments to be exact. (SELECT COUNT(DISTINCT CustomPollerAssignmentID FROM CustomPollerAssignment) We actually only have about 100 unique custom pollers, but when you use The Ultimate CPU Alert ... for Linux! or, more correctly, The Ultimate CPU Alert...For Linux - Reloaded! it means that you make judicious use of custom pollers. Not to mention that we (and we have adatole to thank for this) do a lot of custom polling of memory and other such details in Linux to make the *Nix folks happy.
(When is memory utilization not memory utilization? When you are taking to a Linux admin!)
But here is the rub. Ever since our database server upgrade (RAID 10 with SSD, 768GB RAM, etc. etc.) that cleared out some of our more egregious performance issues with our Orion DB we've noticed that we regularly see Orion queries related to custom pollers in our top waits in DPA. (You have DPA, don't you??) Here's what we found:
This query averages about 7 hours of wait time per day. About 5 hours and 45 minutes of it in ASYNC_NETWORK_IO waits. The average run time per query is 839 seconds.
INSERT bulk CustomPollerStatus
([CustomPollerAssignmentID]
UniqueIdentifier, [DateTime]
DateTime, [Rate]
Real, [Total]
Real, [RawStatus]
Real, [Status]
NVarChar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS, [RowID]
VarChar(800) COLLATE SQL_Latin1_General_CP1_CI_AS, [RowStatus]
SmallInt, [CompressedRowID]
VarChar(400) COLLATE SQL_Latin1_General_CP1_CI_AS
)


The other query (see below) averages between 6 and 9 hours of wait time per day. Again, the majority of the wait is ASYNC_NETWORK_IO waits except for in certain blocks of the day where the waits are LCK_M_IX. This is typically during our maintenance window.
INSERT bulk CustomPollerStatistics_Detail
([CustomPollerAssignmentID]
UniqueIdentifier, [Archive]
TinyInt, [DateTime]
DateTime, [MinRate]
Real, [AvgRate]
Real, [MaxRate]
Real, [Total]
Real, [RawStatus]
Real, [Status_V]
VarChar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS, [RowID]
VarChar(800) COLLATE SQL_Latin1_General_CP1_CI_AS
)

My question: Is this normal? Do Custom Pollers really drive waits on the DB this much?
For reference, here is a 'typical' day for us. That spike at 9PM? That's when our database maintenance kicks off
LCK_M_IX waits all over the place in that 9PM to 2AM maintenance window.
