Oracle 12c新特性:自动检测多列统计信息

0 下载量 164 浏览量 更新于2024-08-31 收藏 62KB PDF 举报
"Oracle 12c新特性之如何检测有用的多列统计信息详解" 在Oracle数据库12c中,引入了一个重要的统计信息管理新特性,即自动检测有用列组信息。这一特性使得数据库能够自动识别对查询优化有显著影响的多列统计信息,从而帮助提升性能。传统的统计信息收集往往只关注单列,但在多列索引或连接查询中,多列统计信息的缺失可能会导致优化器做出不理想的执行计划。 在Oracle 12c之前,用户需要手动收集多列统计信息,这是一个费时费力的过程,尤其是在大型数据库中。而在12c中,通过DBMS_STATS包中的`SEED_COL_USAGE`和`REPORT_COL_USAGE`过程,数据库可以基于工作负载分析哪些列组合可能是有用的统计信息。 首先,我们需要做一些环境准备,例如创建一个测试表`customers_test`,这个表可以是基于实际业务数据的副本,以便于模拟真实的工作负载。在上述例子中,用户已经连接到`sh`用户并创建了`customers_test`表,它是`customers`表的复制。 使用`SEED_COL_USAGE`过程,我们可以开始记录查询活动和列使用情况。这个过程会在后台跟踪查询,收集列的使用信息,但并不会立即生成统计信息。这一步骤是为了收集足够的信息来判断哪些列组可能对优化器有帮助。 然后,通过调用`REPORT_COL_USAGE`,我们可以分析这些收集的数据,生成报告,报告将列出可能有用的列组以及它们在查询中的出现频率。这些信息可以帮助我们决定应该为哪些列组合收集扩展的统计信息。 值得注意的是,这种方法不适用于包含表达式的列统计,因为表达式的统计信息通常更复杂,不能简单地通过列组合来获取。此外,虽然这个特性提供了一定程度的自动化,但仍然需要数据库管理员根据实际情况评估和调整,因为不是所有推荐的列组都适合收集统计信息,有些可能因为数据分布的特殊性或者查询模式的复杂性而无效。 在实际应用中,我们可以结合`DBMS_STATS.GATHER_TABLE_STATS`函数,根据`REPORT_COL_USAGE`的结果,有针对性地收集多列统计信息,这样可以避免无谓的资源消耗,同时确保优化器能做出更好的决策。 总结来说,Oracle 12c的这个新特性提高了统计信息管理的效率和准确性,使得数据库能够更好地适应复杂的工作负载,提升了查询性能。通过自动检测有用的多列统计信息,DBA可以更专注于优化策略的制定,而不是花费大量时间在手动分析和收集统计信息上。