SQLServer performances de capture d'essai
-
05-09-2019 - |
Question
Quelqu'un at-il trouvé une augmentation des performances / tradoff d'utiliser BEGIN TRY..END dans ESSAYEZ sql server 2008, vs l'ancien IF @@ ERROR <> 0? Juste curieux de savoir s'il y a des pénalités de performance ou non.
La solution
Ceci est une question ancienne, mais en 2012 Aaron Bertrand a écrit un article détaillé
CheckInsert | Checks `IF EXISTS` first | Simple `INSERT`
CheckRollback | Checks `IF EXISTS` first | Use `IF @@ERROR <> 0`
CheckTryCatch | Checks `IF EXISTS` first | Use `TRY CATCH`
JustInsert | | Simple `INSERT`
JustRollback | | Use `IF @@ERROR <> 0`
JustTryCatch | | Use `TRY CATCH`
Autres conseils
Depuis le disque de base de données sont identiques problèmes a frappé, il devrait y avoir aucun problème de performance appréciable.
Depuis SQL 2005, vous devriez essayer d'utiliser la manière ESSAYER CATCH pour gérer les exceptions ou connecte les erreurs. Il est considéré comme la meilleure pratique. Il devrait y avoir pas de performance majeure frappé en l'utilisant.
BEGIN TRY
BEGIN TRANSACTION
-- SQL
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK
SELECT
ERROR_MESSAGE(),
ERROR_NUMBER() -- etc
END CATCH
Oubliez la performance, il est un spectacle sacrément plus sûr, mieux et plus predicatable.
Cependant, l'utilisation @@ ERROR nécessite généralement un GOTO et / ou beaucoup d'instructions IF pour gérer correctement donc je suppose qu'il peut y avoir un petit coup de pouce dans try..catch.
La performance de ... CATCH est TRY très probablement un peu plus quand il n'y a pas d'erreurs. D'autre part, il sera plus rapide dans de nombreux cas où il y a une erreur.
Mais, vous ne devriez pas coder strictement pour la performance de toute façon. Et, les frais généraux, le cas échéant, va être assez petit, donc je ne troquer la syntaxe plus sûre pour la performance dans ce cas.
En outre, le Try ... Catch rend le code un peu plus facile à maintenir, surtout si votre équipe SQL dev n'a pas été autour de SQL Server très longue, qui, malheureusement, arrive un peu trop souvent. J'imagine que ce sera plus le cas quelques années.