Znalezienie kandydatów na COLUMNSTORE INDEX

Post ze skryptem pierwotnie opublikowany przez Sunil Agarwal na TEJ STRONIE.

-- picking the tables that qualify CCI
-- Key logic is
-- (a) Table does not have CCI
-- (b) At least one partition has > 1 million rows and does not have 
--     unsupported types for CCI
-- (c) Range queries account for > 50% of all operations
-- (d) DML Update/Delete operations < 10% of all operations

select table_id, table_name 
from (select quotename(object_schema_name(dmv_ops_stats.object_id)) + N'.' +
     quotename(object_name (dmv_ops_stats.object_id)) as table_name,
         dmv_ops_stats.object_id as table_id, 
         SUM (leaf_delete_count + range_scan_count + singleton_lookup_count + 
     leaf_update_count) as total_ops_count,
     SUM (leaf_delete_count + leaf_update_count) as total_dml_count,
     SUM (range_scan_count + singleton_lookup_count) as total_query_count,
     SUM (range_scan_count) as range_scan_count
  from sys.dm_db_index_operational_stats (db_id(), 
    null,
    null, null) as dmv_ops_stats 
  where (index_id = 0 or index_id = 1) 
         AND dmv_ops_stats.object_id in (select distinct object_id 
            from sys.partitions p
            where data_compression <= 2 and (index_id = 0 or index_id = 1) 
            AND rows > 1048576
            AND object_id in (select distinct object_id
                            from sys.partitions p, sysobjects o
                     where o.type = 'u' and p.object_id = o.id))
     AND dmv_ops_stats.object_id not in 
( select distinct object_id 
                 from sys.columns
                 where user_type_id IN (34, 35, 241)
                     OR ((user_type_id = 165 OR user_type_id = 167) and max_length = -1))

    AND dmv_ops_stats.object_id not in 
(select distinct object_id
             from sys.partitions
             where data_compression >2)
  group by dmv_ops_stats.object_id 
 ) summary_table

where ((total_dml_count * 100.0/NULLIF(total_ops_count, 0) < 10.0)
and (range_scan_count*100.0/NULLIF(total_query_count, 0) > 50.0))

 

Dodaj komentarz