1、2018年5月11日,第1页,第12章 SQL Server的并发性,SQL Server实用简明教程(第二版) 清华大学出版社,教学目标教学重点教学过程,2018年5月11日,第2页,教学目标,在Microsoft SQL Server系统中,通过采用事务和锁机制,解决了数据库系统的并发性问题。本章将全面阐述Microsoft SQL Server的并发性技术。,2018年5月11日,第3页,教学重点,了解并发性的基本概念理解事务的特点和作用掌握事务管理技术理解锁的作用掌握定制锁技术掌握查看和理解锁信息技术,2018年5月11日,第4页,教学过程,并发性的概念 事务 使用锁,2018年5月1
2、1日,第5页,12.1 并发性的概念,并发性就是两个或两个以上的用户同时对数据执行的操作。并发性问题就是并发操作时遇到的各种问题。在Microsoft SQL Server 2000系统中,解决并发性问题采取了事务和锁机制。,2018年5月11日,第6页,事务和锁的特点,事务是一个单元的工作,要么全做,要么全不做;事务保证操作的一致性和可恢复性;每一条Transact-SQL语句都可以是一个事务;实际使用的事务是用户定义的事务,它包括一系列操作或语句;在多服务器环境中,使用用户定义的分布式事务保证操作的一致性;锁是保证并发控制的手段;可以锁定的资源包括行、页、Extent、表和数据库;锁的基本
3、类型是共享锁和排它锁;特殊类型的锁包括意图锁、修改锁和模式锁;共享锁允许其他事务继续使用锁定的资源;排它锁只允许一个事务访问数据;系统本身可以处理死锁;用户可以根据实际情况定制锁的一些特征。,2018年5月11日,第7页,12.2 事务,事务的概念 事务的工作原理 使用事务的考虑 事务的类型,2018年5月11日,第8页,事务的概念,事务是指一个单元的工作。作为一个逻辑单元,它必须具备4个属性:自动性、一致性、独立性和持久性。自动性是指事务必须是一个自动的单元工作,要么执行全部数据的修改,要么全部数据的修改都不执行。一致性是指当事务完成时,必须使所有数据都具有一致的状态。在关系型数据库中,所有
4、的规则必须应用到事务的修改上,以便维护所有数据的完整性。所有的内部数据结构,例如树状的索引与数据之间的链接,在事务结束之后必须保证正确。独立性是指并行事务的修改必须与其他并行事务的修改相互独立。一个事务看到的数据要么是另外一个事务修改这些数据之前的状态,要么是第二个事务已经修改完成的数据,但是这个事务不能看到正在修改的数据。这种特征也称为串行性。持久性是指当一个事务完成之后,它的影响永久性地产生在系统中,也就是这种修改写到了数据库中。,2018年5月11日,第9页,事务的工作原理,写到事务日志中的操作一般有两种:一种是针对数据的操作,一种是针对任务的操作。 系统自动生成一个检查点机制,这个检查
5、点周期地发生。检查点的周期是系统根据用户定义的时间间隔和系统活动的频度由系统自动计算出来的时间间隔。,2018年5月11日,第10页,使用事务的考虑,在使用事务时,原则上应该使事务尽可能短并且要避免事务嵌套。事务应该尽可能短,这是因为比较长的事务增加了事务占用数据的时间,使其他必须等待访问该事务锁定数据的事务延长了等待访问数据的时间。在使用事务时,为了使事务尽可能短,应该采取一些相应的方法。为了最小化时间,在使用某些Transact-SQL语句时一定要非常小心。 在事务的进行过程中就可以避免进行一些耗费时间的交互式操作以缩短事务进程的时间。 在一个用户定义的事务中,应该尽可能地使用一些数据操纵
6、语言。而对于一些数据定义语言,应该尽可能地少用或不用 。,2018年5月11日,第11页,事务的类型,根据系统的设置,可以把事务分成两种类型。一种是系统提供的事务,另一种是用户定义的事务。系统提供的事务是指在执行某些语句时,一条语句就是一个事务。这时要知道,一条语句的对象既可能是表中的一行数据,也可能是表中的多行数据,甚至是表中的全部数据。 另外一种事务,是用户明确定义的事务。在实际应用中,大多数的事务处理就是采用了用户定义的事务来处理。在开发应用程序时,可以使用BEGIN TRANSACTION语句来定义明确的用户定义的事务。,2018年5月11日,第12页,12.3 使用锁,锁的概念 SQ
7、L Server的空间 可以锁定的资源 锁的类型和其兼容性 死锁问题 会话级锁和表级锁 锁的信息,2018年5月11日,第13页,锁的概念,锁就是防止其他事务访问指定资源的手段。锁是实现并发控制的主要方法,是多个用户能够同时操纵同一个数据库中的数据而不发生数据不一致现象的重要保障。,2018年5月11日,第14页,SQL Server的空间,在Microsoft SQL Server系统中,最小的空间管理单位是页,一个页有8K。所有的数据、日志、索引都存放在页上。另外,使用页还有一个限制,这就是表中的一行数据必须在同一个页上,不能跨页。页上面的空间管理单位是Extent,一个Extent是8个
8、连续的页。表和索引的最小占用单位是Extent。数据库是由一个或多个表或索引组成的,即是由多个Extent组成。针对不同的空间可以使用不同的锁,以便达到不同程度的保护事务和数据的目的。,2018年5月11日,第15页,可以锁定的资源,在Microsoft SQL Server 2000中可以锁定的资源有多种,这些可以锁定的资源分别是行、页、Extent、表和数据库,他们对应的锁分别是行级锁、页级锁、Extent级锁、表级锁和数据库级锁。数据行存放在页上,页存放在Extent上,一个表有若干个Extent组成,而若干个表组成了数据库。在这些可以锁定的资源中,最基本的资源是行、页和表,而Exten
9、t和数据库是特殊的可以锁定的资源。,2018年5月11日,第16页,锁的类型和其兼容性,锁定资源的方式有两种基本形式,一种形式是读操作要求的共享锁,另一种形式是写操作要求的排它锁。除了这两种基本类型的所,还有一些特殊情况的锁,例如意图锁、修改锁和模式锁。在这些各种类型的锁中,某些类型的锁之间是可以兼容的,但多数类型的锁之间是不兼容的。,2018年5月11日,第17页,死锁问题,死锁是一个很重要的话题。在事务和锁的使用过程中,死锁是一个不可避免的现象。在两种情况下发生死锁。第一种情况是当两个事务分别锁定了两个单独的对象,这时每一个事务都要求在另外一个事务锁定的对象上获得一个锁,因此每一个事务都必
10、须等待另外一个事务释放占有的锁,这时就发生了死锁。这种是最典型的死锁形式。 死锁的第二种情况是当在一个数据库中时,有若干个长时间运行的事务执行并行的操作,当查询分析器处理一种非常复杂的查询例如连接查询时,由于不能控制处理的顺序,有可能发生死锁现象。,2018年5月11日,第18页,会话级锁和表级锁,一般地,锁是由系统自动提供的。但是在有些情况下,用户也可以定制锁。也就是说,用户可以对会话级锁和表级锁进行定制。会话级锁的定制包括两个方面,事务隔离等级和锁超时限制。 定制表级锁就是指通过为表指定一个或多个选项来设置表级锁的行为。,2018年5月11日,第19页,锁的信息,可以使用多种方法查看系统锁的信息,例如使用“当前活动”窗口、sp_lock系统存储过程、SQL事件探查器、系统性能监视器等。,2018年5月11日,第20页,