we have a stored procedure that ran fine until 10 minutes ago and then it just hangs after you call it.
Observations:
- Copying the code into a query window yields the query result in 1 second
- SP takes > 2.5 minutes until I cancel it
- Activity Monitor shows it's not being blocked by anything, it's just doing a SELECT.
- Running sp_recompile on the SP doesn't help
- Dropping and recreating the SP doesn't help
- Setting LOCK_TIMEOUT to 1 second does not help
What else can be going on?
UPDATE: I'm guessing it had to do with parameter sniffing. I used Adam Machanic's routine to find out which subquery was hanging. I found things wrong with the query plan thanks to the hint by Martin Smith. I learned about EXEC ... WITH RECOMPILE
, OPTION(RECOMPILE)
for subqueries within the SP, and OPTION (OPTIMIZE FOR (@parameter = 1))
in order to attack parameter sniffing. I still don't know what was wrong in this particular case but I came out of this battle seasoned and much better armed. I know what to do next time. So here's the points!
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…