事务处理与SQL查询

事物处理


概念

事务完成一个业务逻辑所涉及的一组具有ACID特性的数据库操作
事务管理器( Transaction Manager ):负责对数据库的改变记录日志,以支持系统崩溃后的恢复。
并发控制器: 保障事务的并发执行,以支持多用户访问。

ACID特性:

  • 原子性(Atomicity)
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性(Consistency)
    事务前后数据的完整性必须保持一致。
  • 隔离性(Isolation)
    事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability)
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

DBMS数据存取处理过程

  1. APP向DBMS发出访问数据库的命令,其中包含关系名和查询条件;
  2. DBMS读取数据字典,检查是否存在该关系和相应字段,并对该命令进行语法和用户权限检查。如果检查通过,则执行该命令,否则拒绝并返回出错信息;
  3. 执行该命令时,首先根据数据字典中的定义将命令中的外模式映射到模式,确定应该读取哪些记录;
  4. 根据数据字典中的定义信息,将模式映射到内模式,确定应该读入哪些物理记录及有关的地址信息;
  5. DBMS向操作系统OS发送读取该记录的命令;
  6. OS执行读取数据的有关操作,从指定地址读取记录并存入系统缓冲区;
  7. DBMS将系统缓冲区中的数据转换为模式并进而转换为外模式;
  8. DBMS将系统缓冲区外模式形式的记录返回给应用程序;
  9. DBMS将运行情况登记在运行日志中;
  10. DBMS将命令执行状态返回应用程序;
  11. 若应用程序中的命令需读取多条记录,则反复执行4-10步。

SQL查询处理过程

在这里插入图片描述

  1. 查询分析和词法、语法解析、语义检查 、约束检查
  2. 将 SQL 查询转换为关系代数,选择逻辑查询计划
  3. 选择物理查询计划,在物理查询计划中指明运算的具体顺序和用于实现每一个运算的算法

逻辑查询计划:是一个代数表达式,表示要在数据上执行的若干个具体运算以及有关运算顺序。

查询处理的步骤:

  • 语法分析与翻译
    • 扫描、识别SQL语句,词法、语法解析,判断是否符合SQL语法规则
    • 关系名是否存在,一些约束检查
    • SQL转换为内部表示式(语法分析树、关系代数表达式)
  • 优化
    • 选择一个高效的查询执行计划(选择依据:代价的高低)
  • 执行
    • 按计划执行,并输出结果

查询优化

一个查询有多个表达方式:如 σsalary<75000(Πsalary(instructor))\sigma_{salary< 75000} (\Pi _{salary} (instructor))Πsalary(σsalary<75000(instructor))\Pi _{salary}(\sigma_{salary< 75000} (instructor))
每一个关系代数运算通常有多种计算方法(执行计划),不同的执行计划有不同的代价。
从所有等价的执行计划中选择代价最小的一个。

  1. 基于代价的优化
  2. 启发式优化

基于代价的优化

代价是利用数据库目录(catalog )中的统计信息估算而得的,如:每个关系中的元组数,每个元组的长度,等等。
关键问题:如何度量查询代价、执行关系代数运算的算法、如何进行单元运算的组合,以实现整个表达式计算、如何优化查询,即如何找到代价最小的查询执行计划。
在这里插入图片描述
代价估算:


大型数据库系统中,最主要的代价是磁盘存取代价包括:平均寻道代价,平均读块代价,平均写块代价
为简单起见 ,只考虑磁盘块的传输时间和搜索时间:tr – 传输时间 ts – 搜索时间
S 次寻道和 b个磁盘块传输 的代价为:b * tr+ S * ts
忽略:

  • CPU 代价
  • 将最终结果写回磁盘 的代价
  • 数据已在缓冲区

笛卡尔积
选择
使用索引的选择
涉及比较的选择
投影
排序
嵌套循环连接
索引连接
散列连接
归并连接

启发式优化准则

  1. 选择和投影尽早执行(选择 、投影)
  2. 执行连接之前关系进行预处理(index、sort)
  3. 某些选择 + 笛卡尔积 => 连接
  4. 将常用查询的优化结果(执行计划)存于系统中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章