SQL2005数据库引擎结构(三)

时间:2021-11-20 20:48:11

------------------------------------------------------------------------
-- Author : HappyFlyStone 
-- Date   : 2009-09-22 17:36:30
-- Version: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86) 
--       Apr 14 2006 01:12:25 
--       Copyright (c) 1988-2005 Microsoft Corporation
--       Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
--      转载请注明出处,更多请关注:http://blog.csdn.net/happyflystone
------------------------------------------------------------------------

三、 存储引擎
存储引擎我们可以简单的理解成与数据有关的所有组件。存储引擎的主要任务包括:管理数据库实例文件、磁盘数据分页、缓冲区及I/O操作、数据库事务及并发和锁、大容量装载、备份恢复、DBCC命令等等。
根据相关资料我们可以把这些功能简单的分成五个单元:数据存取、事务、其它操作、缓冲区管理器、SQLOS。这五部分又派生出许多组件,下面先简单的以图来说明:
SQL2005数据库引擎结构(三)

1、 数据存取:一定是分为数据的存与取,不管是存或取都得请求创建或扫描数据页面和索引页面,从关系引擎得到OLEDB数据集或返回OLEDB数据集,在这个组件里包含了从相应的表有效取出或有效存储的全部组件。有一点得注意,本身这个组件不会直接访问或取回磁盘上的数据,它是对缓冲区管理器发出请求,缓冲区管理器从缓冲区取回数据,如果缓冲区没有数据那它会从磁盘上把数据读到缓冲区取回有效数据页面。
2、 行操作:行操作管理影响了实际的物理存储,它操作磁盘上的数据结构,即实际的数据行,行操作管理组件在行内进行操作,同时通知事务管理器对行或列上加上合适的锁。这里的行操作包括了大型字符串的操作或行大小超出单个页面的举出数据,如text、image、ntext等大型unicode、非unicode或二进制文本,
3、 索引操作:和行操作管理组件一样,影响实际的B-树,负责管理操作磁盘上的B-索引树并对B-树进行查找或扫描,另外对B-树的折分或整合以保持B-树的平衡,进而保证了SQLSERVER进行扫描或查找时遍历同样的层数目。
4、 页面管理器:主要负责管理数据库中的页面,提供页面使用情况、使用目的及空间分配情况。管理的页面是以8K为单位的磁盘页面,当然这些页面可以分布在一个或多个物理介质或物理文件上。SQLSERVER提供8种数据页面:数据页面、LOB页面、索引页面、页面*空间面(PFS)、全局分配图页面(GAM)、共享全局分配图页面(SGAM)、索引分配页面(IAM)、大批量修改图页面(BCM)、增量修改图页面(DCM)。
5、 行版本控制器:通这个管理器SQLSERVER可以维护数据行的旧版本行。
6、 事务:事务是SQLSERVER里最基本的单元,一个事务必须具备四种属性,即ACID属性。SQLSERVER通过事务日志管理器管理标识的保存点,以达到对事务里对部分或全部工作进行回滚或取消操作。日志管理器采用一种先写日志技术,使得回滚尚未完成的事务或前滚重做已经提交但未写入物理介质的事务成为可能。先写显然日志的写是同步的,先于事务提交或数据实际修改之前写日志到磁盘。事务管理器另一个作用是与缓冲区通讯。
并发是多个进程同时读数据或修改共享数据时必然面临的问题,活动的互不干扰的并发进程数越多,这个系统的并发性就越好,也是我们必须努力达到的目标。SQLSERVER2005引进了积极并发,也就是我们可以采用两种并发方式来管理访问数据:积极(乐观)并发和消极(悲观)并发。
简单的理解这两种模式就是前者以锁定的方式来避免冲突的发生后者采取积极的态度来解决这种冲突,也就是前者用“高压政策”进行打压,后者很认真帮助协调冲突。我们可以通过 SET TRANSACTION ISOLATION LEVEL来设置并发方式。消极并发是假定冲突是存在的,所以通过锁定操作来保证数据的完整、正确性,这是2005以前版本采用的并发模式。引进的积极并发,假定冲突是极少的,采用前面的行版本控制器生成旧版数据,并保存下来,任何读数据的进程能找到进程开始读取的数据而不受任何正在对数据进行修改操作的影响,相对来说任何正在修改数据的进程不会受其它读进程的影响,因为其它读的进程只是读取行版本控制器生成的旧版数据。极少的冲突发生两个写的进程间,也就是同时写操作的进程间会有冲突发生,SQLSERVER会生成一个错误报告。
不管哪种并发模式,锁的操作都应该应用得到,事务通过锁管理器自动得到相应的级别的锁或提升相应的锁并释放相应的锁资源来解决死锁的发生,保证各种锁的兼容性。
7、 缓冲区管理器:这是一个管理缓冲区内数据页面的分布的管理器,与数据读取及事务管理器协同工作。


