写点什么

SQL 执行计划管理(SPM)

作者:KaiwuDB
  • 2023-07-31
    上海
  • 本文字数:1543 字

    阅读完需:约 5 分钟

SQL 执行计划管理(SPM)

一、SPM 需求背景

任何数据库应用程序的性能在很大程度上都依赖于查询执行,尽管优化器无需用户干预就可以评估最佳计划,但是 SQL 语句的执行计划仍可能由于以下多种原因发生意外更改:版本升级、重新收集优化器统计信息、改变优化器参数或模式/元数据定义。由于无法保证计划始终向更好的情况改变,如果在环境变化时能够维持当前执行计划不变,或者只向更好的情况改变,将是最理想的解决方案。

二、SPM 重要构成

SQL 计划管理 (SPM) 确保运行时性能永远不会因为执行计划的更改而降低。因此,SQL 语句执行时只使用已接受(受信任)的执行计划;跟踪任何计划发展并随后对其进行评估,如果新计划未造成运行时性能改变或运行时性能提高,则接受新计划为经验证的计划。


SQL 计划管理由三部分组成:SQL 计划基准捕获、SQL 计划基准选择、SQL 计划基准发展。


1. SQL 计划基准捕获


创建 SQL 计划基准,包含所有 SQL 语句的受信任的执行计划(ACCEPTED = YES)


(1)如何创建 SQL 计划基准


包含两种方式:


  • 自动捕获执行计划

  • 批量加载执行计划,包含四种技术

  • i 针对给定的 SQL 调优集(STS)加载执行计划 ii 从存储大纲加载执行计划 iii 使用游标缓存中目前的执行计划 iv 从临时表解压缩现有的 SQL 计划基准


(2)如何查看 SQL 计划基准


SQL > select plan_name, sql_handle, enabled, accepted, fixed, module, sql_text from dba_sql_plan_baselines;
PLAN_NAME SQL_HANDLE ENA ACC FIX----------------------------------- -------------------------------- --- --- ---MODULE-----------------------------------------------------SQL_TEXT------------------------------------------------------------------------------------SQL_PLAN_191pkfncj4zuddbd90e8e SYS_SQL_1486b27519127f4d YES YES NOsqlplus@e2c90ae100ab(TNS V1-V3)select * from t1 where idcard > 500 SQL_PLAN_d9zsu6rdznqvgdbd90e80 SYS_SQL_d4ff1a35dbfa5bdfa5b6f YES YES NO sqlplus2e2c90ae100ab(TNS V1-V3) select * from t1 where user_id > 100
复制代码


2. SQL 计划基准选择


(1)执行计划的三个属性


  • ENABLED - 表示计划已启用,可供优化器使用,若计划未设置未 ENABLED,则优化器不考虑此计划。

  • ACCEPTED - 表示该计划已被验证为有效计划,若计划未验证为 ACCEPTED,则优化器不考虑此计划。

  • FIXED - 固定计划,表示优化器只会考虑标记为 FIXED 的执行计划,且从中选择 cost 最低的固定计划。


(2)如何选择 SQL 计划



** 注意这里每次重新计算 cost 的代价不大,因为执行计划是已知的,优化器不必遍历所有的可能,只需根据算法计算出已知计划的 cost 便可。


3. SQL 计划基准发展


(1)SQL 计划基准发展的三种选择


  • 仅当其性能比现有 SQL 计划基准更准更佳时才接收新计划,逻辑如下图

  • 不进行性能检验就接收新计划

  • 运行性能比较并生成报告,但不发展新计划


(2)如何发展 SQL 计划基准


三、使用和管理 SQL 管理库

1. 初始化参数


optimizer_capture_sql_plan_baselines - 控制可重复 SQL 语句的新 SQL 计划基准的自动捕获,默认设置为 FALSE


optimizer_use_sql_plan_baselines - 控制 SQL 计划基准的使用,启用后,优化器在 SQL 计划基准中寻找正在编译的 SQL 语句的计划,如果找到,优化器会计算各个计划的性能开销,然后选择开销最低的计划。默认设置为 TRUE


2. 管理 SQL 管理库的空间使用


管理库包括语句日志、计划历史记录和 SQL 计划基准。


  • 存储:SQL 管理库是数据库字典的组成部分,存储在 SYSAUX 表空间中。SQL 管理库默认占用不超过 SYSAUX 表空间的 10%,可设置为 1%-50%。每周检测,若超过该限制,则会告警。

  • 清理:每周定期清理执行计划,默认超过 53 周未使用的计划都会被清理,可设置为 5-523 周。

用户头像

KaiwuDB

关注

还未添加个人签名 2021-04-29 加入

KaiwuDB 是浪潮集团控股的数据库企业,公司汇聚了全球顶尖的数据库人才,以多模数据库为核心产品,面向工业物联网、数字能源、交通车联网、智慧产业等各大行业领域,提供领先创新的数据服务软件。

评论

发布
暂无评论
SQL 执行计划管理(SPM)_KaiwuDB_KaiwuDB_InfoQ写作社区