This time, we will talk about
This stored procedure was previously the subject of several blog posts regarding SQL Server performance optimizations. When I thought it is perfect (in term of performance), I learned something more.
Recently we received a performance report from a customer asking about an issue after upgrading from Commerce 10.4.2 to Commerce 10.8 (the last version before Commerce 11). The job “Publish Delayed Content Versions” starts to throw timeout exceptions.
This scheduled job calls to a
ecfVersion_ListFiltered to load the content versions which are in status
DelayedPublish, it looks like this when it reaches SQL Server:
declare @s [udttIdTable] insert into @s values(6) exec dbo.ecfVersion_ListFiltered @Statuses = @s, @StartIndex = 0, @MaxRows = 2147483646
This query is known to be slow. The reason is quite obvious –
Status contains only 5 or 6 distinct values, so it’s not indexed. SQL Server will have to do a Clustered Index Scan, and if
ecfVersion is big enough, it’s inevitably slow.