Few days ago, I was working on columnstore Index and I came across a problem finding the size of all columnstore Indexes on disk in a particular database.
I have given below the script which can help you find the size of a single columnstore index on disk or all columnstore indexes in a particular database by using
sys.column_store_segments, sys.column_store_dictionaries.
Use AdventureWorks2012 Go Declare @TableName as nvarchar(Max) --If you need columnstore index size for one table --Change the @TableName parameter from NULL to table name Set @TableName =NULL --'SalesOrderDetail_Sample' ;With CTE AS ( SELECT i.object_id ,i.name as [Index_Name] ,SUM(c.on_disk_size)/(1024.0*1024) As [Columstore_Index_size_on_disk_size (In MBs)] FROM sys.indexes AS i JOIN sys.partitions AS p ON i.object_id = p.object_id JOIN sys.column_store_segments AS c ON c.hobt_id = p.hobt_id WHERE i.type_desc = 'NONCLUSTERED COLUMNSTORE' AND ((1=(CASE WHEN @TableName is Null THEN 1 ELSE 0 END) OR i.object_id = object_id(@TableName))) GROUP BY i.object_id,i.name UNION ALL SELECT i.object_id ,i.name as [Index_Name] ,SUM(c.on_disk_size)/(1024.0*1024) As [Columstore_Index_size_on_disk_size (In MBs)] FROM sys.indexes AS i JOIN sys.partitions AS p ON i.object_id = p.object_id JOIN sys.column_store_dictionaries AS c ON c.hobt_id = p.hobt_id WHERE i.type_desc = 'NONCLUSTERED COLUMNSTORE' AND ((1=(CASE WHEN @TableName is Null THEN 1 ELSE 0 END) OR i.object_id = object_id(@TableName))) GROUP BY i.object_id,i.name ) Select object_id,object_name(object_id) as [Table_Name] ,[Index_Name] ,SUM([Columstore_Index_size_on_disk_size (In MBs)]) AS [Columstore_Index_size_on_disk_size (In MBs)] from CTE Group By object_id,[Index_Name]
Reference : MSDN
Leave a Reply