Prática ruim ou anti padrão

SELECT IsFreeRoom
FROM dbXyz..Room
WHERE roomname = @RoomId

Devemos evitar nomenclaturas diferentes para o mesmo elemento para evitar confusão. Neste caso a variável @RoomId deveria se chamar @RoomName. Além disso devemos manter o mesmo padrão de case no projeto inteiro. A coluna roomname deveria manter o camel case assim como a variável @RoomId.

SQL: try … catch rollback

DECLARE @ErrorMessage NVARCHAR(4000)
    ,@ErrorSeverity INT
    ,@ErrorState INT

BEGIN TRY
    BEGIN TRAN

    -- INSERT
    -- UPDATE
    -- DELETE

    COMMIT TRAN
END TRY

BEGIN CATCH
    IF (@@TRANCOUNT > 0)
    BEGIN
        ROLLBACK TRAN
    END

    SELECT @ErrorMessage = ERROR_MESSAGE()
        ,@ErrorSeverity = ERROR_SEVERITY()
        ,@ErrorState = ERROR_STATE()

    -- Use RAISERROR inside the CATCH block to return error
    -- information about the original error that caused
    -- execution to jump to the CATCH block.
    RAISERROR (
            @ErrorMessage
            ,@ErrorSeverity
            ,@ErrorState
            )
END CATCH

Como verificar os logs de application pool shutdown e aumentar o idle timeout

Para verificar os logs de application pool shutdown, no Event Viewer do Windows, filtre os logs por source “WAS”.

Para aumentar o idle timeout de um application pool, no IIS Manager selecione Application Pools, selecione o pool que deseja configurar, clique em Advanced Settings e configure um valor maior para a propriedade Idle Time-out (minutes).

http://stackoverflow.com/questions/9984604/how-to-find-app-pool-recycles-in-event-log

http://technet.microsoft.com/en-us/library/cc771956%28v=ws.10%29.aspx

Como listar tabelas e Stored Procedures não utilizadas

Tabelas

USE banco
GO

SELECT t.[name] AS 'Table'
    ,SUM(i.user_seeks + i.user_scans + i.user_lookups) AS 'Total accesses'
    ,SUM(i.user_seeks) AS 'Seeks'
    ,SUM(i.user_scans) AS 'Scans'
    ,SUM(i.user_lookups) AS 'Lookups'
FROM sys.dm_db_index_usage_stats i
RIGHT JOIN sys.tables t
    ON (t.object_id = i.object_id)
GROUP BY i.object_id
    ,t.[name]
ORDER BY [Total accesses]

Stored Procedures

Note que a view dm_exec_procedure_stats retorna somente as procedures que estão em cache. Portanto, procedures que foram executadas recentemente mas saíram do cache podem aparecer como não executadas. Indico analisar várias vezes antes de apagar.

USE banco
GO

SELECT sc.[name]
    ,p.[name]
    ,st.last_execution_time
FROM sys.procedures AS p
JOIN sys.schemas AS sc
    ON p.[schema_id] = sc.[schema_id]
LEFT JOIN sys.dm_exec_procedure_stats AS st
    ON p.[object_id] = st.[object_id]
ORDER BY st.last_execution_time
    ,p.[name]

http://stackoverflow.com/questions/290773/identifying-unused-objects-in-microsoft-sql-server-2005
http://stackoverflow.com/questions/10421439/tsql-query-to-find-un-used-stored-procedures