Skip to content

Oracle 内置工具

性能诊断工具

SQL Tuning Advisor

功能说明:自动分析SQL语句并提供优化建议

使用场景

  • 优化高负载SQL语句
  • 分析执行计划问题
  • 自动生成优化建议

使用方法

sql
-- 创建SQL调优任务
DECLARE
  l_task_id VARCHAR2(30);
BEGIN
  l_task_id := DBMS_SQLTUNE.CREATE_TUNING_TASK(
    sql_text => 'SELECT * FROM employees WHERE department_id = :dept_id',
    bind_list => SYS.SQLTUNE.SQL_BINDS(1),
    user_name => 'SCOTT',
    scope => 'COMPREHENSIVE',
    time_limit => 60,
    task_name => 'EMP_DETAILS_TUNING',
    description => 'Tune employee details query');
  
  -- 执行调优任务
  DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name => 'EMP_DETAILS_TUNING');
  
  -- 查看调优建议
  DBMS_OUTPUT.PUT_LINE(DBMS_SQLTUNE.REPORT_TUNING_TASK('EMP_DETAILS_TUNING'));
END;
/

19c vs 21c差异

  • 21c增强了对复杂SQL的分析能力
  • 21c支持更多类型的优化建议

Automatic Workload Repository (AWR)

功能说明:自动收集和分析数据库性能统计信息

使用场景

  • 性能趋势分析
  • 瓶颈识别
  • 容量规划

常用操作

sql
-- 手动创建AWR快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();

-- 查看AWR报告
SELECT output FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(
  (SELECT MAX(snap_id)-1 FROM DBA_HIST_SNAPSHOT),
  (SELECT MAX(snap_id) FROM DBA_HIST_SNAPSHOT),
  1));

管理工具

Database Resource Manager

功能说明:管理数据库资源分配

使用场景

  • 限制特定用户或应用的资源使用
  • 确保关键业务应用获得足够资源

使用方法

sql
-- 创建资源计划
BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.CREATE_PLAN('PROD_PLAN', 'Production Resource Plan');
  
  -- 创建资源消耗组
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('OLTP_APP', 'Online Transaction Processing');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('REPORTING', 'Reporting Applications');
  
  -- 分配CPU资源
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('PROD_PLAN', 'OLTP_APP', 70, 70, NULL, NULL);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE('PROD_PLAN', 'REPORTING', 30, 30, NULL, NULL);
  
  DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/

-- 启用资源计划
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'PROD_PLAN' SCOPE=BOTH;

Data Pump

功能说明:高效的数据导入导出工具

使用场景

  • 数据库迁移
  • 数据备份
  • 跨环境数据移动

使用方法

bash
# 导出数据库
expdp system/password@orcl full=y directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=expdp_full.log

# 导入数据库
impdp system/password@orcl full=y directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=impdp_full.log

# 导出特定表
expdp hr/hr@orcl tables=employees,departments directory=DATA_PUMP_DIR dumpfile=hr_tables.dmp

19c vs 21c差异

  • 21c增强了Data Pump的并行处理能力
  • 21c支持更多云存储集成选项
  • 21c提供了更细粒度的导入导出控制

监控工具

Automatic Database Diagnostic Monitor (ADDM)

功能说明:自动分析数据库性能问题并提供解决方案

使用场景

  • 定期性能检查
  • 问题诊断
  • 性能优化

使用方法

sql
-- 运行ADDM分析
DECLARE
  l_task_id VARCHAR2(30);
BEGIN
  l_task_id := DBMS_ADDM.ANALYZE(
    task_name => 'ADDM_ANALYSIS',
    begin_snap => (SELECT MAX(snap_id)-1 FROM DBA_HIST_SNAPSHOT),
    end_snap => (SELECT MAX(snap_id) FROM DBA_HIST_SNAPSHOT));
  
  -- 查看ADDM报告
  DBMS_OUTPUT.PUT_LINE(DBMS_ADDM.GET_REPORT(l_task_id));
END;
/

19c vs 21c差异

  • 21c提供了更详细的性能建议
  • 21c支持更多类型的性能问题检测
  • 21c增强了对云环境的支持

Real-Time SQL Monitoring

