Skip to content

Commit 8e349b1

Browse files
oh fine
1 parent 00f34d9 commit 8e349b1

2 files changed

Lines changed: 101 additions & 45 deletions

File tree

sp_IndexCleanup/sp_IndexCleanup.sql

Lines changed: 63 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -518,9 +518,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
518518
HASHBYTES
519519
(
520520
'SHA2_256',
521-
CONVERT(varbinary(8), CONVERT(integer, database_id)) +
522-
CONVERT(varbinary(8), CONVERT(integer, object_id)) +
523-
CONVERT(varbinary(8), CONVERT(integer, index_id))
521+
CONVERT(varbinary(8), database_id) +
522+
CONVERT(varbinary(8), object_id) +
523+
CONVERT(varbinary(8), index_id)
524524
)
525525
) PERSISTED
526526
PRIMARY KEY CLUSTERED
@@ -556,9 +556,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
556556
HASHBYTES
557557
(
558558
'SHA2_256',
559-
CONVERT(varbinary(8), CONVERT(integer, database_id)) +
560-
CONVERT(varbinary(8), CONVERT(integer, object_id)) +
561-
CONVERT(varbinary(8), CONVERT(integer, index_id))
559+
CONVERT(varbinary(8), database_id) +
560+
CONVERT(varbinary(8), object_id) +
561+
CONVERT(varbinary(8), index_id)
562562
)
563563
) PERSISTED
564564
PRIMARY KEY CLUSTERED
@@ -616,10 +616,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
616616
HASHBYTES
617617
(
618618
'SHA2_256',
619-
CONVERT(varbinary(8), CONVERT(integer, database_id)) +
620-
CONVERT(varbinary(8), CONVERT(integer, object_id)) +
621-
CONVERT(varbinary(max), CONVERT(sysname, column_name)) +
622-
CONVERT(varbinary(8), CONVERT(integer, key_ordinal))
619+
CONVERT(varbinary(8), database_id) +
620+
CONVERT(varbinary(8), object_id) +
621+
CONVERT(varbinary(max), column_name) +
622+
CONVERT(varbinary(8), key_ordinal)
623623
)
624624
) PERSISTED,
625625
scope_hash AS
@@ -629,8 +629,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
629629
HASHBYTES
630630
(
631631
'SHA2_256',
632-
CONVERT(varbinary(8), CONVERT(integer, database_id)) +
633-
CONVERT(varbinary(8), CONVERT(integer, object_id))
632+
CONVERT(varbinary(8), database_id) +
633+
CONVERT(varbinary(8), object_id)
634634
)
635635
) PERSISTED
636636
PRIMARY KEY CLUSTERED
@@ -678,8 +678,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
678678
HASHBYTES
679679
(
680680
'SHA2_256',
681-
CONVERT(varbinary(8), CONVERT(integer, database_id)) +
682-
CONVERT(varbinary(8), CONVERT(integer, object_id))
681+
CONVERT(varbinary(8), database_id) +
682+
CONVERT(varbinary(8), object_id)
683683
)
684684
) PERSISTED,
685685
exact_match_hash AS
@@ -712,9 +712,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
712712
HASHBYTES
713713
(
714714
'SHA2_256',
715-
CONVERT(varbinary(8), CONVERT(integer, database_id)) +
716-
CONVERT(varbinary(8), CONVERT(integer, object_id)) +
717-
CONVERT(varbinary(8), CONVERT(integer, index_id))
715+
CONVERT(varbinary(8), database_id) +
716+
CONVERT(varbinary(8), object_id) +
717+
CONVERT(varbinary(8), index_id)
718718
)
719719
) PERSISTED
720720
);
@@ -787,9 +787,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
787787
HASHBYTES
788788
(
789789
'SHA2_256',
790-
CONVERT(varbinary(8), CONVERT(integer, database_id)) +
791-
CONVERT(varbinary(8), CONVERT(integer, object_id)) +
792-
CONVERT(varbinary(8), CONVERT(integer, index_id))
790+
CONVERT(varbinary(8), database_id) +
791+
CONVERT(varbinary(8), object_id) +
792+
CONVERT(varbinary(8), index_id)
793793
)
794794
) PERSISTED
795795
PRIMARY KEY CLUSTERED
@@ -838,8 +838,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
838838
HASHBYTES
839839
(
840840
'SHA2_256',
841-
CONVERT(varbinary(8), CONVERT(integer, database_id)) +
842-
CONVERT(varbinary(8), CONVERT(integer, object_id))
841+
CONVERT(varbinary(8), database_id) +
842+
CONVERT(varbinary(8), object_id)
843843
)
844844
) PERSISTED,
845845
key_filter_hash AS
@@ -872,8 +872,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
872872
HASHBYTES
873873
(
874874
'SHA2_256',
875-
CONVERT(varbinary(8), CONVERT(integer, database_id)) +
876-
CONVERT(varbinary(8), CONVERT(integer, object_id))
875+
CONVERT(varbinary(8), database_id) +
876+
CONVERT(varbinary(8), object_id)
877877
)
878878
) PERSISTED
879879
);
@@ -1747,15 +1747,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17471747
c.column_id,
17481748
column_name = c.name,
17491749
definition = cc.definition,
1750+
/*
1751+
UDF detection: Looks for schema-qualified object references like [schema].[function]
1752+
Note: This is a heuristic check and may have rare false positives if ].[ appears
1753+
in string literals or comments within the computed column definition
1754+
*/
17501755
contains_udf =
17511756
CASE
17521757
WHEN cc.definition LIKE ''%|].|[%'' ESCAPE ''|''
1758+
AND cc.definition LIKE ''%|].|[%(%'' ESCAPE ''|''
17531759
THEN 1
17541760
ELSE 0
17551761
END,
17561762
udf_names =
17571763
CASE
17581764
WHEN cc.definition LIKE ''%|].|[%'' ESCAPE ''|''
1765+
AND cc.definition LIKE ''%|].|[%(%'' ESCAPE ''|''
1766+
AND CHARINDEX(N''['', cc.definition) > 0
1767+
AND CHARINDEX(N''].['', cc.definition) > 0
1768+
AND CHARINDEX(N'']'', cc.definition, CHARINDEX(N''].['', cc.definition) + 3) > 0
17591769
THEN
17601770
SUBSTRING
17611771
(
@@ -1834,15 +1844,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18341844
cc.object_id AS constraint_id,
18351845
constraint_name = cc.name,
18361846
definition = cc.definition,
1847+
/*
1848+
UDF detection: Looks for schema-qualified object references like [schema].[function]
1849+
Note: This is a heuristic check and may have rare false positives if ].[ appears
1850+
in string literals or comments within the computed column definition
1851+
*/
18371852
contains_udf =
18381853
CASE
18391854
WHEN cc.definition LIKE ''%|].|[%'' ESCAPE ''|''
1855+
AND cc.definition LIKE ''%|].|[%(%'' ESCAPE ''|''
18401856
THEN 1
18411857
ELSE 0
18421858
END,
18431859
udf_names =
18441860
CASE
18451861
WHEN cc.definition LIKE ''%|].|[%'' ESCAPE ''|''
1862+
AND cc.definition LIKE ''%|].|[%(%'' ESCAPE ''|''
1863+
AND CHARINDEX(N''['', cc.definition) > 0
1864+
AND CHARINDEX(N''].['', cc.definition) > 0
1865+
AND CHARINDEX(N'']'', cc.definition, CHARINDEX(N''].['', cc.definition) + 3) > 0
18461866
THEN
18471867
SUBSTRING
18481868
(
@@ -2038,7 +2058,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20382058
@current_database_id,
20392059
@object_id;
20402060

2041-
IF ROWCOUNT_BIG() = 0
2061+
SET @rc = ROWCOUNT_BIG();
2062+
2063+
IF @rc = 0
20422064
BEGIN
20432065
IF @debug = 1
20442066
BEGIN
@@ -2292,7 +2314,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22922314
@object_id,
22932315
@min_rows;
22942316

2295-
IF ROWCOUNT_BIG() = 0
2317+
SET @rc = ROWCOUNT_BIG();
2318+
2319+
IF @rc = 0
22962320
BEGIN
22972321
IF @debug = 1
22982322
BEGIN
@@ -2490,7 +2514,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24902514
@current_database_id,
24912515
@object_id;
24922516

2493-
IF ROWCOUNT_BIG() = 0
2517+
SET @rc = ROWCOUNT_BIG();
2518+
2519+
IF @rc = 0
24942520
BEGIN
24952521
IF @debug = 1
24962522
BEGIN
@@ -2725,7 +2751,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27252751
id1.is_unique_constraint
27262752
OPTION(RECOMPILE);
27272753

2728-
IF ROWCOUNT_BIG() = 0
2754+
SET @rc = ROWCOUNT_BIG();
2755+
2756+
IF @rc = 0
27292757
BEGIN
27302758
IF @debug = 1
27312759
BEGIN
@@ -3923,6 +3951,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39233951

39243952
INSERT INTO
39253953
#index_cleanup_results
3954+
WITH
3955+
(TABLOCK)
39263956
(
39273957
result_type,
39283958
sort_order,
@@ -6984,6 +7014,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
69847014

69857015
END TRY
69867016
BEGIN CATCH
7017+
IF @@TRANCOUNT > 0
7018+
BEGIN
7019+
ROLLBACK;
7020+
END;
7021+
69877022
THROW;
69887023
END CATCH;
69897024
END; /*Final End*/

sp_PerfCheck/sp_PerfCheck.sql

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,10 @@ BEGIN
5959
SET NOCOUNT ON;
6060
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
6161

62-
/*
63-
Set version information
64-
*/
62+
BEGIN TRY
63+
/*
64+
Set version information
65+
*/
6566
SELECT
6667
@version = N'2.0',
6768
@version_date = N'20260115';
@@ -1036,15 +1037,26 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10361037
category = N'Concurrency',
10371038
finding = N'High Number of Deadlocks',
10381039
details =
1039-
N'Server is averaging ' +
1040-
CONVERT(nvarchar(20), CONVERT(decimal(10, 2), 1.0 * p.cntr_value /
1041-
NULLIF(DATEDIFF(DAY, osi.sqlserver_start_time, SYSDATETIME()), 0))) +
1042-
N' deadlocks per day since startup (' +
1043-
CONVERT(nvarchar(20), p.cntr_value) +
1044-
N' total deadlocks over ' +
1045-
CONVERT(nvarchar(10), DATEDIFF(DAY, osi.sqlserver_start_time, SYSDATETIME())) +
1046-
N' days). ' +
1047-
N'High deadlock rates indicate concurrency issues that should be investigated.',
1040+
CASE
1041+
WHEN DATEDIFF(DAY, osi.sqlserver_start_time, SYSDATETIME()) >= 1
1042+
THEN
1043+
N'Server is averaging ' +
1044+
CONVERT(nvarchar(20), CONVERT(decimal(10, 2), 1.0 * p.cntr_value /
1045+
DATEDIFF(DAY, osi.sqlserver_start_time, SYSDATETIME()))) +
1046+
N' deadlocks per day since startup (' +
1047+
CONVERT(nvarchar(20), p.cntr_value) +
1048+
N' total deadlocks over ' +
1049+
CONVERT(nvarchar(10), DATEDIFF(DAY, osi.sqlserver_start_time, SYSDATETIME())) +
1050+
N' days). ' +
1051+
N'High deadlock rates indicate concurrency issues that should be investigated.'
1052+
ELSE
1053+
N'Server has recorded ' +
1054+
CONVERT(nvarchar(20), p.cntr_value) +
1055+
N' deadlocks in ' +
1056+
CONVERT(nvarchar(10), DATEDIFF(HOUR, osi.sqlserver_start_time, SYSDATETIME())) +
1057+
N' hours since startup. ' +
1058+
N'High deadlock rates indicate concurrency issues that should be investigated.'
1059+
END,
10481060
url = N'https://erikdarling.com/sp_PerfCheck#Deadlocks'
10491061
FROM sys.dm_os_performance_counters AS p
10501062
CROSS JOIN sys.dm_os_sys_info AS osi
@@ -1094,7 +1106,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10941106
finding = N'Large Security Token Cache',
10951107
details =
10961108
N'TokenAndPermUserStore cache size is ' +
1097-
CONVERT(nvarchar(20), CONVERT(decimal(10, 2), (domc.pages_kb / 1024.0 / 1024.0))) +
1109+
CONVERT(nvarchar(20), CONVERT(decimal(10, 2), ISNULL(domc.pages_kb, 0) / 1024.0 / 1024.0)) +
10981110
N' GB. Large security caches can consume significant memory and may indicate security-related issues ' +
10991111
N'such as excessive application role usage or frequent permission changes. ' +
11001112
N'Consider using dbo.ClearTokenPerm stored procedure to manage this issue.',
@@ -2261,7 +2273,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22612273
CONVERT
22622274
(
22632275
nvarchar(20),
2264-
@stolen_memory_gb
2276+
ISNULL(@stolen_memory_gb, 0)
22652277
) +
22662278
N' GB (' +
22672279
CONVERT
@@ -2270,7 +2282,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22702282
CONVERT
22712283
(
22722284
decimal(10, 1),
2273-
@stolen_memory_pct
2285+
ISNULL(@stolen_memory_pct, 0)
22742286
)
22752287
) +
22762288
N'%)'
@@ -2323,9 +2335,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23232335
N'Memory Usage',
23242336
N'High Stolen Memory Percentage',
23252337
N'Memory stolen from buffer pool: ' +
2326-
CONVERT(nvarchar(20), @stolen_memory_gb) +
2338+
CONVERT(nvarchar(20), ISNULL(@stolen_memory_gb, 0)) +
23272339
N' GB (' +
2328-
CONVERT(nvarchar(10), CONVERT(decimal(10, 1), @stolen_memory_pct)) +
2340+
CONVERT(nvarchar(10), CONVERT(decimal(10, 1), ISNULL(@stolen_memory_pct, 0))) +
23292341
N'% of total memory). This reduces memory available for data caching and can impact performance. ' +
23302342
N'Consider investigating memory usage by CLR, extended stored procedures, linked servers, or other memory clerks.',
23312343
N'https://erikdarling.com/sp_PerfCheck#MemoryStarved'
@@ -5083,5 +5095,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
50835095
r.finding,
50845096
r.database_name,
50855097
r.check_id;
5098+
END TRY
5099+
BEGIN CATCH
5100+
IF @@TRANCOUNT > 0
5101+
BEGIN
5102+
ROLLBACK;
5103+
END;
5104+
5105+
THROW;
5106+
END CATCH;
50865107
END;
50875108
GO

0 commit comments

Comments
 (0)