sqlserver的事务

本文主要分享一下事务在sqlserver中的执行流程。

注意,这里只谈论流程,不涉及锁的信息,关于锁的信息,稍后会有专门的文章讨论。

事务的执行流程如下,从01步到08步。

1,sqlserver接受到事务请求

2,存储引擎开始一个事务(具有唯一的事务标识),并且把事务日志写入缓存log buffer

3,存储引擎把事务的数据写入缓存db buffer

4,当步骤3完成以后,存储引擎把缓存日志时的事务标识commit

5,把log buffer中的日志写盘

6,日志写到磁盘完成以后,存储引擎返回给客户端事务提交成功(注意,此时数据并没有真正的写到磁盘上)。

7,等待触发checkpoint或者lazy write

8,数据写入磁盘

时间: 2024-10-16 18:39:15

sqlserver的事务的相关文章

(转)对SQLSERVER数据库事务日志的疑问

本文转载自桦仔的博客http://www.cnblogs.com/lyhabc/archive/2013/06/10/3130856.html 对SQLSERVER数据库事务日志的疑问 摸不透SQLSERVER了 实验环境:SQLSERVER2005 SP4,Windows7 本来没什么心情写文章,反正没人看,关于我文章中提到的问题,有些可以从文章结尾的MSDN补充那里找到答案,而有些还没有答案 根据CSDN博客的这篇文章介绍,大家可以先看一下,然后再继续往下看,因为下面会引用到CSDN博客里的

SQLServer 查询事务 结束事务 杀死事务 强制结束事务

1.查询事务 select request_session_id as spid,OBJECT_NAME(resource_associated_entity_id) as tableNamefrom sys.dm_tran_lockswhere resource_type='OBJECT'2.结束事务 杀死事务 强制结束事务kill 160 --spid由上面查询出来的spid SQLServer 查询事务 结束事务 杀死事务 强制结束事务

SQLSERVER分布式事务使用实例

尊重原著作:本文参考自http://www.jb51.net/article/43540.htm --BEGIN DISTRIBUTED TRANSACTION [transactionname]--标志一个由分布式事务处理协调器MSDTC管理的TSQL分布式事务开始--SERVER A服务器为主控服务器.当连接发出后续COMMIT TRANSACTION或--ROLLBACK TRANSACTION语句时,主控服务器请求MSDTC在所涉及的服务器间管理--分布式事务的完成 --SQLSERVE

SQLServer+.net 事务锁表问题

最近操作Sqlserver遇到一个锁表问题.找了好久才搞明白原因和解决办法. 故障现象: 每次启动事务后,执行了删除或者修改操作以后,再执行查询操作就锁表. 解决过程: 1:最初以为SQLServer进行删除和修改操作后是表锁定机制,造成无法查询,结果不是. 2:搜索查询锁表的SQL,分析了一下锁表过程. 查看被锁表: select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from

SqlServer 并发事务(二):锁粒度和锁模式

锁粒度: 资源 格式 说明 DATABASE 不适用 resource_database_id 列中已提供数据库 ID. FILE <file_id> 此资源所表示的文件 ID. Object <object_id> 此资源所表示的对象 ID. 此对象可以是sys.objects 中列出的任何对象,不仅仅是表. PAGE <file_id>:<page_in_file> HoBt ID.此值与 sys.partitions.hobt_id 相对应. PAGE

SQLServer 之 事务回滚

首先在测试库 TestDB 中创建一个数据表: USE [TestDB] GO /****** 对象: Table [dbo].[Person] ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Person]( [PersonId] [nchar](18) NOT NULL, [PersonName] [nchar](20) NOT NULL, CONSTRAINT [PK_Person]

sQLserver T-SQL 事务的用法

原文在: https://www.lesg.cn/netdaima/2016-55.html 在使用Mssql的时候经常需要用到存储过程 有些操作在前面发生错误的时候:需要回滚:这就需要事务了: 下面是代码: BEGIN TRANSACTION--开始事务 DECLARE @errorSun int=0 --定义错误计数器 DECLARE @ErrorMessage NVARCHAR(4000)=''; --DECLARE @Remark NVARCHAR(4000)='';--备注 BEGIN

浅谈sqlserver的事务锁

锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏读 A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致 不可重复读 A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致 并发控制的主要方法是封锁,锁就是在一段时间内禁止

SqlServer 并发事务(一):事务隔离级别

--查了当前数据库是事务隔离级别 DBCC USEROPTIONS 表初始内容: SELECT * FROM Test  Wherename='kk' id  name   info 1   kk      NULL [测试一:丢失更新] --事务1 begin tran select * from dbo.Test(nolock) where name = 'kk' waitfor delay '00:00:05' update T set info = 'A更改' from Test T(n