How can I tell how much disk space each channel uses for message and metadata storage with my Mirth Server using SQL Server as the backing database?
You can use the following query to identify offending channels and metadata tables:
SELECT
COALESCE(c.NAME, s.Name + '.' + t.Name) as Name,
MAX(p.rows) AS RowCounts,
CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
FROM sys.tables t
INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id
LEFT OUTER JOIN D_CHANNELS dc on TRY_CAST(SUBSTRING(t.name, PATINDEX('%[0-9]%', t.name), 10) as bigint) = dc.LOCAL_CHANNEL_ID
LEFT OUTER JOIN CHANNEL c on c.ID = dc.CHANNEL_ID
WHERE t.NAME NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY COALESCE(c.NAME, s.Name + '.' + t.Name)
ORDER BY TotalSpaceMB DESC