餐饮连锁网站建设,游戏公司招聘网站,平板网站开发环境,网站后台模板安装显示不了List item 本文将深入介绍SQL语句的执行过程。 一.在RDBMS#xff08;关系型DB#xff09;中#xff0c;看似很简单的一条已写入DB内存的SQL语句执行过程却非常复杂#xff0c;也就是说#xff0c;你执行了一条诸如select count(*) where id 001 from table_name的非常简… List item 本文将深入介绍SQL语句的执行过程。 一.在RDBMS关系型DB中看似很简单的一条已写入DB内存的SQL语句执行过程却非常复杂也就是说你执行了一条诸如select count(*) where id 001 from table_name的非常简单的语句执行过程可能快的让你察觉不到耗时但是就是这样一条简单的SQL语句RDBMS在后台却为我们做了很多工作过程如下两图所示 二。在Oracle DB中执行一条已经写入DB内存的SQL的流程如下两图网图谢过所示 ①将SQL语句加载入数据库缓冲区首先SQL语句被加载到数据库的缓冲区中这是为了提高数据访问的速度和效率。 ②将SQL语句要操作的数据文件副本加载入数据库缓冲区接下来将要被操作的数据文件的副本也被加载到数据库缓冲区中以便进行后续的修改操作。 ③执行SQL语句修改数据文件副本形成“脏缓冲区”SQL语句被执行对数据文件副本进行修改这些被修改的数据文件副本被称为“脏缓冲区”因为它们还未被写入到原始的数据文件中。 ④CKPT检测到“脏缓冲区”调用DBWnCKPTCheckpoint进程检测到“脏缓冲区”后会调用DBWnDatabase Writer进程。 ⑤在DBWn运行之前先运行LGWR将数据文件的原始状态和数据库的改变记录到Redo Log Files在DBWn运行之前LGWRLog Writer进程先将数据文件的原始状态和数据库的改变记录到Redo Log Files中这是为了确保在系统崩溃时能够恢复数据。 ⑥运行DBWn将“脏缓冲区的内容写入到数据文件”DBWn进程将“脏缓冲区”的内容写入到原始的数据文件中完成数据的持久化存储。 ⑦同时CKPT修改控制文件和数据文件头CKPT进程同时修改控制文件和数据文件头以确保数据库的一致性和完整性。 ⑧SMON回收不必要的空闲资源最后SMONSystem Monitor进程回收不必要的空闲资源以优化数据库的性能和效率。 ⑨如有符合的结果则返回给users.
三.SQL执行过程中的几个重要阶段 1.SQL解析阶段主要介绍硬解析、软解析和软软解析 硬解析Hard Parse 当数据库接收到一条新的 SQL 语句时如果该语句之前从未被执行过数据库需要进行硬解析。硬解析的过程较为复杂和耗时主要包括以下步骤 1.语法分析检查 SQL 语句的语法是否正确确保关键字、表名、列名等的使用符合 SQL 规范。 2.语义检查验证语句中涉及的对象如表、视图、列等是否存在数据类型是否匹配以及用户是否具有执行该语句的权限。 3.查询优化数据库根据各种因素如表的大小、索引的存在、数据的分布等确定执行该 SQL 语句的最佳执行计划。这是一个复杂的过程可能需要尝试多种执行方案并评估其成本。 4.生成执行代码根据选定的执行计划数据库生成可执行的代码。 硬解析需要消耗较多的数据库资源尤其是 CPU 和内存。频繁的硬解析会严重影响数据库的性能。 软解析Soft Parse 如果数据库接收到一条 SQL 语句并且该语句之前已经被执行过并且在共享池中可以找到完全匹配的执行计划那么数据库可以进行软解析。软解析的过程相对简单主要包括以下步骤 1.语法检查快速检查 SQL 语句的语法是否正确。 2.确认执行计划在共享池中查找与该 SQL 语句完全匹配的执行计划并确认其仍然有效。如果执行3.计划可用数据库可以直接使用它无需进行查询优化。 软解析比硬解析快得多因为它避免了查询优化的过程。软解析可以提高数据库的性能特别是对于频繁执行的 SQL 语句。 软软解析Soft Soft Parse 软软解析也称为 “超快软解析” 或 “无锁软软解析”是一种比软解析更高效的解析方式。在某些情况下数据库可以在不获取任何锁的情况下进行软软解析进一步减少了解析的开销。 软软解析通常发生在以下情况 1.共享池中已经存在与当前 SQL 语句完全匹配的执行计划并且该执行计划没有被其他会话修改或删除。 2.数据库可以直接使用该执行计划无需进行任何额外的检查或锁定。软软解析的速度非常快可以极大地提高数据库的性能特别是在高并发环境下。 为了减少硬解析的次数提高数据库性能可以采取以下措施 1.使用绑定变量绑定变量可以使不同的 SQL 语句在共享池中共享执行计划减少硬解析的发生。 2.优化 SQL 语句确保 SQL 语句的编写高效、简洁避免复杂的查询和不必要的操作。 3.调整数据库参数合理调整数据库的参数如共享池大小、游标共享等以优化解析过程。
2.执行计划阶段做什么 SQL 执行计划是数据库为执行特定 SQL 语句而选择的一系列步骤的描述。它详细说明了数据库将如何访问数据、进行连接操作、应用条件筛选等以返回查询结果或执行数据修改操作。 执行计划的组成部分 1.操作步骤 执行计划由一系列操作组成每个操作代表数据库执行的一个具体任务。常见的操作包括 表扫描Table Scan数据库读取表中的数据行。可以是全表扫描Full Table Scan即读取表中的所有行或者索引扫描Index Scan通过索引快速定位特定的行。 索引查找Index Lookup使用索引来查找满足条件的行。可以是唯一索引查找Unique Index Lookup或范围索引查找Range Index Lookup等。 连接操作Join将多个表中的数据行根据连接条件进行合并。常见的连接方式有嵌套循环连接Nested Loops Join、哈希连接Hash Join和排序合并连接Sort Merge Join等。 排序操作Sort对数据进行排序例如在使用 ORDER BY 子句时。 聚合操作Aggregation执行聚合函数如 SUM、AVG、COUNT 等。 2.操作顺序 执行计划中的操作按照特定的顺序执行。数据库根据查询的需求和数据的分布情况选择最佳的操作顺序以最小化执行时间和资源消耗。例如在连接操作中数据库会选择合适的连接顺序以减少中间结果集的大小。 3.操作成本 每个操作都有一个相关的成本估计。成本通常以数据库内部的单位如 I/O 操作次数、CPU 时间等来衡量。数据库在生成执行计划时会尝试选择总成本最低的方案。成本估计基于数据库的统计信息包括表的大小、索引的选择性、数据的分布等。 执行计划的生成过程 1.语法分析和语义检查 当数据库接收到 SQL 语句时首先进行语法分析和语义检查确保语句的正确性和合法性。 2.查询优化 数据库的查询优化器根据 SQL 语句和数据库的统计信息生成多个可能的执行计划。优化器会考虑各种因素如表的大小、索引的存在、数据的分布、连接方式等以选择最优的执行计划。 3.成本评估 对于每个生成的执行计划优化器会进行成本评估。成本评估基于数据库的统计信息和内部的成本模型。优化器会选择成本最低的执行计划作为最终的执行方案。 4.执行计划生成 一旦确定了最优的执行计划数据库会生成相应的执行代码并准备执行 SQL 语句。 查看执行计划的方法 1.EXPLAIN PLAN 语句 可以使用 EXPLAIN PLAN FOR 语句来查看 SQL 语句的执行计划。该语句会将执行计划存储在数据库的一个特定表中可以通过查询该表来获取执行计划的详细信息。 2.SQL Developer 等工具 Oracle SQL Developer 等数据库开发工具提供了图形化的界面可以方便地查看 SQL 语句的执行计划。这些工具通常会以树状图或表格的形式展示执行计划的各个步骤以及相关的成本信息和统计数据。 了解 SQL 执行计划对于优化数据库性能非常重要。通过分析执行计划可以确定 SQL 语句的执行效率找出潜在的性能瓶颈并采取相应的优化措施如创建合适的索引、调整查询语句、优化数据库参数等。
码字不易宝贵经验分享不易请各位支持原创转载注明出处多多关注作者后续不定期分享DB基本知识和排障案例及经验、性能调优等。