1
0
mirror of https://github.com/alex-bochkov/ssms-addin.git synced 2026-06-15 16:57:06 +02:00

Update tables-info.sql

This commit is contained in:
Alex Bochkov
2023-09-29 19:45:34 -06:00
committed by GitHub
parent 7d3750e6fb
commit c9295eaf53
+54 -76
View File
@@ -1,81 +1,65 @@
WITH RowsStatistics
AS (SELECT SCHEMA_NAME(SO.schema_id) AS SchemaName,
OBJECT_NAME(PS.object_id) AS TableName,
PS.object_id AS ObjectId,
SO.create_date,
COUNT(DISTINCT ps.partition_number) as PartitionCount,
SUM(row_count) AS RowsCount
FROM sys.dm_db_partition_stats AS PS
INNER JOIN
sys.objects AS SO
ON PS.OBJECT_ID = SO.object_id
WHERE PS.index_id < 2
AND PS.OBJECT_ID > 100
AND SCHEMA_NAME(SO.schema_id) <> 'sys'
GROUP BY SCHEMA_NAME(SO.schema_id), OBJECT_NAME(PS.object_id), PS.object_id, SO.create_date),
TableSizes
SET NOCOUNT ON;
DECLARE @RowsStatistics AS TABLE (ObjectId INT, PartitionCount INT, RowsCount BIGINT, INDEX IDX CLUSTERED (ObjectId));
INSERT INTO @RowsStatistics
SELECT ps.object_id AS ObjectId,
COUNT(DISTINCT ps.partition_number) AS PartitionCount,
SUM(ps.row_count) AS RowsCount
FROM sys.dm_db_partition_stats AS ps
INNER JOIN sys.objects AS so ON ps.OBJECT_ID = so.object_id
WHERE ps.index_id < 2
GROUP BY ps.object_id;
DECLARE @TableInfo AS TABLE (SchemaName SYSNAME, TableName SYSNAME, ObjectId INT, HasPK INT, HasClusteredIndex INT, PKisClustered INT, IsReplicated INT, IndexCount INT, CreateDate DATETIME, INDEX IDX CLUSTERED (ObjectId));
INSERT INTO @TableInfo
SELECT
OBJECT_SCHEMA_NAME(t.object_id) AS SchemaName,
OBJECT_NAME(t.object_id) AS TableName,
t.object_id AS ObjectId,
i.HasPK,
i.HasClusteredIndex,
i.PKisClustered,
t.is_replicated as IsReplicated,
COALESCE (I.IndexCount, 0) AS IndexCount,
t.create_date
FROM sys.tables AS t
LEFT OUTER JOIN
(SELECT si.object_id,
COUNT(*) AS IndexCount,
SUM(CASE WHEN si.type_desc = 'CLUSTERED' THEN 1 ELSE 0 END) AS HasClusteredIndex,
SUM(CASE WHEN si.is_primary_key = 1 THEN 1 ELSE 0 END) AS HasPK,
SUM(CASE WHEN si.type_desc = 'CLUSTERED'
AND si.is_primary_key = 1 THEN 1 ELSE 0 END) AS PKisClustered
FROM sys.indexes AS si
GROUP BY si.object_id) AS i
ON t.object_id = i.object_id
WHERE t.is_ms_shipped = 0;
WITH TableSizes
AS (SELECT t.object_id AS ObjectId,
CAST (ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC (36, 2)) AS UsedSpaceMB,
CAST (ROUND(((SUM(CASE WHEN p.data_compression > 0 THEN a.used_pages ELSE 0 END) * 8) / 1024.00), 2) AS NUMERIC (36, 2)) AS UsedSpaceMB_Compressed
CAST (ROUND(((SUM(CASE WHEN p.[data_compression] > 0 THEN a.used_pages ELSE 0 END) * 8) / 1024.00), 2) AS NUMERIC (36, 2)) AS UsedSpaceMB_Compressed
FROM sys.tables AS t
INNER JOIN
sys.indexes AS i
ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions AS p
ON i.object_id = p.OBJECT_ID
AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units AS a
ON p.partition_id = a.container_id
INNER JOIN sys.indexes AS i ON t.object_id = i.object_id
INNER JOIN sys.partitions AS p ON i.object_id = p.object_id AND i.index_id = p.index_id
INNER JOIN sys.allocation_units AS a ON p.partition_id = a.container_id
GROUP BY t.object_id),
TableInformation
AS (SELECT NAME,
T.object_id AS ObjectId,
CASE WHEN NAME IN (SELECT object_name(Parent_object_id)
FROM sys.objects
WHERE type = 'PK') THEN 1 ELSE 0 END AS HasPK,
CASE WHEN NAME IN (SELECT OBJECT_NAME(OBJECT_ID)
FROM sys.indexes AS i
WHERE i.type_desc = 'CLUSTERED'
AND i.object_id = T.object_id) THEN 1 ELSE 0 END AS HasClusteredIndex,
CASE WHEN NAME IN (SELECT object_name(Parent_object_id)
FROM sys.objects
WHERE type = 'PK'
AND object_name(object_id) IN (SELECT name
FROM sys.indexes AS i
WHERE i.type_desc = 'CLUSTERED'
AND i.object_id = T.object_id)) THEN 1 ELSE 0 END AS PKisClustered,
is_replicated,
COALESCE(I.IndexCount, 0) as IndexCount
FROM sys.tables AS T
LEFT JOIN (SELECT si.object_id, COUNT(*) as IndexCount FROM sys.indexes si GROUP BY si.object_id) I
ON T.object_id = I.object_id
WHERE is_ms_shipped = 0),
LastReadWrites
AS (SELECT ObjectID AS ObjectID,
MAX([LastUserUpdate]) AS [LastUserUpdate],
MAX([LastUserSeek]) AS [LastUserSeek],
MAX([LastUserScan]) AS [LastUserScan],
MAX([LastUserLookup]) AS [LastUserLookup],
MAX([LastUserRead]) AS [LastUserRead],
SUM([TotalReads]) AS [TotalReads],
SUM([TotalWrites]) AS [TotalWrites]
FROM (SELECT object_id AS ObjectID,
(last_user_update) AS [LastUserUpdate],
(last_user_seek) AS [LastUserSeek],
(last_user_scan) AS [LastUserScan],
(last_user_lookup) AS [LastUserLookup],
(user_seeks + user_scans + user_lookups) AS [TotalReads],
(last_user_update) AS [LastUserUpdate],
(SELECT Max(v) FROM (VALUES (last_user_seek), (last_user_scan), (last_user_lookup)) AS value(v)) AS [LastUserRead],
(user_updates) AS [TotalWrites],
(SELECT Max(v)
FROM (VALUES (last_user_seek), (last_user_scan), (last_user_lookup)) AS value(v)) AS [LastUserRead]
(user_seeks + user_scans + user_lookups) AS [TotalReads]
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID()) AS a
GROUP BY ObjectID)
SELECT DB_NAME() AS DatabaseName,
rs.SchemaName,
rs.TableName,
ti.SchemaName,
ti.TableName,
FORMAT(RS.RowsCount, 'N0') AS RowsCount,
FORMAT(TS.UsedSpaceMB, 'N0') AS UsedSpaceMB,
FORMAT(TS.UsedSpaceMB_Compressed, 'N0') AS UsedSpaceMB_Compressed,
@@ -84,24 +68,18 @@ SELECT DB_NAME() AS DatabaseName,
TI.HasPK,
TI.HasClusteredIndex,
TI.PKisClustered,
TI.is_replicated,
TI.IsReplicated,
L.LastUserUpdate AS LastWrite,
L.LastUserRead AS LastRead,
L.TotalReads,
L.TotalWrites,
RS.Create_date as CreateDate
FROM RowsStatistics AS RS
FULL OUTER JOIN
TableInformation AS TI
ON RS.ObjectId = TI.ObjectId
LEFT OUTER JOIN
LastReadWrites AS L
ON L.objectId = RS.ObjectId
LEFT OUTER JOIN
TableSizes AS TS
ON TS.ObjectId = TI.ObjectId
ti.CreateDate
FROM @TableInfo AS ti
LEFT JOIN @RowsStatistics AS RS ON RS.ObjectId = TI.ObjectId
LEFT JOIN LastReadWrites AS L ON L.objectId = RS.ObjectId
LEFT OUTER JOIN TableSizes AS TS ON TS.ObjectId = TI.ObjectId
WHERE 1 = 1
--AND rs.TableName IN ('','')
--AND rs.SchemaName = ''
--AND ti.TableName IN ('','')
--AND ti.SchemaName = ''
--AND RS.RowsCount > 0
ORDER BY TS.UsedSpaceMB DESC;