功能说明:实时监控SQL语句执行

使用场景

  • 监控长运行SQL
  • 诊断执行问题
  • 性能调试

使用方法

sql
-- 启用实时SQL监控
ALTER SESSION SET STATISTICS_LEVEL = ALL;

-- 运行SQL语句

-- 查看实时监控报告
SELECT DBMS_SQL_MONITOR.REPORT_SQL_MONITOR() FROM DUAL;

-- 或使用Enterprise Manager查看

19c vs 21c差异

  • 21c增强了实时监控的粒度
  • 21c支持更多监控指标
  • 21c提供了更好的可视化界面

维护工具

Segment Advisor

功能说明:分析段空间使用情况并提供压缩建议

使用场景

  • 识别碎片段
  • 优化存储空间
  • 减少I/O开销

使用方法

sql
-- 分析表段
EXEC DBMS_SPACE_ADVISOR.CREATE_TASK(
  task_type => 'SEGMENT_ADVISOR',
  task_name => 'SEGMENT_ADVISOR_TASK',
  attribute_name => 'TABLE',
  attribute_value => 'SCOTT.EMPLOYEES');

-- 执行分析
EXEC DBMS_SPACE_ADVISOR.EXECUTE_TASK('SEGMENT_ADVISOR_TASK');

-- 查看建议
SELECT * FROM DBA_ADVISOR_FINDINGS WHERE TASK_NAME = 'SEGMENT_ADVISOR_TASK';

Scheduler

功能说明:自动化管理任务调度

使用场景

  • 定期备份
  • 统计信息收集
  • 维护任务

使用方法

sql
-- 创建调度任务
BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
    job_name => 'DAILY_BACKUP',
    job_type => 'EXECUTABLE',
    job_action => '/home/oracle/scripts/backup.sh',
    start_date => SYSTIMESTAMP,
    repeat_interval => 'FREQ=DAILY;BYHOUR=2;BYMINUTE=0;BYSECOND=0',
    enabled => TRUE);
END;
/

常见问题(FAQ)

Q: 如何选择合适的内置工具?

A: 根据具体需求选择:

  • 性能问题:SQL Tuning Advisor、ADDM、AWR
  • 空间问题:Segment Advisor、DBMS_SPACE
  • 自动化任务:DBMS_SCHEDULER
  • 实时监控:Real-Time SQL Monitoring

Q: 内置工具与第三方工具相比有何优势?

A:

  • 与数据库深度集成,性能影响小
  • 官方支持,兼容性好
  • 无需额外 licensing 成本
  • 定期更新,支持最新数据库特性

Q: 如何启用自动统计信息收集?

A:

sql
EXEC DBMS_AUTO_TASK_ADMIN.ENABLE(
  client_name => 'auto optimizer stats collection',
  operation => NULL,
  window_name => NULL);

Q: 如何查看ADDM报告?

A:

sql
SELECT DBMS_ADDM.GET_REPORT(
  (SELECT MAX(task_id) FROM DBA_ADDM_TASKS)
) FROM DUAL;

Q: Data Pump与传统EXP/IMP工具有何区别?

A:

  • Data Pump使用并行处理,速度更快
  • Data Pump支持网络导入导出
  • Data Pump提供更细粒度的导入导出控制
  • Data Pump支持增量导出导入

最佳实践

  1. 定期运行维护任务

    • 每周运行Segment Advisor分析
    • 每月生成AWR报告并分析
    • 每季度运行ADDM分析
  2. 监控实时性能

    • 启用Real-Time SQL Monitoring
    • 设置性能阈值告警
  3. 自动化管理

    • 使用DBMS_SCHEDULER自动执行维护任务
    • 定期审查自动化任务
  4. 工具组合使用

    • 结合AWR和ADDM分析性能问题
    • 使用SQL Tuning Advisor和Real-Time SQL Monitoring诊断SQL问题
  5. 版本差异注意

    • 19c中部分旧工具已被弃用,建议使用新工具
    • 21c增强了对云环境的支持,建议升级时考虑云迁移需求

通过合理使用Oracle内置工具,可以有效提高数据库管理效率,减少人工干预,确保数据库系统的高性能、高可用性和安全性。