I am a heading
Thanks for watching! Demo scripts below.
Demo Scripts
USE StackOverflow2013; EXEC dbo.DropIndexes; SET NOCOUNT ON; DBCC FREEPROCCACHE; GO CREATE INDEX chunk ON dbo.Posts (OwnerUserId, Score DESC) INCLUDE (CreationDate, LastActivityDate) WITH (MAXDOP = 8, SORT_IN_TEMPDB = ON, DATA_COMPRESSION = PAGE); GO CREATE OR ALTER VIEW dbo.PushyPaul WITH SCHEMABINDING AS SELECT p.OwnerUserId, p.Score, p.CreationDate, p.LastActivityDate, PostRank = DENSE_RANK() OVER ( PARTITION BY p.OwnerUserId ORDER BY p.Score DESC ) FROM dbo.Posts AS p; GO SELECT p.* FROM dbo.PushyPaul AS p WHERE p.OwnerUserId = 22656; GO CREATE OR ALTER PROCEDURE dbo.StinkyPete ( @UserId int ) AS SET NOCOUNT, XACT_ABORT ON; BEGIN SELECT p.* FROM dbo.PushyPaul AS p WHERE p.OwnerUserId = @UserId; END; GO EXEC dbo.StinkyPete @UserId = 22656; /*Start Here*/ ALTER DATABASE StackOverflow2013 SET PARAMETERIZATION SIMPLE; DBCC TRACEOFF ( 4199, -1 ); ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF; SELECT p.* FROM dbo.PushyPaul AS p WHERE p.OwnerUserId = 22656 AND 1 = (SELECT 1); /*Avoid trivial plan/simple parameterization*/ /*Let's cause a problem!*/ ALTER DATABASE StackOverflow2013 SET PARAMETERIZATION FORCED; SELECT p.* FROM dbo.PushyPaul AS p WHERE p.OwnerUserId = 22656 AND 1 = (SELECT 1); /*Avoid trivial plan/simple parameterization*/ /*Can we fix the problem?*/ DBCC TRACEON ( 4199, -1 ); SELECT p.* FROM dbo.PushyPaul AS p WHERE p.OwnerUserId = 22656 AND 1 = (SELECT 1); /*Avoid trivial plan/simple parameterization*/ /*That's kinda weird...*/ DBCC FREEPROCCACHE; SELECT p.* FROM dbo.PushyPaul AS p WHERE p.OwnerUserId = 22656 AND 1 = (SELECT 1); /*Avoid trivial plan/simple parameterization*/ /*Turn Down Service*/ DBCC TRACEOFF ( 4199, -1 ); SELECT p.* FROM dbo.PushyPaul AS p WHERE p.OwnerUserId = 22656 AND 1 = (SELECT 1); /*Avoid trivial plan/simple parameterization*/ /*Okay then.*/ /*I'm different.*/ ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON; SELECT p.* FROM dbo.PushyPaul AS p WHERE p.OwnerUserId = 22656 AND 1 = (SELECT 1); /*Avoid trivial plan/simple parameterization*/ /*Cleanup*/ ALTER DATABASE StackOverflow2013 SET PARAMETERIZATION SIMPLE; ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = OFF; DBCC TRACEOFF ( 4199, -1 );
Going Further
If this is the kind of SQL Server stuff you love learning about, you’ll love my training. I’m offering a 75% discount to my blog readers if you click from here. I’m also available for consulting if you just don’t have time for that and need to solve performance problems quickly.
You ordered, they got it done https://docs.microsoft.com/en-us/sysinternals/#whats-new-july-19-2022
Well, sort of…