此查询通过分析所有活动表的 parts 数量和大小来监控表碎片化情况。它可识别出 parts 过多或过小、可能需要进行合并优化的表。建议定期运行此查询,以便在碎片化问题影响查询性能之前及时发现。
runnable editable
-- 挑战:将数据库和表名替换为生产环境中的实际名称-- 实验:根据您的系统情况调整 part 数量阈值(1000、500、100)SELECT database, table, count() as total_parts, sum(rows) as total_rows, round(avg(rows), 0) as avg_rows_per_part, min(rows) as min_rows_per_part, max(rows) as max_rows_per_part, round(sum(bytes_on_disk) / 1024 / 1024, 2) as total_size_mb, CASE WHEN count() > 1000 THEN 'CRITICAL - Too many parts (>1000)' WHEN count() > 500 THEN 'WARNING - Many parts (>500)' WHEN count() > 100 THEN 'CAUTION - Getting many parts (>100)' ELSE 'OK - Reasonable part count' END as parts_assessment, CASE WHEN avg(rows) < 1000 THEN 'POOR - Very small parts' WHEN avg(rows) < 10000 THEN 'FAIR - Small parts' WHEN avg(rows) < 100000 THEN 'GOOD - Medium parts' ELSE 'EXCELLENT - Large parts' END as part_size_assessmentFROM system.partsWHERE active = 1 AND database NOT IN ('system', 'information_schema')GROUP BY database, tableORDER BY total_parts DESCLIMIT 20;