NServiceBus.SqlServer icon indicating copy to clipboard operation
NServiceBus.SqlServer copied to clipboard

Set Size to -1 to optimize SQL Server query plan execution

Open ramonsmits opened this issue 2 years ago • 0 comments

Describe the suggested improvement

Various queries are not ideally constructed resulting the SQL query cache misses.

Delayed queue table:

(@Headers nvarchar(1362),@Body varbinary(177),@DueAfterDays int,@DueAfterHours int,@DueAfterMinutes int,@DueAfterSeconds int,@DueAfterMilliseconds int) DECLARE @NOCOUNT VARCHAR(3) = 'OFF'; IF ( (512 & @@OPTIONS) = 512 ) SET @NOCOUNT = 'ON' SET NOCOUNT ON;  DECLARE @DueAfter DATETIME = GETUTCDATE(); SET @DueAfter = DATEADD(ms, @DueAfterMilliseconds, @DueAfter); SET @DueAfter = DATEADD(s, @DueAfterSeconds, @DueAfter); SET @DueAfter = DATEADD(n, @DueAfterMinutes, @DueAfter); SET @DueAfter = DATEADD(hh, @DueAfterHours, @DueAfter); SET @DueAfter = DATEADD(d, @DueAfterDays, @DueAfter);  INSERT INTO [NsbSamplesSqlOutbox].[receiver].[Samples.SqlOutbox.Receiver.Delayed] (     Headers,     Body,     Due) VALUES (     @Headers,     @Body,     @DueAfter);  IF(@NOCOUNT = 'ON') SET NOCOUNT ON; IF(@NOCOUNT = 'OFF') SET NOCOUNT OFF;

Queue table:

(@Id uniqueidentifier,@TimeToBeReceivedMs int,@Headers nvarchar(734),@Body varbinary(max) ) DECLARE @NOCOUNT VARCHAR(3) = 'OFF'; IF ( (512 & @@OPTIONS) = 512 ) SET @NOCOUNT = 'ON' SET NOCOUNT ON;  INSERT INTO [NsbSamplesSqlOutbox].[receiver].[Samples.SqlOutbox.Receiver] (     Id,     Recoverable,     Expires,     Headers,     Body) VALUES (     @Id,     1,     CASE WHEN @TimeToBeReceivedMs IS NOT NULL         THEN DATEADD(ms, @TimeToBeReceivedMs, GETUTCDATE()) END,     @Headers,     @Body);  IF (@NOCOUNT = 'ON') SET NOCOUNT ON; IF (@NOCOUNT = 'OFF') SET NOCOUNT OFF;
(@Id uniqueidentifier,@TimeToBeReceivedMs int,@Headers nvarchar(800),@Body varbinary(max) ) DECLARE @NOCOUNT VARCHAR(3) = 'OFF'; IF ( (512 & @@OPTIONS) = 512 ) SET @NOCOUNT = 'ON' SET NOCOUNT ON;  INSERT INTO [NsbSamplesSqlOutbox].[sender].[Samples.SqlOutbox.Sender] (     Id,     Recoverable,     Expires,     Headers,     Body) VALUES (     @Id,     1,     CASE WHEN @TimeToBeReceivedMs IS NOT NULL         THEN DATEADD(ms, @TimeToBeReceivedMs, GETUTCDATE()) END,     @Headers,     @Body);  IF (@NOCOUNT = 'ON') SET NOCOUNT ON; IF (@NOCOUNT = 'OFF') SET NOCOUNT OFF;
(@Id uniqueidentifier,@TimeToBeReceivedMs int,@Headers nvarchar(800),@Body varbinary(max) ) DECLARE @NOCOUNT VARCHAR(3) = 'OFF'; IF ( (512 & @@OPTIONS) = 512 ) SET @NOCOUNT = 'ON' SET NOCOUNT ON;  INSERT INTO [NsbSamplesSqlOutbox].[sender].[Samples.SqlOutbox.Sender] (     Id,     Recoverable,     Expires,     Headers,     Body) VALUES (     @Id,     1,     CASE WHEN @TimeToBeReceivedMs IS NOT NULL         THEN DATEADD(ms, @TimeToBeReceivedMs, GETUTCDATE()) END,     @Headers,     @Body);  IF (@NOCOUNT = 'ON') SET NOCOUNT ON; IF (@NOCOUNT = 'OFF') SET NOCOUNT OFF;
(@Id uniqueidentifier,@TimeToBeReceivedMs int,@Headers nvarchar(800),@Body varbinary(max) ) DECLARE @NOCOUNT VARCHAR(3) = 'OFF'; IF ( (512 & @@OPTIONS) = 512 ) SET @NOCOUNT = 'ON' SET NOCOUNT ON;  INSERT INTO [NsbSamplesSqlOutbox].[sender].[Samples.SqlOutbox.Sender] (     Id,     Recoverable,     Expires,     Headers,     Body) VALUES (     @Id,     1,     CASE WHEN @TimeToBeReceivedMs IS NOT NULL         THEN DATEADD(ms, @TimeToBeReceivedMs, GETUTCDATE()) END,     @Headers,     @Body);  IF (@NOCOUNT = 'ON') SET NOCOUNT ON; IF (@NOCOUNT = 'OFF') SET NOCOUNT OFF;

Subscriptions:

(@Topic_0 varchar(14),@Topic_1 varchar(13),@Topic_2 varchar(18),@Topic_3 varchar(20)) SELECT DISTINCT QueueAddress FROM [NsbSamplesSqlOutbox].[dbo].[Subscriptions] WHERE Topic IN (@Topic_0, @Topic_1, @Topic_2, @Topic_3) 

Related

This was discovered while working on the following SQLP PR:

  • https://github.com/Particular/NServiceBus.Persistence.Sql/pull/1254

Additional Context

No response

ramonsmits avatar Oct 20 '23 17:10 ramonsmits