东南大学数据库课程04-Database Management Systems

Database Management Systems

Contens

  • The Architecture of DBMS
    • The components of DBMS core
    • The process structure of DBMS
  • Database Access Management
  • Query Optimization
  • Transaction Management

4.1 The architecture OF DBMS

the components of DBMS Core

4e9288cb-3696-41fe-9035-4b8b4d3fe4af

Acess management是重中之重,各种元组,关系的物理实现都是由它完成的

The Process Structure of DBMS

  • Single process structure
  • Multi processes structure
  • Multi threads structure
  • Communication protocols between processes/ threads

6cdf1205-2ca8-4ac0-b9c4-8249fd34b7ef

数据库内核与应用代码全部打包到一个执行文件里,开箱即用,一般适用于单用户

a01bcf7e-c40c-468e-88db-905c6da9396c

每个Core作为一个进程和app通信,本机就用pipe,联机就用socket

DAEMON:特殊线程,监控端口的连接和用户的请求
Catalog:目录信息,关于数据的数据
lock table:锁吗,用于并发控制

DAEMON:特殊线程,监控端口的连接和用户的请求
Catalog:目录信息,关于数据的数据
lock table:锁吗,用于并发控制

Core作为线程进行交互,减缓了资源消耗

4.2 DataBase Acess Management

  • The access to database is transferred to the operations on files (of OS) eventually.

  • The file structure and access route offered on it will affect the speed of data access directly.

  • It is impossible that one kind of file structure will be effective for all kinds of data access.

    所以,我们要根据不同的Acess Type(访问类型),来决定要采用那种File organization(文件组织)。

    同时介绍一下常用的index technique(索引技术)和Acess primitives(访问原语)

Acess Types

  1. Query all or most records of a file (>15%)
  2. Query some special record
  3. Query some records (<15%)
  4. Scope query
  5. Update

File Organization

retrieved sequentially:顺序访问

retrieved sequentially:顺序访问

图35.png

Indexed File是最常用的,index常用B+树索引【数据全部存放在叶子结点,其他节点用来导向,叶子结点间有链表用于遍历】

这种文件结构既可以顺序遍历,又可以根据索引快速查询某些元素。

但索引不是越多越好,因为有维护成本

关于Raw disk:一般来说,我们只能控制文件的逻辑结构,但是无法控制文件的物理结构,也就是无法控制文件存储在哪些盘块。而实际上,如果数据的文件能够存储在同一个盘块的同一个磁道上,就能大大减少寻道时间,从而提高查询速度。

Raw disk让操作系统给我们分配一大块存储空间,并在其上自己实现一个文件系统,从而对文件存储的物理结构也做出精确控制。现在大多数的主流数据库都会采用Raw disk,将一片数据存在一个磁道上,减少寻道时间,提高查询效率

46137416-dcd3-4ca6-84ec-3d066a34c93c

4.3 Query Optimization(查询优化)

查询优化的含义

  • Algebra Optimization:代数优化【重写用户的SQL语句】
  • Operation Optimization:操作优化【优化底层实现】

x2+2xy+y2

代数优化 = (x+y)^2

操作优化:找到最有效的加法和乘法操作

Algebra Optimization

easy example

0d1ca4fe-14e3-4623-a288-2f8716c3e960

3e853f04-667b-4b8e-ad4b-f038d82e5833

37c1d039-97ec-408d-8f81-f1c7e5df72ef

18f0667a-938c-49da-acb6-e47cad76e19a

The Equivalent Transform of a Query

0888821d-dbaf-42e0-b857-9726f264b118

db1663d7-c4f2-493d-b480-323a1ac2650c

6bb03791-d416-4e85-8c83-3f33355c5814

4054619b-1a47-45f9-9e58-e400f679262f

unary operation:一元操作

unary operation:一元操作

4.4 Operation Optimization

a422d7a6-6260-4fe2-b3bc-9f003721d50d

Join操作的优化

c6c1f317-0ec9-4c37-80b6-a5aa02667b3c

图40.png

bR:外循环扫描次数

无论几个缓冲区,读盘时都是一块一块读

┌bR/(nB-1)┐×bS:内循环扫描次数

82d4f26b-5edb-449e-b549-18299462b4f1

  • Merge scan:本质是双指针
  • Using index or hash to look for mapping tuples:同上,只不过内循环由于有B+index所以无需扫描,只需要查索引【但是如果索引的重复律>20%,那么相关的Relation就可能分布在该文件对应的大部分块中,此时索引逼近于顺序扫描】
  • Hash Join:若两张表有公共属性,他们的Domain相同,那么可以对这两个属性运用同一个hash进行散列,置于同一个hash文件里。那么可以join的元组必然会在同一个桶里【适用于频繁链接且元组不太会变的情况下】

4.5 Recovery

Introduction

The main roles of recovery mechanism in DBMS are:

  1. Reducing the likelihood of failures (prevention)
  2. Recover from failures (solving)

Restore DB to a consistent state after some failures.

  • Redundancy is necessary.
  • Should inspect all possible failures.【解决所有问题不是必须的,但检测出来是必须的】
  • General method:
  1. Periodical dumping

