3.3 监控与管理
监控和管理SQL计划管理:
SELECT sql_handle, plan_name, enabled, accepted, fixed
FROM dba_sql_plan_baselines;– 查看计划基线性能
SELECT * FROM dba_sql_plan_baseline_history;– 禁用计划基线
EXEC DBMS_SPM.ALTER_SQL_PLAN_BASELINE(
sql_handle => ‘sql_handle_value’,
plan_name => ‘plan_name_value’,
attribute_name => ‘ENABLED’,
attribute_value => ‘NO’
);– 删除计划基线
EXEC DBMS_SPM.DROP_SQL_PLAN_BASELINE(
sql_handle => ‘sql_handle_value’
);
Part04-生产案例与实战讲解
4.1 Oracle数据库SQL计划管理案例
以下是一个SQL计划管理的实际案例:
CREATE TABLE fgsales (
sale_id NUMBER PRIMARY KEY,
sale_date DATE,
amount NUMBER,
region VARCHAR2(50)
);– 插入测试数据
INSERT INTO fgsales VALUES (1, SYSDATE – 30, 1000, ‘North’);INSERT INTO fgsales VALUES (2, SYSDATE – 20, 2000, ‘South’);INSERT INTO fgsales VALUES (3, SYSDATE – 10, 1500, ‘East’);INSERT INTO fgsales VALUES (4, SYSDATE, 3000, ‘West’);COMMIT;– 执行SQL语句,捕获计划
SELECT /*+ MONITOR */ region, SUM(amount) AS total_sales
FROM fgsales
GROUP BY region;– 查看SQL ID
SELECT sql_id, sql_text FROM v$sql
WHERE sql_text LIKE ‘%region, SUM(amount)%’ AND rownum = 1;– 创建计划基线
DECLARE
l_plans_loaded PLS_INTEGER;BEGIN
l_plans_loaded := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id => ‘sql_id_value’,
enabled => ‘YES’
);DBMS_OUTPUT.PUT_LINE(‘Plans loaded: ‘ || l_plans_loaded);END;/
2 FROM fgsales
3 GROUP BY region;REGION TOTAL_SALES
——- ———–
North 1000
South 2000
East 1500
West 3000
SQL> SELECT sql_id, sql_text FROM v$sql
2 WHERE sql_text LIKE ‘%region, SUM(amount)%’ AND rownum = 1;SQL_ID SQL_TEXT
————- ————————————————–
abc123 SELECT /*+ MONITOR */ region, SUM(amount) AS total_sales FROM fgsales GROUP BY region
SQL> DECLARE
2 l_plans_loaded PLS_INTEGER;3 BEGIN
4 l_plans_loaded := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
5 sql_id => ‘abc123’,
6 enabled => ‘YES’
7 );8 DBMS_OUTPUT.PUT_LINE(‘Plans loaded: ‘ || l_plans_loaded);9 END;10 /Plans loaded: 1
4.2 性能优化实战
优化SQL计划管理性能:
EXEC DBMS_SPM.ALTER_SQL_PLAN_BASELINE(
sql_handle => ‘sql_handle_value’,
plan_name => ‘plan_name_value’,
attribute_name => ‘FIXED’,
attribute_value => ‘YES’
);– 演进计划基线
DECLARE
l_evolved_plans PLS_INTEGER;BEGIN
l_evolved_plans := DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(
sql_handle => ‘sql_handle_value’
);DBMS_OUTPUT.PUT_LINE(‘Evolved plans: ‘ || l_evolved_plans);END;/– 查看计划执行情况
SELECT * FROM table(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(
sql_handle => ‘sql_handle_value’
));
4.3 故障排除
SQL计划管理故障排除:
SELECT * FROM v$parameter WHERE name = ‘optimizer_capture_sql_plan_baselines’;– 查看计划基线状态
SELECT sql_handle, plan_name, enabled, accepted, fixed, origin
FROM dba_sql_plan_baselines;– 检查计划选择情况
SELECT * FROM v$sql_plan
WHERE sql_id = ‘sql_id_value’;– 重新捕获计划
DECLARE
l_plans_loaded PLS_INTEGER;BEGIN
l_plans_loaded := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id => ‘sql_id_value’,
enabled => ‘YES’
);END;/
Part05-风哥经验总结与分享
5.1 SQL计划管理最佳实践
- 为关键SQL语句创建计划基线
- 定期审查和维护计划基线
- 监控计划演进的效果
- 合理使用固定计划功能
- 结合其他性能优化技术使用
5.2 常见问题与解决方案
- 计划基线过多:定期清理过时的计划基线
- 计划选择不合理:检查统计信息,重新捕获计划
- 性能下降:分析执行计划,调整计划基线
- 计划演进失败:检查SQL语句,确保统计信息准确
5.3 性能调优建议
- 根据SQL语句的重要性设置不同的计划管理策略
- 使用计划基线保护关键SQL语句的性能
- 监控计划基线的使用情况,及时调整
- 结合使用SQL调优顾问和SQL访问顾问
- 定期分析计划基线的性能,淘汰低效计划
更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
from oracle:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
