We have stored procedure with simple select statement, it is selecting data from table with following filtered index:
CREATE NONCLUSTERED INDEX
[IX_cdrs_phone_score_originating_ip_binary_sub_org_id_utcdate_i_filter_null] ON [agg].[cdrs_phone_score]
(
[originating_ip_binary]
ASC, /*binary (16)*/ [sub_org_id]
ASC, /*int*/ [utcdate]
ASC /*datetime*/
)
INCLUDE ( [reqtype], /*smallint*/ [phone_num]) /*bigint*/
WHERE ([originating_ip_binary] IS
NOT NULL)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE =
OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
There is 570 million rows in table.
Average execution time is 847ms and stored procedure is executing around 40times per seconds from different SPIDs. However, after we started our applications last time we were able to see heavy blocking with following lock types (this is just a first few
rows):
"SPID","Wait Time","Type","Resource","Command","CPU","I/O","Status","Blocking SPID","Session SQL"
145,0,,,SELECT,"25,967","1,110" ,"running, blocking",,
" 73","4,846",LCK_M_X,"OBJECT: 6:615673241:0 [COMPILE]",EXECUTE,"31,094","1,722","suspended, blocked, blocking",145,
" 86","4,753",LCK_M_X,"OBJECT: 6:615673241:0 [COMPILE]",EXECUTE,"37,365","2,880","suspended, blocked",73,
" 169","4,714",LCK_M_X,"OBJECT: 6:615673241:0 [COMPILE]",EXECUTE,"20,051",664,"suspended, blocked",73,
" 139","4,632",LCK_M_X,"OBJECT: 6:615673241:0 [COMPILE]",EXECUTE,"29,768",965,"suspended, blocked",73,
This is first select (from auto update statistics) - SPID 145:
SELECT StatMan ([SC0],
[SC1],
[SC2],
[SC3],
[SB0000])
FROM (SELECT TOP 100 PERCENT
[SC0],
[SC1],
[SC2],
[SC3],
step_direction ([SC0]) over (ORDER BY NULL) AS [SB0000]
FROM (SELECT [originating_ip_binary] AS [SC0], [sub_org_id] AS [SC1], [utcdate] AS [SC2], [cdrsid] AS [SC3]
FROM [agg].[cdrs_phone_score] TABLESAMPLE SYSTEM (4.439952e+000 PERCENT) WITH (READUNCOMMITTED)
WHERE ([originating_ip_binary] IS NOT NULL)) AS _MS_UPDSTATS_TBL_HELPER ORDER BY [SC0], [SC1], [SC2], [SC3], [SB0000] ) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 1)
After we added WITH RECOMPILE in stored procedure body all blocking was gone. Anybody had similar issue?