We have one particular SQL Server 2008 query (not a stored proc, but the same SQL string — executes every 5 minutes) that intermittently caches a very bad query plan.
This query normally runs in a few milliseconds, but with this bad query plan, it takes 30+ seconds.
How do I surgically remove just the one bad cached query plan from SQL Server 2008, without blowing away the entire query cache on the production database server?
Best Answer
I figured out a few things
will show all the cached query plans. Unfortunately, no SQL text is shown there.
However, you can join the SQL text to the plans like so:
From here it's pretty trivial to add a
WHERE
clause to find the SQL I know is in the query, and then I can execute:to remove each query plan from the query plan cache. Not exactly easy or convenient, but it appears to work..
edit: dumping the entire query cache will also work, and is less dangerous than it sounds, at least in my experience: