Sei sulla pagina 1di 3

Optimizar Stored Procedures SP de SQL Server

Veamos cmo optimizar el procedimiento almacenado con simples cambios en el cdigo.

Incluir SET NOCOUNT ON:


Con cada sentencia SELECT y DML, el servidor SQL devuelve un mensaje que indica el nmero de filas afectadas por esa declaracin. Esta informacin es sobre todo til para depurar el cdigo,pero es intil despus de eso. Mediante el establecimiento de SET NOCOUNT ON, se puededesactivar la funcin de devolucin de esta informacin adicional. Para los procedimientos almacenados que contienen varias declaraciones o contener Transact-SQL lazos, establecer SET NOCOUNT en ON puede proporcionar un aumento de rendimiento significativo, porque el trfico de red se reduce considerablemente.

CREATE PROC dbo.ProcName AS SET NOCOUNT ON; --Procedure code here SELECT column1 FROM dbo.TblTable1 -- Reset SET NOCOUNT to OFF SET NOCOUNT OFF; GO

Use el nombre de esquema con el nombre del objeto:


El nombre del objeto est calificado si se utiliza con el nombre de esquema. Nombre de esquemadebe ser utilizado con el nombre del procedimiento almacenado y con todos los objetos dereferencia dentro del procedimiento almacenado. Esta ayuda directa en encontrar el plan decumplimiento en lugar de buscar los objetos en el esquema de otras posibles antes de decidirse autilizar un plan almacenado en cach, si est disponible. Este proceso de bsqueda y decidir un esquema de un objeto conduce a compilar el procedimiento almacenado de bloqueo y disminuye el rendimiento del procedimiento almacenado. Por lo tanto, siempre se refieren los objetos connombre completo en el procedimiento almacenado como

SELECT * FROM dbo.MyTable -- Preferred method -- Instead of SELECT * FROM MyTable -- Avoid this method --And finally call the stored procedure with qualified name like: EXEC dbo.MyProc -- Preferred method --Instead of EXEC MyProc -- Avoid this method

No utilice el prefijo "sp_" en el nombre del procedimiento almacenado:

Si un nombre de procedimiento almacenado comienza con "sp_", a continuacin, busca el servidorSQL por primera vez en la base de datos maestra y luego en la base de datos actual perodo de sesiones. Bsqueda en la base de datos principal causa sobrecarga adicional e incluso un mal resultado si otro procedimiento almacenado con el mismo nombre se encuentra en la base de datos maestra.

Utilice el procedimiento almacenado sp_executesql en lugar de la instruccin EXECUTE:

El procedimiento almacenado sp_executesql admite parmetros. Por lo tanto, utilizando el procedimiento almacenado sp_executesql en lugar de la instruccin EXECUTE mejorar lareutilizacin de cdigo. El plan de ejecucin de una instruccin dinmica puede ser reutilizado slo si todos y cada personaje, incluido el caso, el espacio, los comentarios y los parmetros, es el mismo para dos estados. Por ejemplo, si ejecuta el lote a continuacin:

DECLARE @Query VARCHAR(100) DECLARE @Age INT SET @Age = 25 SET @Query = 'SELECT * FROM dbo.tblPerson WHERE Age = ' +CONVERT(VARCHAR(3),@Ag e) EXEC (@Query) Si volvemos a ejecutar el lote anterior con un valor diferente edad @, entonces el plan de ejecucin de sentencia SELECT creado por @ Edad = 25 no se pueden reutilizar. Sin embargo, si escribimos el lote de arriba como se indica a continuacin,

DECLARE @Query NVARCHAR(100) SET @Query = N'SELECT * FROM dbo.tblPerson WHERE Age = @Age' EXECUTE sp_executesql @Query, N'@Age int', @Age = 25 el plan compilado de esta sentencia SELECT se puede reutilizar para diferentes valores del parmetro @ Edad. La reutilizacin del plan existente cumplimiento dar lugar a un mejor desempeo.

Trate de evitar el uso de cursores de SQL Server siempre que sea posible:

El cursor utiliza una gran cantidad de recursos para la carga de procesamiento para mantener la posicin del registro actual en un conjunto de registros y esto disminuye el rendimiento. Sitenemos que procesar los registros uno por uno en un bucle, entonces debemos utilizar la clusula WHILE. Siempre que sea posible, se debe reemplazar el enfoque basado en cursor con SET enfoque. Debido a que el motor de SQL Server est diseada y optimizada para llevar a cabobasado en conjuntos operacin muy rpida. Una vez ms, por favor, tenga en cuenta el cursor estambin una especie de bucle while.

Mantenga la transaccin lo ms corta posible:


La duracin de la transaccin afecta el bloqueo y los interbloqueos. Bloqueo exclusivo no se libera hasta el final de la transaccin. En el nivel superior de aislamiento, los bloqueos compartidostambin son mayores con la transaccin. Por lo tanto, las transacciones largas medios segurosdurante ms tiempo y cerraduras para las vueltas ms tiempo en el bloqueo. En algunos casos, el bloqueo tambin se convierte en callejones sin salida. Por lo tanto, para una ejecucin ms rpida y menos bloqueo, la transaccin debe ser lo ms corto posible.

Utilice try-catch para el manejo de errores:

Antes de cdigos de SQL Server versin 2005 para el tratamiento de errores, hubo una gran porcin de cdigo en s, porque una declaracin de comprobacin de errores fue escrito despus de cada sentencia T-SQL. Ms cdigo siempre consume ms recursos y tiempo. En SQL Server 2005, una manera sencilla se introduce una nueva con el mismo propsito. La sintaxis es la siguiente:

BEGIN TRY --Your t-sql code goes here END TRY BEGIN CATCH --Your error handling code goes here END CATCH

Potrebbero piacerti anche