Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gespeicherte Prozedur hängt scheinbar ohne Erklärung

Ich denke, dass dies mit dem Parameter-Sniffing und der Notwendigkeit zusammenhängt, Ihre Eingabeparameter auf lokale Parameter innerhalb des SP zu parametrisieren. Das Hinzufügen mit Recompile bewirkt, dass der Ausführungsplan neu erstellt wird, und eliminiert viele der Vorteile eines SP. Wir haben With Recompile bei vielen Berichten verwendet, um dieses Problem mit dem Hängen zu beseitigen, und es führte gelegentlich dazu, dass SPs hängen blieben, die möglicherweise mit anderen Sperren und/oder Transaktionen in Verbindung standen, die gleichzeitig auf dieselben Tabellen zugreifen. Weitere Informationen finden Sie unter diesem Link Parameter Sniffing (oder Spoofing ) in SQL Server und ändern Sie Ihre SPs wie folgt, um dies zu beheben:

CREATE PROCEDURE [dbo].[SPNAME] @p1 int, @p2 intAS

DECLARE @localp1 int, @localp2 int

SET @[email protected] SET @[email protected]