今天的任务完成。下面我会再整理一点锁定与并发的文章请大家继续关注我的blog:
 http://blog.csdn.net/happyflystone

85 个解决方案

#1


...

#2


up

#3


恩 不错 变成6秒了

#4


up

#5


学习

#6


不错,一篇好文,收藏起来慢慢欣赏。

#7


学习。

#8


学习!

#9


继续观注石头系列  SQL2005数据库引擎结构(三)

#10


关注

#11


拜莫

#12


牛人是用来膜拜 学习的~

楼下保持阵型~ SQL2005数据库引擎结构(三)

#13


学习!

#14


关注石头兄出书

#15


学习,多谢楼主了

#16


.

#17


不明真相的UP...

#18


tiantianshifen

#19


瞧瞧

#20


0.0.

#21


..

#22


终于出第3集了

#23


MVP就是MVP
顶石头

#24


继续关注,很好,很强大,很猛

#25


学习。。。。。

#26


楼主可以出书了!

#27


后面应该加上
TO BE CONTINUE......

#28


LZ真是强人,谢谢分享!

#29


学习

#30


LZ真是强人

#31


ding

#32


学习
关注

#33


一口气把 3 篇 全看完了。

太深奥了,看不懂,没感觉!

好佩服楼主啊,楼主带带我啊

#34


.

#35


收下了,谢谢

#36


UP

#37


好东西

#38


好东东!

#39


该回复于2010-07-28 09:28:08被版主删除

#40


up

#41


o

#42


正在学习当中多多指点...

#43


   不错,很详细

#44


学习!

#45


学习了

#46


弱弱的问一下,干嘛用?

#47


转转

#48


强烈的顶一个

#49


我没有看太懂,谢谢

#50


使劲的学习。

#1


...

#2


up

#3


恩 不错 变成6秒了

#4


up

#5


学习

#6


不错,一篇好文,收藏起来慢慢欣赏。

#7


学习。

#8


学习!

#9


继续观注石头系列  SQL2005数据库引擎结构(三)

#10


关注

#11


拜莫

#12


牛人是用来膜拜 学习的~

楼下保持阵型~ SQL2005数据库引擎结构(三)

#13


学习!

#14


关注石头兄出书

#15


学习,多谢楼主了

#16


.

#17


不明真相的UP...

#18


tiantianshifen

#19


瞧瞧

#20


0.0.

#21


..

#22


终于出第3集了

#23


MVP就是MVP
顶石头

#24


继续关注,很好,很强大,很猛

#25


学习。。。。。

#26


楼主可以出书了!

#27


后面应该加上
TO BE CONTINUE......

#28


LZ真是强人,谢谢分享!

#29


学习

#30


LZ真是强人

#31


ding

#32


学习
关注

#33


一口气把 3 篇 全看完了。

太深奥了,看不懂,没感觉!

好佩服楼主啊,楼主带带我啊

#34


.

#35


收下了,谢谢

#36


UP

#37


好东西

#38


好东东!

#39


该回复于2010-07-28 09:28:08被版主删除

#40


up

#41


o

#42


正在学习当中多多指点...

#43


   不错,很详细

#44


学习!

#45


学习了

#46


弱弱的问一下,干嘛用?

#47


转转

#48


强烈的顶一个

#49


我没有看太懂,谢谢

#50


使劲的学习。