外观
DM 智能索引
智能索引优势
| 优势 | 描述 |
|---|---|
| 自动索引管理 | 自动创建、优化和删除索引,减少人工干预 |
| 提高查询性能 | 基于实际工作负载创建最优索引,提升查询速度 |
| 降低维护成本 | 减少管理员的索引管理工作量 |
| 优化资源利用率 | 避免创建无效索引,减少存储空间和维护开销 |
| 适应工作负载变化 | 随着工作负载变化自动调整索引策略 |
| 智能索引建议 | 提供基于实际工作负载的索引优化建议 |
智能索引功能组件
DM 数据库的智能索引功能由以下组件组成:
| 组件 | 功能 |
|---|---|
| 工作负载分析器 | 收集和分析数据库工作负载信息 |
| 索引建议生成器 | 基于工作负载分析生成索引建议 |
| 索引自动创建器 | 自动创建推荐的索引 |
| 索引优化器 | 优化现有索引,删除无效索引 |
| 索引监控器 | 监控索引使用情况和性能影响 |
| 自适应索引 | 根据实际使用情况动态调整索引结构 |
工作负载分析
智能索引的核心是工作负载分析,通过收集和分析数据库的实际工作负载,识别索引需求和优化机会。
工作负载收集内容
| 收集内容 | 用途 |
|---|---|
| SQL 语句 | 分析查询模式和索引使用情况 |
| 执行计划 | 识别全表扫描和低效索引使用 |
| 索引使用统计 | 分析索引的使用频率和效率 |
| 表访问模式 | 分析表的访问频率和方式 |
| 数据分布 | 分析数据的分布情况,优化索引设计 |
| 系统资源使用 | 分析索引对系统资源的影响 |
工作负载分析方法
DM 数据库采用多种方法进行工作负载分析:
- 实时分析:实时收集和分析数据库工作负载
- 历史分析:分析历史工作负载数据,识别长期趋势
- 抽样分析:对大规模工作负载进行抽样分析,提高分析效率
- 模式识别:识别常见的查询模式和访问模式
- 机器学习:使用机器学习算法预测索引需求和优化机会
配置工作负载分析
sql
-- 启用工作负载分析
ALTER SYSTEM SET "ENABLE_WORKLOAD_ANALYSIS" = 1 SPFILE;
-- 设置工作负载收集级别(1-5,级别越高收集越详细)
ALTER SYSTEM SET "WORKLOAD_ANALYSIS_LEVEL" = 3 SPFILE;
-- 设置工作负载保存时间(天)
ALTER SYSTEM SET "WORKLOAD_RETENTION_DAYS" = 7 SPFILE;
-- 设置工作负载收集间隔(分钟)
ALTER SYSTEM SET "WORKLOAD_COLLECTION_INTERVAL" = 5 SPFILE;索引建议
基于工作负载分析,DM 数据库会生成智能索引建议,帮助管理员优化索引设计。
索引建议类型
| 建议类型 | 描述 |
|---|---|
| 新建索引 | 建议创建新的索引以提高查询性能 |
| 修改索引 | 建议修改现有索引,如添加或删除列 |
| 删除索引 | 建议删除无效或低效的索引 |
| 重组索引 | 建议重组碎片化的索引 |
| 收集统计信息 | 建议收集或更新索引统计信息 |
索引建议生成规则
DM 数据库基于以下规则生成索引建议:
- 查询频率:高频查询优先考虑
- 全表扫描:优先优化全表扫描的查询
- 索引缺失:识别缺少索引的查询条件
- 低效索引:识别使用频率低或选择性差的索引
- 复合索引机会:识别可以创建复合索引的查询模式
- 索引覆盖:识别可以通过索引覆盖提高性能的查询
- 索引选择性:考虑索引的选择性,确保索引有效
查看索引建议
sql
-- 查看索引建议
SELECT * FROM V$INDEX_ADVICE;
-- 查看详细的索引建议
SELECT ADVICE_ID, TABLE_NAME, INDEX_NAME, ADVICE_TYPE, REASON, EXPECTED_PERFORMANCE_GAIN
FROM V$INDEX_ADVICE
ORDER BY EXPECTED_PERFORMANCE_GAIN DESC;
-- 生成索引建议报告
CALL SP_GENERATE_INDEX_ADVICE_REPORT('/dm/reports/index_advice.html');应用索引建议
sql
-- 应用特定的索引建议
CALL SP_APPLY_INDEX_ADVICE(1);
-- 应用所有索引建议
CALL SP_APPLY_ALL_INDEX_ADVICE();
-- 拒绝特定的索引建议
CALL SP_REJECT_INDEX_ADVICE(2);自动索引管理
DM 数据库支持自动索引管理功能,能够根据索引建议自动创建、修改和删除索引,实现索引的自动化管理。
自动索引管理模式
| 模式 | 描述 | 适用场景 |
|---|---|---|
| 建议模式 | 仅生成索引建议,不自动执行 | 对自动操作持谨慎态度的场景 |
| 手动确认模式 | 生成建议后需要手动确认才能执行 | 需要管理员控制的场景 |
| 自动执行模式 | 自动生成建议并执行 | 对自动化要求高的场景 |
| 计划执行模式 | 按照预定计划生成建议并执行 | 需要在特定时间执行的场景 |
配置自动索引管理
sql
-- 启用自动索引管理
ALTER SYSTEM SET "ENABLE_AUTO_INDEX" = 1 SPFILE;
-- 设置自动索引管理模式(0:建议模式, 1:手动确认模式, 2:自动执行模式, 3:计划执行模式)
ALTER SYSTEM SET "AUTO_INDEX_MODE" = 2 SPFILE;
-- 设置自动索引执行计划(每天凌晨2点执行)
ALTER SYSTEM SET "AUTO_INDEX_SCHEDULE" = '0 2 * * *' SPFILE;
-- 设置最大自动创建索引数量
ALTER SYSTEM SET "AUTO_INDEX_MAX_COUNT" = 10 SPFILE;
-- 设置自动索引的最大大小(MB)
ALTER SYSTEM SET "AUTO_INDEX_MAX_SIZE" = 1000 SPFILE;自动索引管理的安全机制
DM 数据库的自动索引管理包含多种安全机制,确保自动操作的安全性:
- 资源限制:限制自动创建索引的数量和大小
- 回滚机制:支持回滚自动创建的索引
- 监控日志:记录所有自动索引操作
- 性能影响评估:在创建索引前评估性能影响
- 测试环境验证:支持在测试环境验证索引建议
- 管理员审核:支持管理员审核自动索引操作
自适应索引
自适应索引是 DM 数据库的一项创新功能,能够根据实际使用情况动态调整索引结构,提高索引的适应性和性能。
自适应索引特点
| 特点 | 描述 |
|---|---|
| 动态结构调整 | 根据实际使用情况调整索引结构 |
| 自适应数据分布 | 适应数据分布的变化 |
| 智能索引列顺序 | 根据查询模式调整索引列顺序 |
| 自动索引压缩 | 根据使用情况自动调整索引压缩级别 |
| 分区自适应 | 适应分区表的访问模式 |
| 实时优化 | 实时监控和优化索引性能 |
自适应索引类型
DM 数据库支持多种自适应索引类型:
| 类型 | 描述 | 适用场景 |
|---|---|---|
| 自适应 B 树索引 | 根据查询模式调整 B 树索引结构 | 普通查询场景 |
| 自适应位图索引 | 根据数据基数调整位图索引结构 | 低基数列 |
| 自适应复合索引 | 根据查询条件调整复合索引列顺序 | 多列查询场景 |
| 自适应分区索引 | 根据分区访问模式优化分区索引 | 分区表场景 |
| 自适应压缩索引 | 根据使用情况调整索引压缩级别 | 存储空间受限场景 |
配置自适应索引
sql
-- 创建自适应索引
CREATE INDEX idx_sales_adaptive ON sales(sales_date, product_id) ADAPTIVE;
-- 修改现有索引为自适应
ALTER INDEX idx_sales_date ADAPTIVE;
-- 设置自适应索引的调整频率(分钟)
ALTER SYSTEM SET "ADAPTIVE_INDEX_ADJUST_INTERVAL" = 60 SPFILE;
-- 设置自适应索引的调整阈值
ALTER SYSTEM SET "ADAPTIVE_INDEX_ADJUST_THRESHOLD" = 10 SPFILE;自适应索引监控
sql
-- 查看自适应索引信息
SELECT INDEX_NAME, IS_ADAPTIVE, ADAPTIVE_TYPE
FROM DBA_INDEXES
WHERE IS_ADAPTIVE = 'YES';
-- 查看自适应索引的调整历史
SELECT * FROM V$ADAPTIVE_INDEX_ADJUST_HISTORY;
-- 查看自适应索引的性能统计
SELECT * FROM V$ADAPTIVE_INDEX_STATISTICS;索引使用监控
智能索引功能包含强大的索引监控能力,能够监控索引的使用情况和性能影响,为索引优化提供依据。
监控内容
| 监控内容 | 用途 |
|---|---|
| 索引使用频率 | 分析索引的使用频率,识别无效索引 |
| 索引访问路径 | 分析索引的访问路径,优化索引设计 |
| 索引性能影响 | 分析索引对查询性能的影响 |
| 索引维护开销 | 分析索引的维护开销,平衡查询性能和维护成本 |
| 索引存储空间 | 监控索引占用的存储空间 |
| 索引碎片 | 监控索引碎片情况,及时重组索引 |
监控视图
| 视图名称 | 用途 |
|---|---|
| V$INDEX_USAGE | 索引使用情况统计 |
| V$INDEX_PERFORMANCE | 索引性能统计 |
| V$INDEX_MAINTENANCE | 索引维护开销统计 |
| V$INDEX_STORAGE | 索引存储空间统计 |
| V$INDEX_FRAGMENTATION | 索引碎片统计 |
索引监控配置
sql
-- 启用索引监控
ALTER SYSTEM SET "ENABLE_INDEX_MONITORING" = 1 SPFILE;
-- 设置索引监控级别(1-5,级别越高监控越详细)
ALTER SYSTEM SET "INDEX_MONITORING_LEVEL" = 3 SPFILE;
-- 设置索引监控数据保存时间(天)
ALTER SYSTEM SET "INDEX_MONITORING_RETENTION_DAYS" = 7 SPFILE;查看监控信息
sql
-- 查看索引使用情况
SELECT INDEX_NAME, TABLE_NAME, USE_COUNT, LAST_USED_TIME, EFFECTIVE_RATIO
FROM V$INDEX_USAGE
ORDER BY USE_COUNT DESC;
-- 查看无效索引
SELECT INDEX_NAME, TABLE_NAME, USE_COUNT, LAST_USED_TIME
FROM V$INDEX_USAGE
WHERE USE_COUNT = 0 AND LAST_USED_TIME < SYSDATE - 30;
-- 查看索引性能影响
SELECT INDEX_NAME, AVG_QUERY_TIME_BEFORE, AVG_QUERY_TIME_AFTER, PERFORMANCE_IMPROVEMENT
FROM V$INDEX_PERFORMANCE;索引优化建议
除了自动索引管理外,DM 数据库还提供了丰富的索引优化建议,帮助管理员手动优化索引。
索引设计建议
| 建议类型 | 具体建议 |
|---|---|
| 索引列选择 | 优先为经常出现在 WHERE 子句、JOIN 条件和 ORDER BY 子句中的列创建索引 |
| 复合索引顺序 | 将选择性高的列放在复合索引的前面 |
| 索引覆盖 | 考虑创建覆盖索引,包含查询所需的所有列 |
| 避免过度索引 | 避免为表创建过多索引,减少维护开销 |
| 索引类型选择 | 根据列的基数和查询模式选择合适的索引类型 |
| 分区索引 | 为大表创建分区索引,提高查询性能和维护效率 |
| 索引压缩 | 对大型索引使用索引压缩,减少存储空间 |
索引维护建议
| 建议类型 | 具体建议 |
|---|---|
| 定期重组索引 | 定期重组碎片化的索引,提高索引性能 |
| 更新统计信息 | 定期更新索引统计信息,确保优化器生成准确的执行计划 |
| 删除无效索引 | 删除长期未使用的无效索引,减少维护开销 |
| 监控索引性能 | 持续监控索引使用情况和性能影响 |
| 适应工作负载变化 | 随着工作负载变化调整索引策略 |
生成索引优化报告
sql
-- 生成索引优化报告
CALL SP_GENERATE_INDEX_OPTIMIZATION_REPORT('/dm/reports/index_optimization.html');
-- 生成特定表的索引优化报告
CALL SP_GENERATE_TABLE_INDEX_REPORT('sales', '/dm/reports/sales_index.html');智能索引与性能
智能索引对性能的影响
| 方面 | 影响 | 说明 |
|---|---|---|
| 查询性能 | 正面影响 | 自动创建最优索引,提高查询速度 |
| 写入性能 | 轻微负面影响 | 索引维护会增加写入开销 |
| 存储空间 | 优化利用 | 避免创建无效索引,优化存储空间使用 |
| CPU 开销 | 轻微增加 | 工作负载分析和索引管理会增加 CPU 开销 |
| 内存使用 | 优化利用 | 智能索引优化减少无效索引,降低内存占用 |
性能优化建议
- 合理配置智能索引参数:根据硬件资源和业务需求调整智能索引的各项参数
- 监控系统资源使用:监控智能索引对系统资源的影响,避免资源过度消耗
- 平衡查询和写入性能:在查询性能和写入性能之间取得平衡
- 结合手动优化:将智能索引建议与管理员的专业知识结合,做出最佳决策
- 定期评估效果:定期评估智能索引的效果,调整配置和策略
- 考虑工作负载特点:根据工作负载特点调整智能索引策略,如读写比例、查询模式等
智能索引最佳实践
1. 智能索引配置策略
| 场景 | 建议配置 |
|---|---|
| 开发测试环境 | 启用自动索引管理,使用自动执行模式,加速开发和测试 |
| 生产环境初期 | 使用建议模式或手动确认模式,逐步过渡到自动执行模式 |
| 成熟生产环境 | 根据实际情况选择自动执行模式或计划执行模式 |
| 写入密集型环境 | 降低自动索引创建频率,平衡查询和写入性能 |
| 读取密集型环境 | 启用自动索引管理,优先考虑查询性能 |
2. 智能索引与手动管理结合
- 利用智能索引建议:将智能索引建议作为手动索引管理的参考
- 定期审核自动创建的索引:确保自动创建的索引符合业务需求
- 结合业务知识:将业务知识与智能索引建议结合,做出最佳决策
- 手动创建特殊索引:对于特殊查询场景,手动创建针对性的索引
- 定期评估自动索引效果:评估自动索引对性能的实际影响
3. 工作负载分析最佳实践
- 收集足够的工作负载数据:确保收集了足够的工作负载数据,提高分析准确性
- 考虑工作负载的代表性:确保收集的工作负载具有代表性,反映真实的业务需求
- 定期更新工作负载分析:定期更新工作负载分析,适应业务变化
- 分析峰值负载:特别关注峰值负载下的索引需求
- 分析历史趋势:分析长期的工作负载趋势,预测未来的索引需求
版本差异
DM 7 vs DM 8 智能索引功能差异
| 差异点 | DM 7 | DM 8 |
|---|---|---|
| 工作负载分析 | 基础的工作负载收集 | 高级的工作负载分析功能 |
| 索引建议 | 简单的索引建议 | 基于机器学习的智能索引建议 |
| 自动索引管理 | 不支持 | 完整的自动索引管理功能 |
| 自适应索引 | 不支持 | 支持多种自适应索引类型 |
| 索引监控 | 基础的索引监控 | 全面的索引监控和分析 |
| 智能索引报告 | 不支持 | 丰富的智能索引报告 |
DM 8.1 新特性
- 增强了工作负载分析功能,支持更细粒度的分析
- 优化了索引建议算法,提高了建议的准确性
- 增加了自适应索引类型,支持更多场景
- 优化了自动索引管理机制,提高了安全性和可靠性
- 增强了索引监控功能,提供了更丰富的监控指标
- 支持与机器学习算法的深度集成,提高了智能索引的准确性
常见问题(FAQ)
Q1: 智能索引会自动删除现有索引吗?
A1: 智能索引会分析现有索引的使用情况,如果发现某个索引长期未使用或低效,会生成删除建议。默认情况下,智能索引不会自动删除现有索引,需要管理员确认后执行。管理员可以通过配置自动索引管理模式来控制是否自动删除索引。
Q2: 智能索引如何处理复合索引?
A2: 智能索引会分析查询中使用的列组合,生成复合索引建议。对于复合索引,智能索引会考虑列的顺序,将选择性高的列放在前面,以提高索引的效率。智能索引还会分析复合索引的覆盖情况,建议创建覆盖索引以提高查询性能。
Q3: 如何评估智能索引的效果?
A3: 可以通过以下方式评估智能索引的效果:
- 比较启用智能索引前后的查询性能
- 分析自动创建的索引的使用情况和性能影响
- 查看智能索引生成的性能改进报告
- 监控系统资源使用情况,确保智能索引不会过度消耗资源
- 评估管理员的索引管理工作量变化
Q4: 智能索引适合所有场景吗?
A4: 智能索引适合大多数场景,但在某些特殊场景下需要谨慎使用:
- 写入密集型场景:智能索引可能会增加写入开销
- 资源受限环境:智能索引需要额外的 CPU 和内存资源
- 特殊查询场景:对于复杂的特殊查询,可能需要手动创建针对性的索引
- 对性能有严格要求的场景:需要仔细评估智能索引的效果
Q5: 如何禁用智能索引功能?
A5: 可以通过以下方式禁用智能索引功能:
- 禁用工作负载分析:
ALTER SYSTEM SET "ENABLE_WORKLOAD_ANALYSIS" = 0 SPFILE; - 禁用自动索引管理:
ALTER SYSTEM SET "ENABLE_AUTO_INDEX" = 0 SPFILE; - 禁用自适应索引:
ALTER INDEX idx_name NOADAPTIVE; - 禁用索引监控:
ALTER SYSTEM SET "ENABLE_INDEX_MONITORING" = 0 SPFILE;
Q6: 智能索引生成的建议是否总是正确的?
A6: 智能索引基于实际工作负载生成建议,具有较高的准确性,但并不总是完美的。建议将智能索引建议与管理员的专业知识结合,考虑业务需求、系统资源和长期规划,做出最佳决策。
Q7: 如何处理智能索引生成的大量建议?
A7: 可以通过以下方式处理大量的索引建议:
- 按预期性能提升排序,优先应用性能提升明显的建议
- 考虑系统资源限制,分批应用建议
- 结合业务知识,筛选出符合业务需求的建议
- 评估建议的长期影响,避免短期优化带来的长期问题
- 考虑索引的维护成本,避免创建过多索引
Q8: 智能索引如何适应工作负载变化?
A8: 智能索引通过持续的工作负载分析来适应工作负载变化:
- 定期收集和分析工作负载数据
- 当工作负载发生变化时,重新生成索引建议
- 自动调整现有索引,如修改索引结构、压缩级别等
- 创建新的索引以适应新的查询模式
- 删除不再使用的索引,优化资源利用
Q9: 如何查看智能索引的操作日志?
A9: 可以通过以下方式查看智能索引的操作日志:
- 查询 V$INDEX_ADVICE 视图查看索引建议
- 查询 V$AUTO_INDEX_OPERATIONS 视图查看自动索引操作
- 查询 V$ADAPTIVE_INDEX_ADJUST_HISTORY 视图查看自适应索引调整历史
- 查看数据库日志,了解智能索引的详细操作
- 生成智能索引报告,查看完整的操作记录和效果评估
Q10: 智能索引与传统索引管理的关系是什么?
A10: 智能索引是传统索引管理的增强和补充,而不是替代:
- 智能索引可以自动化大部分索引管理工作,减少管理员负担
- 传统索引管理的专业知识仍然重要,可以与智能索引结合使用
- 对于特殊场景和复杂查询,传统的手动索引设计仍然必要
- 智能索引建议可以作为手动索引管理的参考,提高管理效率
- 两者结合可以实现更高效、更准确的索引管理
