如果有某个动作违反了这个串行顺序原则,则相关事务就必须被中止撤销。
每个事务开始启动时,要附上一个时间标记(timestamp)。
后启动事务的标记值大于先启动事务的标记值。
对每个数据库数据项Q,要设置两个时间标记:
读时间标记tr,表示成功读过该数据的所有事务的时间标记的最大值。
写时间标记tw:
表示成功写过该数据的所有事务的时间标记的最大值。
基于验证的协议:
基于验证是一种基于优化的并发控制,允许事务不经过封锁直接访问数据,并在“适当的时候”检查事务是否以可串行化的方式运转(这个“适当时候”主要指事务开始写DB对象之前的、一个称被为“有效确认”的、很短的瞬间阶段)。
事务T的执行过程分为三个阶段:
读阶段:
事务正常执行所有操作,此时数据修改放在局部临时变量中而不更新数据库。
检验阶段:
进行有效性检查,T和已经比它先提交的事务进行比较,发现是否有冲突。
写阶段:
如果检验阶段发现无冲突,则事务提交,否则卷回T。
每个事务T的三个阶段对应三个时间标签:
start(T):
开始执行时间
validation(T):
开始进入验证的时间
finish(T):
完成写阶段的时间
注意:
(1)不同的事务的三个阶段可以交叉执行,但三个阶段的顺序不能改变。
(2)事务最终执行的调度顺序是按照事务的进入验证的时间标签来排。
2.处理死锁的方法有哪些?
处理死锁的两种基本方法:
预防法和检测法。
预防法:
TB已对某数据对象加锁,而TA对该数据对象申请加锁时,选择某事务卷回重执,避免死锁出现。
卷回策略分为等待-死亡策略(若老则等年轻,若年轻则卷回)和击伤等待策略(若年轻则等老,若老则年轻卷回)
检测法:
基于等待图。
每个活跃事务对应图中的一个节点,如果事务Ti正等待事务Tj所持有的某个锁,则有一条从Ti对应节点指向Tj对应节点的边。
它可清晰表达事务等待其它事务持有锁的情况。
封锁管理器通过维护等待图来检测死锁循环。
3.什么是多版本并发控制技术?
定义:
这种技术维护同一数据项的多个版本,把正确的版本分配给事务的读操作。
与其他技术不同的是,这种技术从不拒绝读操作。
目标:
事务只读DB元素时无需等待
方法:
维护最近被修改对象的多个版本(每个版本都带有一个写时间戳),当读事务T到来时,让它读TS(T)之前的最近的版本。
4.什么是数据锁转换?
什么是锁升级?
数据锁转换(lockconversion):
是指在特定的条件下,允许已经对数据项X持有锁的事务把锁从一种锁定状态变换到另一种状态。
Oracle会尽可能在最低级别锁定(即限制最少的锁),如果必要,会把这个锁转换为一个更受限的级别。
锁升级(lockescalation):
是指处于同一粒度级别上的锁被数据库升级为更高粒度级别上的锁。
举例来说,数据库系统可以把一个表的100个行级锁变成一个表级锁,但可能会锁住以前没有锁定的大量数据。
如果数据库认为锁是一种稀有资源,而且想避免锁的开销,这些数据库就会频繁使用锁升级。
Oracle数据库中不存在锁升级。
锁升级将会显著地增加死锁的可能性
5.什么是延迟更新与即时更新?
延迟更新是指所有事务的更新都记录在局部事务的工作区(或缓存区),只有在事务到达提交点后才真正更新磁盘上的数据库。
如果事务在提交前失败,则它不会修改数据库。
即时更新是指更新一旦发生就被施加到数据库,而无需等待到提交时刻。
若事务的某些操作达到提交点前被写入数据库,恢复时需要UNDO/REDO;如果事务在达到提交点前所有的更新已被写入数据库,需要算法UNDO/NO-REDO
6.什么是原位更新和镜像更新?
将修改过的缓冲区刷新到磁盘,有两种策略
原位更新(in-placeupdate):
将缓冲区写回磁盘原来的位置,因而会覆盖被修改数据项在磁盘上的旧值,基于原位更新的恢复必须使用日志。
镜像更新(Shadowupdate):
将缓冲区写到磁盘不同的位置,可保存数据项的多个版本。
7.理解用日志进行恢复的过程。
一种日志是把写操作记录下来:
1.当事务Ti开始时,Ti先在日志文件中写入如下的记录:
2.当Ti对记录X执行写操作write(X)时,首先写入日志记录,其中V1是旧值,V2是新值
3.当Ti结束最后一条语句时,写入的日志记录
4.这里可以先假设日志记录是不经过缓存直接写到稳定的存储介质上的。
另外一种日志形式中,把上述X取为一个物理块,则一个日志记录包含了如下三部分:
1.前像(BeforeImage):
当一个事务更新数据时,所涉及的物理块在更新前的映像称为该事务的前像,可以据此使数据库恢复到更新前的状态(撤消更新undo)。
2.后像(AfterImage)
当一个事务更新数据时,所涉及的物理块在更新后的映像称为该事务的后像,可以据此使数据库恢复到更新后的状态(重做redo)。
3.事务状态
成功(committed)/失败(rollback,abort);辅助的结构有活动事务表和提交事务表
WAL规则(TheWrite-AheadLoggingProtocol)
1.先写日志:
更新时先写日志再把数据写到磁盘(保证原子性)
2.在事务提交前写事务相关的所有日志记录到稳定存储介质(保证持久性)
日志恢复例子
恢复例子:
撤消阶段(UndoPhase)
恢复例子:
重做阶段(RedoPhrase)
8.什么是潜入/非潜入和强制/非强制?
潜入/非潜入和强制/非强制确定了何时把数据页从高速缓存写回磁盘
潜入(Steal):
缓存中的数据可在事务提交前写回磁盘
非潜入(No-Steal):
缓存中的数据不能在事务提交前写回磁盘
强制(Force):
缓存中的数据在事务提交后直接写回磁盘(强制地)
非强制(No-Force):
即使修改过的内存块没被写回磁盘,事务也可以提交(因为重做的信息已记录在日志中)。
9.理解ARIES恢复管理算法(PDFdb04page30)
ARIES简介:
它试图以概念上相对简单且系统化的方式,提供一套能确保事务原子性和持性的、具有良好性能的恢复管理算法。
它能与绝大多数并发控制机制很好协调工作的。
这里使用并发封锁控制默认时都假定使用基于strict-2PL协议的封锁调度器,并假设主要基于页级封锁。
少数场合,如逻辑日志中,也可能涉及元组级封锁。
算法流程:
采用基于“steal/no-force”工作模式。
当系统崩溃后重启时,恢复管理器将被激活,并按以下三个阶段进行处理:
分析(Analysis):
鉴别崩溃发生时,缓冲区中的脏页和当时仍活跃的事务。
重做(Redo):
重做从日志的适当起点(比如,被修改的最早脏页对应日志记录)开始的所有动作,恢复系统到崩溃时的DB状态。
撤消(Undo):
撤消上次崩溃时所有未提交事务的动作效果,使DB只反映已提交事务的影响。
(建议看下PDFdb04p33-38的例子加深理解)
10.性能调整的系统的方法有哪些?
优化器做些什么?
调优通常涉及哪些问题?
性能调整的系统的方法有:
(1)正确地设计应用程序
(2)调整应用程序的SQL代码
(3)调整内存
(4)调整I/O
(5)调整争用和其他问题
优化器做的事情是:
1.SQL转换
2.选择访问路径
3.选择连接方法
4.选择连接顺序
调优涉及的问题:
•如何避免对锁的争用,从而增加事务之间的并发性
•如何最小化日志开销,以及不必要的数据转储
•如何优化缓存区的大小,以及进程的进度
•如何对磁盘、RAM和进程之类的资源进行分配使其利用效率最高
•这些问题大都可以通过设置合适的物理DBMS参数、改变设备的配置、修改操作系统的参数参数、改变设备的配置、修改操作系统的参数和其他类似的动作得以解决。
11.什么情况下进行索引的调优?
怎么进行索引的调优?
基于以下几个原因需要对索引进行调优:
(1)由于缺乏索引,某些查询的执行时间过长
(2)某些索引自始自终没有被使用
(3)某些索引建立在被频繁改变的属性上导致系统的¾某些索引建立在被频繁改变的属性上,导致系统的开销过大
怎样进行索引调优:
•借助于相关工具,DBA可从系统获得关于查询执行过程的信息,通过分析执行计划,可以得到产生上述问题的原因基于调优分析可得到产生上述问题的原因,基于调优分析,可能会删除某些索引,也可能要增加新的索引。
•通过重建索引也可以改进系统的性能
12.如何考虑数据库设计的调优?
•如果由于需要频繁使用两个或多个表中的某些属性,可能需要逆规范化现有的表
•必要的时候对表进行垂直划分.(垂直划分,即按照功能划分,把数据分别放到不同的数据库和服务器)
•必要的时候对表进行水平划分.(水平划分,,即把一个表的数据划分到不同的数据库,两个数据库的表结构一样。
怎么划分,应该根据一定的规则,可以根据数据的产生者来做引导,上面的数据是由人产生的,可以根据人的id来划分数据库。
然后再根据一定的规则,先获知数据在哪个数据库)
13.了解查询的调优的原则和方法?
需要进行查询调优的典型情况
(1)查询导致过多的磁盘存取(比如一个精确的匹配查询要对整个表进行扫描)整个表进行扫描)
(2)查询计划表明相关的索引并没有被使用
查询的调优的原则和方法
(1)有些DISTINCT是多余的,在不改变查询结果的前提下可以省略
(2)把多个查询合并为一个查询,可避免使用不必要的临时结果表
(3)FROM子句中表的出现顺序可能会影响连接操作
(4)某些查询优化器在嵌套查询上的性能要比等价的非嵌套查询差
(5)如果选择条件通过OR连接,可能优化器不会使用任何索引
(6把NOT条件转化为肯定表达式
(7)可用连接替换使用IN、=ALL、=ANY、=SOME的嵌入式SELECT块
(8)可以使用多个列上的索引重写WHERE条件
(PDFdb0525-29页很多原则,XX出来的结果也有三十多条,这里我主要列了其中一些比较简单字数少的规则)
14.结合oracle体系结构,理解oracle调优的方法.(通知该题不用整理)
15.什么是数据库集群?
为什么要研究数据库集群?
数据库集群分类有哪些?
数据库集群技术的实现机理?
提高处理速度的办法?
提高可用性的方法?
主流产品有哪些?
数据库集群技术现状及前景。
(1)数据库集群技术即将多台服务器联合起来组成集群来实现综合性能优于单个大型服务器的技术
(2)原因一:
伴随着企业的成长,在业务量提高的同时,数据库的访问量和数据量快速增长,其处理能力和计算强度也相应增大,使得单一设备根本无法承担。
在此情况下,若扔掉现有设备做大量的硬件升级,势必造成现有资源的浪费,而且下一次业务量提升时,又将面临再一次硬件升级的高额投入。
于是,人们希望通过几个中小型服务器组建集群,实现数据库的负载均衡及持续扩展;在需要更高数据库处理速度时,只要简单地增加数据库服务器就可以得到扩展。
原因二:
数据库作为信息系统的核心,起着非常重要的作用,单一设备根本无法保证
系统的持续运行,若发生系统故障,将严重影响系统的正常运行,甚至带来巨大的经济损失。
于是,人们希望通过组建数据库集群,实现数据库的高可用,当某节点发生故障时,系统会自动检测故障并转移故障节点的应用,保证数据库的持续工作。
原因三:
企业的数据库保存着企业的重要信息,一些核心数据甚至关系着企业的命脉,
单一设备根本无法保证数据的安全性,一旦发生丢失,很难再找回来。
于是,人们希望通过组建数据库集群,实现数据集的冗余,通过多份数据来保证安全性。
(3)一般来讲,数据库集群软件根据侧重的方向和试图解决的问题划分为三大类:
负载均衡集群(Loadbalancecluster,LBC)侧重于数据库的横向扩展,提升数据库的性能;高可用性集群(Highavailabilitycluster,HAC)侧重保证数据库应用持续不断;高安全性集群(HighSecuritycluster,HSC)侧重于容灾。
按照集群的架构可分为:
共享磁盘型,非共享磁盘型。
(4)1基于共享磁盘的HA集群
2基于数据库事务日志的复制技术
3基于磁盘的复制技术
4基于SQL语句解析的集群技术
(5)1提高磁盘速度
2.分散数据的存放
3.对称多处理器系统
4.处理负载均衡
(6)提高可用性的四种方法
•硬件级冗余:
让多处理机同时执行同样的任务用以屏蔽瞬时和永久的硬件错误。
有两种实现方法:
构造特殊的冗余处理机和使用多个独立的数据库服务器。
•通讯链路级冗余:
冗余的通讯链路可以屏蔽瞬时和永久的通讯链路级的错误。
•软件级冗余:
由于现代操作系统和数据库引擎的高度并发性,由竞争条件、死锁、以及时间相关引发的错误占据了非正常停机服务的绝大多数原因。
采用多个冗余的运行数据库进程能屏蔽瞬时和永久的软件错误。
基于数据库引擎的集群系统都用多个处理器来实现一个逻辑数据库,它们只能提供部分软件冗余,因为每一瞬间每个处理器执行的都是不同的任务。
•数据冗余:
1.被动更新数据集:
所有目前的数据复制技术(同步或异步),例如磁盘镜像、数据库文件复制以及数据库厂商自带的数据库备份工具都只能产生被动复制数据集。
它一般只用于灾难恢复。
2.主动更新数据集:
这种数据集需要一台或多台备份数据库服务器来管理,它可用于报表生成,数据挖掘,灾难恢复甚至低质量负载均衡。
分同步和异步两种。
异步主动复制数据集:
先把事务处理交给主服务器来完成,然后事务处理再被串行地交给备份服务器以执行同样操作来保证数据一致性。
所有的商用数据库都支持异步主动复制技术。
同步主动复制数据集:
要求所有并发事务处理在所有数据库服务器上同时完成。
直接好处就是解决了队列管理问题,同时通过负载均衡实现更高性能和可用性。
RAC,UDB,MSCS和ASE是用完全串行化并结合两阶段提交协议来实现的,设计目标就是为了获得一份可用于快速灾难恢复的数据集。
(7)主流产品
1.Oracle’sRealApplicationCluster(RAC)
2.MicrosoftSQLClusterServer(MSCS)
3.IBM’sDB2UDBHighAvailabilityCluster(UDB)
4.SybaseASEHighAvailabilityCluster(ASE)
5.MySQLHighAvailabilityCluster(MySQLCS)
6.基于IO、磁盘或操作系统等非数据库引擎的集群
(8)现状:
一、集群系统成为构建高性能计算系统的主流方式
二、64位CPU正在高性能计算系统中日益普及
三、高性能存储系统
四、互连网络
(9)前景
集群在商业应用领域前景广阔:
在传统的高端商业应用领域,以前一直是小型机和大型主机的市场。
随着体系结构的主流化、开放和标准化,IA架构服务器的快速发展以及应用软件厂商的支持,集群系统越来越多的走进高端商业应用领域的视野,如数据库集群应用、中间件集群应用等,应用范围越来越广。
集群技术在国内的应用也越来越广,涉及到石油、天气预报、电信、银行等多个科学计算和商业应用领域。
以前,这些高端计算机系统几乎都是国外厂商所研制,国内服务器厂商在这些领域的市场份额几乎为零。
随着集群技术的不断成熟,构建高端商业应用系统的技术门槛已经降低,国内服务器厂商已经有能力构建大型的高性能计算机系统。
如浪潮、联想、曙光等服务器厂商都推出了面向不同行业领域的高性能集群计算机系统或解决方案,逐渐进入这个以前只有IBM、HP等国际服务器厂商所占领的市场
19.什么是空间数据库?
为什么要研究空间数据库?
如何表达空间数据?
有哪些空间数据库索引方法?
举例说明如何使用空间数据库?
主流产品有哪些?
空间数据库现状及前景
(1)什么是空间数据库
空间数据库系统是描述、存储和处理空间数据及其属性数据的数据库。
(2)为什么要研究空间数据库?
传统数据库管理空间数据的局限:
a.传统数据库管理的是不连续的、相关性较小的数字和字符;而地理数据是连续的,具有很强的空间相关性。
b.传统数据库管理的实体类型少,并且实体类型之间通常只有简单固定的空间关系;而地理空间数据库的实体类型繁多,实体类型之间存在着复杂的空间关系,并且能产生新的关系。
c.传统数据库存贮的数据通常为等长记录的原子数据;而地理空间数据通常是结构化的,其数据项可能很大,很复杂,并且变长记录。
d.传统数据库只操纵和查询文字和数字信息;而地理空间数据库中需要有大量的空间操作和查询,如特征提取、影像分割、影像代数运算、拓扑和相似性查询等。
(3)如何表达空间数据?
a.栅格数据模型
空间单元人为划定成大小相等的正方形网格,有着统一的定位参照系。
每个空间单元只记录其属性值,而不记录它的坐标值。
b.矢量数据模型
把连续的空间按实体集中,每个实体分割成空间单元,记录描述它们位置的坐标数据。
(4)几种有代表性的空间索引结构:
a.kd-树是一种检索k维空间点的二叉树。
b.G-树G-树与栅格索引类似,组成类似B+树的结构。
c.R树用于检索大小非零空间对象,是一种平衡多分树。
有许多种变种,例如R+树、R*树等
(5)举例说明如何使用空间数据库?
例如我们要选择查询距离南京小于或等于10万米、人口大于或等于50万的所有城市的城市名和人口。
可以使用以下查询语句:
SELECT城市名,人口
FROM城市,江苏区域图
WHEREDIST(城市名,南京)<=100000AND人口>=500000
(6)主流产品有哪些?
IBMDB2SpatialExtender、InformixSpatialDatablade、OracleSpatial和SQLServerSpatialTools。
(7)空间数据库现状及前景。
现状:
Oracle公司推出的OracleSpatial,它为空间数据的存储和索引定义了一套数据库结构,并通过扩展OraclePL/SQL为空间数据的处理和操纵提供了一系列函数和过程,从而实现对空间数据服务的支持Informix公司推出的InformixILLustr,对空间数据的处理和操作时通过大DatabaseBladeSpatialModule完成的,它沿袭IUS具有良好的面向对象特征
20.主流数据库对XML做出支持的原因。
有哪些主流数据库对XML做出支持?
举例说明如何使用和对XML数据表达查询请求?
发展现状及前景
随着互联网的迅猛发展和普及,人们可以通过互联网从世界各地实时的接收和发送大量、最新的信息,但在信息交换的过程中存在着一个突出的问题,就是多种多样的数据格式,给信息的有效使用带来了障碍。
XML的扩展性、简明性、通用性和跨平台性,XML的出现更着重于为数据库统一数据格式,提供了数据表示标准和数据交换标准。
数据库对XML做出支持后,就可将数据库的成熟的数据处理能力应用来处理XML数据。
而数据库技术也会因此而朝着XML的发展而不断进步。
DB2、Oracle和SQLServer这三个主流数据库对XML都做出了支持。
以DB2为例:
表名——clients:
Name
Status
contactInfo
Varchar(30)
Varchar(10)
xml
contactInfo——xml结构:
...
...
查询status是gold的用户的email:
selectxmlquery('$c/Client/email'
passingcontactinfoas"c")
fromclients
wherestatus='Gold';
发展现状及前景还没写
21.什么是NoSQL?
NoSQL的核心思想是什么?
现在有哪些NoSQL产品?
其优势和劣势,现状及前景。
NoSQL:
是非关系型数据存储的广义定义。
NoSQL的核心思想:
BASE思想,主要强调基本的可用性,如果你需要高可用性,也就是纯粹的高性能,那么就要以一致性或容错性为牺牲。
它包括下面几个方面:
◆BasicallyAvailble--基本可用
◆Soft-state--软状态/柔性事务
◆EventualConsistency--最终一致性
NoSQL产品:
Cassandra,Dynamo,BigTable,MongoDB
优势:
高并发读写;对海量数据的高效率读写;高扩展性和高可用性
劣势:
NoSQL很难实现数据的完整性。
缺乏强有力的技术支持。
开源数据库从出现到用户接受需要一个漫长的过程。
关系型数据库在设计时更能够体现实际。
现状及前景
NoSQL现在有很多成熟的产品被广泛应用在社交网站和电子商务上;NoSQL在某些应用上绝对是趋势,但是就目前来看肯定还有点问题,毕竟走向成熟总有过程。
22.什么是对象-关系数据库?
为什么要研究对象-关系数据库?
面向对象数据库与对象-关系数据库一样吗?
有哪些主流产品支持对象-关系数据库?
对象-关系数据库一般支持对象的哪些特征?
举例说明如何使用对象-关系数据库.
1.对象关系数据库是关系数据库技术和面向对象方法相结合的产物,它是以关系数据库和SQL为扩展关系模型,以面向对象的程序设计语言为基础的新型数据库模式。
2.传统的关系数据库存在种种缺点:
数据类型表达能力差复杂查询功能差支持长事务能力差环境应变能力差
而对象关系数据库很好地解决了这些问题,所以研究它。
3.面向对象关系数据库和对象-关系数据库不一样,面向对象数据库是数据库技术和面向对象程序设计方法相结合的产物,与关系数据库不相关。
而对象关系数据库是基于关系数据库进行改进的。
4.目前支持对象-关系数据库的主流产品有:
db2,oracle,PostgreSQL对象关系数据库支持的对象特征:
对象标识,封装,继承,多态。
使用对象-关系数据库的实例:
创建类:
父类:
CREATETYPEpersonAS
(namevarchar(20),birthyearINTEGER,addressvarchar(40))
MODEDB2SQL
子类:
CREATETYPEemployeeUNDERpersonAS
(salaryINTEGER)
MODEDB2SQL
23.什么是主动数据库?
为什么要研究主动数据库?
它与传统的关系数据库有什么不同?
如何实现主动数据库?
主动数据库现状及前景