数据库锁协议有哪些,试述三级封锁协议各解决了并发调度中的什么问题
来源:整理 编辑:黑码技术 2024-11-16 16:50:57
本文目录一览
1,试述三级封锁协议各解决了并发调度中的什么问题
三级加锁协议也称为三级封锁协议,是为了保证正确的调度事务的并发操作,事务在对数据库对象加锁,解锁是必须遵守的一种规则.在运用X锁和S锁对数据对象加锁时,还需要约定一些规则 ,例如何时申请X锁或S锁、持锁时间、何时释放等。称这些规则为封锁协议(Locking Protocol)。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。
2,分别说明数据库并发控制中所使用的三级封锁协议的内容
严格两阶段封锁协议不仅要求封锁是两阶段,还要求事务持有的所有排他锁必须在事务提交后方可释放。这个要求保证未提交事务所写的任何数据在该事务提交之前均已排他方式加锁,防止了其他事务读这些数据。强两阶段封锁协议。它要求事务提交之前不释放任何锁。在该条件下,事务可以按其提交的顺序串行化。
3,数据库中三级封锁协议与两段锁协议有区别吗
两段锁协议:一个事务中一旦开始释放锁,就不能再申请新锁了。事务的加锁和解锁严格分为两个阶段,第一阶段加锁,第二阶段解锁。
两段锁协议的目的是保证并发调度的正确性。就是说,如果所有操作数据库的事务都满足两段锁协议,那么这些事务的任何并发调度策略是可串行性的。
三级封锁协议:三级封锁协议的目的是在不同程序上保证数据的一致性。
是在一级封锁协议(一级封锁协议:修改之前先加X锁,事务完成释放)的基础上加上,读取之前还要加上S锁,事务结束后释放。
个人理解二者区别主要在于(仅供参考):三级封锁协议是从锁的隔离程度来定义,两段锁协议是从加锁、解锁顺序(会影响事务的并发调度)的角度来描述。
4,MySQL数据库表锁定的几种方法实现
两程序都向表写数据显会造成大麻烦甚至会有意外情况发生表正由程序写入同时进行读取另程序也会产生混乱结 锁定表方法 防止客户机请求互相干扰或者服务器与维护程序相互干扰方法主要有多种关闭数据库保证服务器和myisamchk和isamchk之间没有交互作用停止服务器运行并好注意因样做会使得没有故障数据库和表也用本节主要讨论过程避免服务器和myisamchk或isamchk之间交互作用实现种功能方法对表进行锁定 服务器由两种表锁定方法: 1.内部锁定 内部锁定避免客户机请求相互干扰——例避免客户机SELECT查询被另客户机UPDATE查询所干扰也利用内部锁定机制防止服务器利用myisamchk或isamchk检查或修复表时对表访问 语法: 锁定表:LOCK TABLES tbl_name 解锁表:UNLOCK TABLES LOCK TABLES当前线程锁定表UNLOCK TABLES释放被当前线程持有任何锁当线程发出另外LOCK TABLES时或当服务器连接被关闭时当前线程锁定所有表自动被解锁 线程获得表上READ锁该线程(和所有其线程)只能从表读线程获得表上WRITE锁只有持锁线程READ或WRITE表其线程被阻止 每线程等待(没有超时)直获得请求所有锁 WRITE锁通常比READ锁有更高优先级确保更改尽快被处理意味着线程获得READ锁并且另外线程请求WRITE锁, 随READ锁请求等待直WRITE线程得了锁并且释放了 显对于检查只需要获得读锁再者钟情跨下只能读取表能修改因此也允许其客户机读取表对于修复必须获得些所防止任何客户机对表进行操作时修改 2.外部锁定 服务器还使用外部锁定(文件级锁)来防止其程序服务器使用表时修改文件通常表检查操作服务器外部锁定与myisamchk或isamchk作合使用外部锁定某些系统禁用因能靠进行工作对运行myisamchk或isamchk所选择过程取决于服务器否能使用外部锁定使用则必修使用内部锁定协议 服务器用--skip-locking选项运行则外部锁定禁用该选项某些系统缺省Linux通过运行mysqladmin variables命令确定服务器否能够使用外部锁定检查skip_locking变量值并按下方法进行: ◆skip_lockingoff则外部锁定有效您继续并运行人和实用程序来检查表服务器和实用程序合作对表进行访问运行任何实用程序之前应该使用mysqladmin flush-tables了修复表应该使用表修复锁定协议 ◆skip_locakingon则禁用外部锁定所myisamchk或isamchk检查修复表示服务器并知道好关闭服务器坚持服务器保持开启状态月确保您使用此表示没有客户机来访问
5,MySQL数据库表锁定的几种方法实现
如果两个程序都向表中写数据显然会造成很大的麻烦,甚至会有意外情况发生。如果表正由一个程序写入,同时进行读取的另一个程序也会产生混乱的结果。 锁定表的方法 防止客户机的请求互相干扰或者服务器与维护程序相互干扰的方法主要有多种。如果你关闭数据库,就可以保证服务器和myisamchk和isamchk之间没有交互作用。但是停止服务器的运行并不是一个好注意,因为这样做会使得没有故障的数据库和表也不可用。本节主要讨论的过程,是避免服务器和myisamchk或isamchk之间的交互作用。实现这种功能的方法是对表进行锁定。 服务器由两种表的锁定方法: 1.内部锁定 内部锁定可以避免客户机的请求相互干扰——例如,避免客户机的SELECT查询被另一个客户机的UPDATE查询所干扰。也可以利用内部锁定机制防止服务器在利用myisamchk或isamchk检查或修复表时对表的访问。 语法: 锁定表:LOCK TABLES tbl_name 解锁表:UNLOCK TABLES LOCK TABLES为当前线程锁定表。UNLOCK TABLES释放被当前线程持有的任何锁。当线程发出另外一个LOCK TABLES时,或当服务器的连接被关闭时,当前线程锁定的所有表自动被解锁。 如果一个线程获得在一个表上的一个READ锁,该线程(和所有其他线程)只能从表中读。如果一个线程获得一个表上的一个WRITE锁,那么只有持锁的线程READ或WRITE表,其他线程被阻止。 每个线程等待(没有超时)直到它获得它请求的所有锁。 WRITE锁通常比READ锁有更高的优先级,以确保更改尽快被处理。这意味着,如果一个线程获得READ锁,并且然后另外一个线程请求一个WRITE锁, 随后的READ锁请求将等待直到WRITE线程得到了锁并且释放了它。 显然对于检查,你只需要获得读锁。再者钟情跨下,只能读取表,但不能修改它,因此他也允许其它客户机读取表。对于修复,你必须获得些所以防止任何客户机在你对表进行操作时修改它。 2.外部锁定 服务器还可以使用外部锁定(文件级锁)来防止其它程序在服务器使用表时修改文件。通常,在表的检查操作中服务器将外部锁定与myisamchk或isamchk作合使用。但是,外部锁定在某些系统中是禁用的,因为他不能可靠的进行工作。对运行myisamchk或isamchk所选择的过程取决于服务器是否能使用外部锁定。如果不使用,则必修使用内部锁定协议。 如果服务器用--skip-locking选项运行,则外部锁定禁用。该选项在某些系统中是缺省的,如Linux。可以通过运行mysqladmin variables命令确定服务器是否能够使用外部锁定。检查skip_locking变量的值并按以下方法进行: ◆如果skip_locking为off,则外部锁定有效您可以继续并运行人和一个实用程序来检查表。服务器和实用程序将合作对表进行访问。但是,运行任何一个实用程序之前,应该使用mysqladmin flush-tables。为了修复表,应该使用表的修复锁定协议。 ◆如果skip_locaking为on,则禁用外部锁定,所以在myisamchk或isamchk检查修复表示服务器并不知道,最好关闭服务器。如果坚持是服务器保持开启状态,月确保在您使用此表示没有客户机来访问它。两程序都向表写数据显会造成大麻烦甚至会有意外情况发生表正由程序写入同时进行读取另程序也会产生混乱结 锁定表方法 防止客户机请求互相干扰或者服务器与维护程序相互干扰方法主要有多种关闭数据库保证服务器和myisamchk和isamchk之间没有交互作用停止服务器运行并好注意因样做会使得没有故障数据库和表也用本节主要讨论过程避免服务器和myisamchk或isamchk之间交互作用实现种功能方法对表进行锁定 服务器由两种表锁定方法: 1.内部锁定 内部锁定避免客户机请求相互干扰——例避免客户机select查询被另客户机update查询所干扰也利用内部锁定机制防止服务器利用myisamchk或isamchk检查或修复表时对表访问 语法: 锁定表:lock tables tbl_name 解锁表:unlock tables lock tables当前线程锁定表unlock tables释放被当前线程持有任何锁当线程发出另外lock tables时或当服务器连接被关闭时当前线程锁定所有表自动被解锁 线程获得表上read锁该线程(和所有其线程)只能从表读线程获得表上write锁只有持锁线程read或write表其线程被阻止 每线程等待(没有超时)直获得请求所有锁 write锁通常比read锁有更高优先级确保更改尽快被处理意味着线程获得read锁并且另外线程请求write锁, 随read锁请求等待直write线程得了锁并且释放了 显对于检查只需要获得读锁再者钟情跨下只能读取表能修改因此也允许其客户机读取表对于修复必须获得些所防止任何客户机对表进行操作时修改 2.外部锁定 服务器还使用外部锁定(文件级锁)来防止其程序服务器使用表时修改文件通常表检查操作服务器外部锁定与myisamchk或isamchk作合使用外部锁定某些系统禁用因能靠进行工作对运行myisamchk或isamchk所选择过程取决于服务器否能使用外部锁定使用则必修使用内部锁定协议 服务器用--skip-locking选项运行则外部锁定禁用该选项某些系统缺省linux通过运行mysqladmin variables命令确定服务器否能够使用外部锁定检查skip_locking变量值并按下方法进行: ◆skip_lockingoff则外部锁定有效您继续并运行人和实用程序来检查表服务器和实用程序合作对表进行访问运行任何实用程序之前应该使用mysqladmin flush-tables了修复表应该使用表修复锁定协议 ◆skip_locakingon则禁用外部锁定所myisamchk或isamchk检查修复表示服务器并知道好关闭服务器坚持服务器保持开启状态月确保您使用此表示没有客户机来访问
文章TAG:
数据 数据库 协议 哪些 数据库锁协议有哪些