@@ -283,30 +283,75 @@ EXEC sp_executesql @DynamicPivotQuery;
283283const sqlMemoryClerk string = `SET NOCOUNT ON;
284284SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
285285
286- DECLARE @w TABLE (ClerkCategory nvarchar(64) NOT NULL, UsedPercent decimal(9,2), UsedBytes bigint)
287- INSERT @w (ClerkCategory, UsedPercent, UsedBytes)
288- SELECT ClerkCategory
289- , UsedPercent = SUM(UsedPercent)
290- , UsedBytes = SUM(UsedBytes)
291- FROM
292- (
293- SELECT ClerkCategory = CASE MC.[type]
294- WHEN 'MEMORYCLERK_SQLBUFFERPOOL' THEN 'Buffer pool'
295- WHEN 'CACHESTORE_SQLCP' THEN 'Cache (sql plans)'
296- WHEN 'CACHESTORE_OBJCP' THEN 'Cache (objects)'
297- ELSE 'Other' END
298- , SUM(pages_kb * 1024) AS UsedBytes
299- , Cast(100 * Sum(pages_kb)*1.0/(Select Sum(pages_kb) From sys.dm_os_memory_clerks) as Decimal(7, 4)) UsedPercent
300- FROM sys.dm_os_memory_clerks MC
301- WHERE pages_kb > 0
302- GROUP BY CASE MC.[type]
303- WHEN 'MEMORYCLERK_SQLBUFFERPOOL' THEN 'Buffer pool'
304- WHEN 'CACHESTORE_SQLCP' THEN 'Cache (sql plans)'
305- WHEN 'CACHESTORE_OBJCP' THEN 'Cache (objects)'
306- ELSE 'Other' END
307- ) as T
308- GROUP BY ClerkCategory
286+ DECLARE @sqlVers numeric(4,2)
287+ SELECT @sqlVers = LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 4)
288+
289+ IF OBJECT_ID('tempdb..#clerk') IS NOT NULL
290+ DROP TABLE #clerk;
291+
292+ CREATE TABLE #clerk (
293+ ClerkCategory nvarchar(64) NOT NULL,
294+ UsedPercent decimal(9,2),
295+ UsedBytes bigint
296+ );
309297
298+ DECLARE @DynamicClerkQuery AS NVARCHAR(MAX)
299+
300+ IF @sqlVers < 11
301+ BEGIN
302+ SET @DynamicClerkQuery = N'
303+ INSERT #clerk (ClerkCategory, UsedPercent, UsedBytes)
304+ SELECT ClerkCategory
305+ , UsedPercent = SUM(UsedPercent)
306+ , UsedBytes = SUM(UsedBytes)
307+ FROM
308+ (
309+ SELECT ClerkCategory = CASE MC.[type]
310+ WHEN ''MEMORYCLERK_SQLBUFFERPOOL'' THEN ''Buffer pool''
311+ WHEN ''CACHESTORE_SQLCP'' THEN ''Cache (sql plans)''
312+ WHEN ''CACHESTORE_OBJCP'' THEN ''Cache (objects)''
313+ ELSE ''Other'' END
314+ , SUM((single_pages_kb + multi_pages_kb) * 1024) AS UsedBytes
315+ , Cast(100 * Sum((single_pages_kb + multi_pages_kb))*1.0/(Select Sum((single_pages_kb + multi_pages_kb)) From sys.dm_os_memory_clerks) as Decimal(7, 4)) UsedPercent
316+ FROM sys.dm_os_memory_clerks MC
317+ WHERE (single_pages_kb + multi_pages_kb) > 0
318+ GROUP BY CASE MC.[type]
319+ WHEN ''MEMORYCLERK_SQLBUFFERPOOL'' THEN ''Buffer pool''
320+ WHEN ''CACHESTORE_SQLCP'' THEN ''Cache (sql plans)''
321+ WHEN ''CACHESTORE_OBJCP'' THEN ''Cache (objects)''
322+ ELSE ''Other'' END
323+ ) as T
324+ GROUP BY ClerkCategory;
325+ '
326+ END
327+ ELSE
328+ BEGIN
329+ SET @DynamicClerkQuery = N'
330+ INSERT #clerk (ClerkCategory, UsedPercent, UsedBytes)
331+ SELECT ClerkCategory
332+ , UsedPercent = SUM(UsedPercent)
333+ , UsedBytes = SUM(UsedBytes)
334+ FROM
335+ (
336+ SELECT ClerkCategory = CASE MC.[type]
337+ WHEN ''MEMORYCLERK_SQLBUFFERPOOL'' THEN ''Buffer pool''
338+ WHEN ''CACHESTORE_SQLCP'' THEN ''Cache (sql plans)''
339+ WHEN ''CACHESTORE_OBJCP'' THEN ''Cache (objects)''
340+ ELSE ''Other'' END
341+ , SUM(pages_kb * 1024) AS UsedBytes
342+ , Cast(100 * Sum(pages_kb)*1.0/(Select Sum(pages_kb) From sys.dm_os_memory_clerks) as Decimal(7, 4)) UsedPercent
343+ FROM sys.dm_os_memory_clerks MC
344+ WHERE pages_kb > 0
345+ GROUP BY CASE MC.[type]
346+ WHEN ''MEMORYCLERK_SQLBUFFERPOOL'' THEN ''Buffer pool''
347+ WHEN ''CACHESTORE_SQLCP'' THEN ''Cache (sql plans)''
348+ WHEN ''CACHESTORE_OBJCP'' THEN ''Cache (objects)''
349+ ELSE ''Other'' END
350+ ) as T
351+ GROUP BY ClerkCategory;
352+ '
353+ END
354+ EXEC sp_executesql @DynamicClerkQuery;
310355SELECT
311356-- measurement
312357measurement
@@ -325,7 +370,7 @@ SELECT measurement = 'Memory breakdown (%)'
325370, [Cache (objects)] = ISNULL(ROUND([Cache (objects)], 1), 0)
326371, [Cache (sql plans)] = ISNULL(ROUND([Cache (sql plans)], 1), 0)
327372, [Other] = ISNULL(ROUND([Other], 1), 0)
328- FROM (SELECT ClerkCategory, UsedPercent FROM @w ) as G1
373+ FROM (SELECT ClerkCategory, UsedPercent FROM #clerk ) as G1
329374PIVOT
330375(
331376 SUM(UsedPercent)
@@ -339,7 +384,7 @@ SELECT measurement = 'Memory breakdown (bytes)'
339384, [Cache (objects)] = ISNULL(ROUND([Cache (objects)], 1), 0)
340385, [Cache (sql plans)] = ISNULL(ROUND([Cache (sql plans)], 1), 0)
341386, [Other] = ISNULL(ROUND([Other], 1), 0)
342- FROM (SELECT ClerkCategory, UsedBytes FROM @w ) as G2
387+ FROM (SELECT ClerkCategory, UsedBytes FROM #clerk ) as G2
343388PIVOT
344389(
345390 SUM(UsedBytes)
@@ -698,7 +743,7 @@ IF OBJECT_ID('tempdb..#Databases') IS NOT NULL
698743CREATE TABLE #Databases
699744(
700745 Measurement nvarchar(64) NOT NULL,
701- DatabaseName nvarchar(64 ) NOT NULL,
746+ DatabaseName nvarchar(128 ) NOT NULL,
702747 Value tinyint NOT NULL
703748 Primary Key(DatabaseName, Measurement)
704749);
0 commit comments