usp_SQLServerCarpenter_Tools_Get_Objects_Performing_Committed_Read

/*
	Author	:	Brahmanand Shukla (SQLServerCarpenter.com)
	Date	:	27-May-2022
	Purpose	:	To get all the objects performing committed reads. 
				This proceduere will fetch all the objects (Procedures, Functions, Triggers, View etc.) 
				that doesn't uses the NOLOCK and SET ISOLATION LEVEL READ UNCOMMITTED.
				This procedure may be helpful in performance tuning assignments and to resolve / minimize the frequent blockage and deadlock issues.

	Example: 
	EXEC usp_SQLServerCarpenter_Tools_Get_Objects_Performing_Committed_Read
*/
CREATE OR ALTER PROCEDURE usp_SQLServerCarpenter_Tools_Get_Objects_Performing_Committed_Read
AS
	BEGIN
		SET NOCOUNT ON;

		; WITH cte_objects
		AS
		(
			SELECT 'Stored Procedure' AS ObjectType
 				, OBJECT_NAME(OBJECT_ID) AS ObjectName
				, PATINDEX('%NOLOCK%', OBJECT_DEFINITION(OBJECT_ID)) AS NoLock_Pat_Index
				, PATINDEX('%ISOLATION%LEVEL%READ%UNCOMMITTED%', OBJECT_DEFINITION(OBJECT_ID)) AS Isolation_Pat_Index
			FROM sys.procedures
			UNION ALL
			SELECT 'View' AS ObjectType
				, OBJECT_NAME(OBJECT_ID) AS ObjectName
				, PATINDEX('%NOLOCK%', OBJECT_DEFINITION(OBJECT_ID)) AS NoLock_Pat_Index
				, PATINDEX('%ISOLATION%LEVEL%READ%UNCOMMITTED%', OBJECT_DEFINITION(OBJECT_ID)) AS Isolation_Pat_Index
			FROM sys.views
			UNION ALL
			SELECT 'Trigger' AS ObjectType
				, OBJECT_NAME(OBJECT_ID) AS ObjectName
				, PATINDEX('%NOLOCK%', OBJECT_DEFINITION(OBJECT_ID)) AS NoLock_Pat_Index
				, PATINDEX('%ISOLATION%LEVEL%READ%UNCOMMITTED%', OBJECT_DEFINITION(OBJECT_ID)) AS Isolation_Pat_Index
			FROM sys.triggers
			UNION ALL
			SELECT 'Function' AS ObjectType
				, OBJECT_NAME(OBJECT_ID) AS ObjectName
				, PATINDEX('%NOLOCK%', OBJECT_DEFINITION(OBJECT_ID)) AS NoLock_Pat_Index
				, PATINDEX('%ISOLATION%LEVEL%READ%UNCOMMITTED%', OBJECT_DEFINITION(OBJECT_ID)) AS Isolation_Pat_Index
			FROM sys.objects
			WHERE type in ('FN', 'IF', 'FN', 'AF', 'FS', 'FT')
		)

		SELECT ObjectType, ObjectName
		FROM cte_objects
		WHERE (NoLock_Pat_Index = 0 AND Isolation_Pat_Index = 0) 
	END

One thought on “usp_SQLServerCarpenter_Tools_Get_Objects_Performing_Committed_Read

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s