There Are Days When I Feel Like Giving Up on the Plan Cache and Query Store.


In theory, SQL Server performance monitoring is pretty simple:

Review the server’s top wait types Find the queries causing those wait types Fix those queries, or improve the way the server reacts to them (indexes, settings, etc.)

But in practice, step 2 is awful because:

Apps send unparameterized strings to the database server Entity Framework users build queries with FromSqlRaw or string.Format() Entity Framework users write queries with .Contains, which builds an unparameterized IN list, even when they’re only looking for a single value (which got better in EF9) People write sloppy dynamic SQL that just concatenates