o2 exec

1.数据库表锁定的原理1.1目前的C/S和B/S结构都是多用户访问数据库,每个时间点都会有成千上万的用户访问d B,其中会同时访问相同的数据,会造成数据不一致或

1.数据库表锁定的原理

o2 exec插图

1.1目前的C/S和B/S结构都是多用户访问数据库,每个时间点都会有成千上万的用户访问d B,其中会同时访问相同的数据,会造成数据不一致或者脏数据读取。

1.2 ACID交易原则

1.3锁是关系数据库的重要组成部分。数据库必须有锁机制,以确保数据的完整性和一致性。

1.3.1可以在SQL Server中锁定的资源:

锁的粒度:

锁的升级:

锁升级阈值和锁升级由系统自动确定,不需要用户设置。

锁的类型:

(1)共享锁:

共享锁用于所有只读数据操作。

(2)修改锁:

修改锁用于在修改操作的初始阶段锁定可能被修改的资源,以避免使用共享锁导致的死锁。

(3)排他锁:

排他锁是为修改数据而保留的。它锁定的资源不能被其他事务读取或修改。独占锁不能与其他锁兼容。

(4)建筑锁

结构锁分为结构修改锁(Sch-M)和结构稳定锁(Sch-S)。SQL Server在执行表定义语言操作时使用Sch-M锁,在编译查询时使用Sch-S锁。

(5)定向锁

有意锁表示SQL Server有意获取较低资源级别的共享锁或排他锁。

(6)锁的批量修改

批量复制数据时使用批量修改锁。

1.3.4 SQL Server锁类型

(1) HOLDLOCK:保持该表上的共享锁,直到整个事务结束,而不是在语句执行后立即释放添加的锁。

(2) NOLOCK:不添加共享锁和独占锁。当此选项生效时,可能会读取未提交的数据或“脏数据”。此选项仅适用于SELECT语句。

(3) PAGLOCK:指定添加页锁(否则通常会添加表锁)。

(4) READCOMMITTED使用与在提交读取隔离级别运行的事务相同的锁语义执行扫描。默认情况下,SQL Server 2000在此隔离级别运行。

(5) READPAST:跳过已经锁定的数据线。该选项将使事务在读取数据时跳过那些被其他事务锁定的数据行,而不是阻塞它们,直到其他事务释放锁定。

READPAST仅应用于隔离级别为READ COMMITTED的事务操作中的SELECT语句操作。

(6) READUNCOMMITTED:相当于NOLOCK。

(7) REPEATABLEREAD:将事务设置为可重复读取隔离级别。

(8) ROWLOCK:使用行级锁,而不是粒度更粗的页级锁和表级锁。

(9) SERIALIZABLE:使用与运行在串行可读隔离级别的事务相同的锁语义来执行扫描。相当于HOLDLOCK。

(10) TABLOCK:指定使用表级锁,而不是行级锁或页级锁。SQL Server在执行该语句后释放该锁,如果同时指定了HOLDLOCK,则该锁将一直保持到该事务结束。(11) TABLOCKX:指定对表使用排他锁。该锁可以防止其他事务读取或更新该表的数据,直到该语句或整个事务结束。

(12)up lock:指定在读取表中的数据时设置更新锁而不是共享锁。该锁将一直保持到该语句或整个事务结束。使用UPDLOCK的作用是允许用户先读取数据(并且不阻止其他用户读取数据),保证以后更新数据时,数据在这段时间内不会被其他用户修改。

(此段摘自CSDN博客: . csdn . net/ZP /archive/2009/02/18/ . aspx)

2.如何解锁表格?解锁是终止锁定的链接或者等待链接的事务被释放。

2.1活动监视器

您可以从等待类型“被字段阻塞”中看到,SPID 54被SPID 53阻塞。您可以右键单击Details来查找详细的SQL语句,或者终止该进程。

2.2 SQL Server提供了几个dmv,检查锁。

系统数据管理执行请求

sys.dm_tran_locks

sys.dm_os_waiting_tasks

sys . DM _ tran _ database _ transactions

(1)

select * from sys.dm_tran_locks where resource_type<>'DATABASE' --and resource_database_id=DB_ID()

(2)

SELECT session_id, blocking_session_id,*FROM sys.dm_exec_requestsWHERE blocking_session_id > 0

(3)

SELECTrequest_session_id as Spid,Coalesce(s.name + '.' + o.name + isnull('.' + i.name,''),s2.name + '.' + o2.name,db.name) AS Object,l.resource_type as Type,request_mode as Mode,request_status as StatusFROM sys.dm_tran_locks lLEFT JOIN sys.partitions pON l.resource_associated_entity_id = p.hobt_idLEFT JOIN sys.indexes iON p.object_id = i.object_idAND p.index_id = i.index_idLEFT JOIN sys.objects oON p.object_id = o.object_idLEFT JOIN sys.schemas sON o.schema_id = s.schema_idLEFT JOIN sys.objects o2ON l.resource_associated_entity_id = o2.object_idLEFT JOIN sys.schemas s2ON o2.schema_id = s2.schema_idLEFT JOIN sys.databases dbON l.resource_database_id = db.database_idWHERE resource_database_id = DB_ID()ORDER BY Spid, Object, CASE l.resource_typeWhen 'database' Then 1when 'object' then 2when 'page' then 3when 'key' then 4Else 5 end

来源:

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/164523.html

发表回复

登录后才能评论