SQL 执行计划管理(SPM)

这篇具有很好参考价值的文章主要介绍了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 NO
sqlplus@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 计划
SQL 执行计划管理(SPM),KaiwuDB,SPM** 注意这里每次重新计算 cost 的代价不大,因为执行计划是已知的,优化器不必遍历所有的可能,只需根据算法计算出已知计划的 cost 便可。

3. SQL计划基准发展

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

  • 仅当其性能比现有 SQL 计划基准更准更佳时才接收新计划,逻辑如下图
  • 不进行性能检验就接收新计划
  • 运行性能比较并生成报告,但不发展新计划

(2)如何发展 SQL 计划基准
SQL 执行计划管理(SPM),KaiwuDB,SPM

三、使用和管理 SQL 管理库

1. 初始化参数

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

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

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

管理库包括语句日志、计划历史记录和 SQL 计划基准。文章来源地址https://www.toymoban.com/news/detail-622146.html

  • 存储:SQL 管理库是数据库字典的组成部分,存储在 SYSAUX 表空间中。SQL 管理库默认占用不超过 SYSAUX 表空间的10%,可设置为 1%-50%。每周检测,若超过该限制,则会告警。
  • 清理:每周定期清理执行计划,默认超过 53 周未使用的计划都会被清理,可设置为 5-523 周。

到了这里,关于SQL 执行计划管理(SPM)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 玩转MySQL之SQL优化之EXPLAIN执行计划

    从今天开始本系列文章就带各位小伙伴学习数据库技术。 数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。 全文大约 【1965】字 ,不说废话,只讲可以让你学到技术、明

    2024年02月08日
    浏览(56)
  • TiDB与MySQL的SQL差异及执行计划简析

    作者:京东零售 肖勇 TiDB作为NewSQL,其在对MySQL(SQL92协议)的兼容上做了很多,MySQL作为当下使用较广的事务型数据库,在IT界尤其是互联网间使用广泛,那么对于开发人员来说,1)两个数据库产品在SQL开发及调优的过程中,都有哪些差异?在系统迁移前需要提前做哪些准备

    2023年04月17日
    浏览(34)
  • 通过空间占用和执行计划了解SQL Server的行存储索引

    索引是一种帮助查询语句能够快速定位到数据的一种技术。索引的存储方式有行存储索引、列存储索引和内存优化三种存储方式: 行存储索引,使用B+树结构,行存储指的是数据存储格式为堆、聚集索引和内存优化表的表,用于OLTP场景。行存储索引按顺序排列的值列表,每个

    2024年02月04日
    浏览(85)
  • Hive执行计划之只有map阶段SQL性能分析和解读

    目录 目录 概述 1.不带函数操作的select-from-where型简单SQL 1.1执行示例 1.2 运行逻辑分析 1.3 伪代码解释 2.带普通函数和运行操作符的普通型SQL执行计划解读 2.1 执行计划解读 2.2 伪代码解释逻辑 可能所有的SQLboy刚接触SQL语句的时候都是select xxx from xxx where xxx。在hive中,我们把这

    2024年02月08日
    浏览(51)
  • 利用auto_explain查看sql、procedure、function实时执行计划

    postgresql中,利用explain 结合一些选项,如analyze、buffers等命令查看sql语句执行计划在一般场景下已经足够,但是基于如下原因,auto_explain将是一个强有力的补充: 鉴于pg优化器的复杂性,以及柱状图不同值数据的分布,sql不总是按照我们使用explain工具看到的执行计划执行 对于

    2024年02月12日
    浏览(38)
  • 【源码分析】一个flink job的sql到底是如何执行的(一):flink sql底层是如何调用connector实现物理执行计划的

    我们以一条sql为例分析下flink sql与connector是如何配合执行的,本文我们先分析 sql-sqlnode-validate-operation:是如何找到对应的connector实例的 relnode-execGraph:是如何组装node为Graph,在哪找到connector实例的 之后的文章将会继续分析: translateToPlanInternal是如何串联connector其他方法的

    2024年01月16日
    浏览(46)
  • 索引:索引知识重复习,什么是索引、索引的类型、建立索引及【最左匹配原则】、Explain查看sql的执行计划

    开干 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的

    2023年04月09日
    浏览(38)
  • SPM实现framework自动管理和分发

    Swift Package Manager (SPM) 是苹果官方提供的用于管理 Swift 项目的依赖关系和构建过程的工具。它是一个集成在 Swift 编程语言中的包管理器,用于解决在开发过程中管理和构建包依赖项的需求。 那么如何使用SPM管理和分发Objective C编写的二进制库呢?下面为你一一解答。 具体请查

    2024年02月13日
    浏览(29)
  • 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串&UNION与OR的使用注意事项

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2024年02月21日
    浏览(46)
  • 【SQL开发实战技巧】系列(五):从执行计划看IN、EXISTS 和 INNER JOIN效率,我们要分场景不要死记网上结论

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2023年04月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包