5aa9544b-747e-481a-84ea-111a0792a231

  1. Backup + Log

3f083f7c-878c-4d2f-9ba2-3f3764d25529

26b052e3-3c1d-4e2a-9295-51fdd76e308e

Trasanction

ec0ddf72-6215-4477-9d5d-d167f192e6f0

Atomic action:操作是原子的

Consistency preservation:并发保护

Isolation:类似于进程的隔离性

Durability:持久性

四个特性合起来,就叫做事务(transaction)的“ACID准则“

只是示意代码,不代表实际语法

只是示意代码,不代表实际语法

Begin transactoin:定义一个事务

没有显式地定义事务,系统就会自动把每一条SQL当作一个事务,在此处显然就不合适

Commit:此时释放排它锁

Some Structures to Support Recovery

非挥发存储器,非易失:硬盘

非挥发存储器,非易失:硬盘

Three kind of Recovery Stragety

88655790-eaa5-4fb1-b1c3-85eae7eedd92

Recovery strategies是上面两者的结合

Log Ahead Rule

图42.png

aad095b6-554c-47b4-8426-f381228d4b53

先备份原数据,然后写DB。

恢复:调出log中的B.I

4f0a3c57-0e97-4885-884c-a5eb5ede8ab8

只差delete这一步了,所以直接删除TID即可

还有一个问题,就是有成千上万的tid,每次都要检查吗,
不,设置check point只检查check point以来运行的事务

Commit Rule

图43.png

2ece7d1d-6573-4d5b-94b2-f1debea843c9

先把要修改的值写入log,然后在一次性把log里的修改值写到DB中。

恢复:重新把log中的A.I写入DB,直到成功

a6ebf3c1-9db1-4a9c-8354-9bd2f5d6c749

全部重搬运,幂等性

相比于第一中,可以延迟加排它锁的时间,并发度更高

二者结合

图43plus.png

99eac156-d95c-43ab-953f-d7aa8d5a51cc

一二种的结合
由于修改了数据库,为了之后undo,要记录Bi到log

6b1e3390-f060-4a44-b2f2-c45c1ab05f7f

第一种情况:部分修改了DB,其他修改还没开始进行,最近的状态是数据库的原状态,所以undo,撤销之前的修改,恢复到原状态,这就是为什么需要B.I→Log,此时等价于Log Ahead Rule

第二种情况:部分修改了DB,其他情况已经开始进行,最近的状态是数据库的修改后状态,所以redo,让未生效的修改生效,此时等价于Commit Rule

78f57e3d-961d-473c-acb2-da0444c5afc6

4.6 Concurrency Control

Introduction

a336336a-3e8a-443b-a4ce-8dcdf047a69e

图44.png

不同的Core Thread访问数据库的不同部分,如果不加以限制,就会产生并发问题

并发问题

115c5e28-022d-40c6-81ff-7efb674d29c8

写写冲突,更新丢失:x=2,那么结果无论是5还是6,都是正确的,但如果是4就是错误的,因为那说明T1对x的更新丢失了

写读冲突,访问脏数据:造成多米诺效应

图44plus.png

Serialization --- the criterion for concurrency consistency

串行化/序列化:并发应执行的量度【能否并发很大程度上要看能否序列化】

schedule:调度; equivalent:等价的

schedule:调度; equivalent:等价的

n个事物,就会有n!中串行化的方式,如上例中x=5/6都是正确的,但是如果用户希望x=5才是正确结果,那么就不该让两个程序并行,系统不保证这一点

Locking Protocol——a way to achieve serializaton

X Locks

相容矩阵:行(已有的锁);列(申请的锁);NL(NONE LOCKS)

相容矩阵:行(已有的锁);列(申请的锁);NL(NONE LOCKS)

Two Phase Locking

90940bcf-1c2d-4380-ae5f-d7c49cf88ea3

unlock update:数据更新锁

unlock update:数据更新锁

End of Transaction

事物结束才释放锁,就不会存在其他进程提前读取数据,也就不会发生多米诺现象

(S,X) Locks

intended:可预期的。(并发读数据库是没有问题的)

intended:可预期的。(并发读数据库是没有问题的)

(S,U,X) Locks

4a2e077a-1ce0-4469-918b-3b2111cf12e4

与After commit数据库恢复方式相配合

图47.png

如果只有SX锁的话,两段红线处就要加X锁,这会导致其他进程在这段期间无法读数据库的内容。U锁的加入使锁的粒度更细了,加强了了并发性

Deadlock & Live Lock

x-lock:不断地写等待

x-lock:不断地写等待

b09228b7-911e-4ea9-ba98-e8ccd9c1a22b

4ff1584c-af7d-4c89-a57c-2a9887df4aef

d6f9dddc-71c5-457e-8c66-1ee5d3ebee57

Wait-die:我比你年老我就先等着,你好了就到我了;我比你年轻我就先挂了,一会儿再试

Wound-wait:我比年老我就为老不尊,直接把你干了,你一会儿再试;我比你年轻我就忍着,等你结束我再来

本质都是年老等年轻,按时间轴的顺序执行,单向等待,不会形成死锁

posted @ 2025-09-15 15:13  Miaops  阅读(19)  评论(0)    收藏  举报