请问一个单纯的Insert 语句怎么老引起死锁呢?
表
CREATE TABLE [dbo].[LoadingRecord_tbl](
[CLR_ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[ID] [int] NULL,
[CLR_Createtime] [datetime] NULL,
[CLR_IP] [varchar](100) NULL,
CONSTRAINT [PK_LOADINGRECORD_TBL] PRIMARY KEY CLUSTERED
(
[CLR_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
插入语句
CREATE PROCEDURE LoadingRecord_tbl_ADD
@CLR_ID numeric(18,0) output,
@ID int,
@CLR_Createtime datetime,
@CLR_IP varchar(100)
AS
INSERT INTO [LoadingRecord_tbl](
[ID],[CLR_Createtime],[CLR_IP]
)VALUES(
@ID,@CLR_Createtime,@CLR_IP
)
SET @CLR_ID = @@IDENTITY
GO
现在有记录745391条
------解决方案--------------------
9进程,还是runnable状态,说明它还未运行。但已经处于可运行状态。
除了SQL SERVER的锁会引起死锁,内存严重不足,多线程并行查询也会出现死锁现象。
建立此现象容易重现,打开1222跟踪,有死锁发生时,但看SQLSERVER LOG日志中的详细死锁信息。打开1222跟踪的语句是: DBCC TRACEON(1222,-1)
------解决方案--------------------发生死锁前,打开1222跟踪,发生死锁后,去下面路径查看:
C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log
ERRORLOG,ERRORLOG.1,ERRORLOG2...ERRORLOG.6
------解决方案--------------------1、是死锁还是阻塞,要先定义好,两者不是一样的。
2、查看等待状态,获取问题的本质原因。
------解决方案--------------------
各个版本的的目录可能有所不同。#1.楼主可从网上查 #2.楼主可在SQL SERVER的安装目录搜索:ERRORLOG.1