精华内容
下载资源
问答
  • 数据库死锁查询

    2019-02-18 11:20:19
    select'引起数据库死锁的是:'+CAST(@bl AS VARCHAR(10))+'进程号,其执行的SQL语法如下' else select'进程号SPID:'+CAST(@spid AS VARCHAR(10))+'被'+'进程号SPID:'+CAST(@bl AS VARCHAR(10))+'阻塞,其当前进程...

    查看数据库锁:

    use [master]
        GO
        /****** Object:  StoredProcedure [dbo].[sp_who_lock]    Script Date: 2019/2/18 11:17:50 ******/
        SET ANSI_NULLS ON
        GO
        SET QUOTED_IDENTIFIER ON
        GO
        ALTER procedure [dbo].[sp_who_lock]
        as
        begin
        declare @spid int,@bl int,
         @intTransactionCountOnEntry int,
         @intRowcount int,
         @intCountProperties int,
         @intCounter int
        
        create table #tmp_lock_who (
        id int identity(1,1),
        spid smallint,
        bl smallint)
            
        IF @@ERROR<>0 RETURN @@ERROR
            
        insert into #tmp_lock_who(spid,bl) select 0 ,blocked
        from (select * from sys.sysprocesses where blocked>0)a
        where not exists(select*from(select * from sys.sysprocesses where blocked>0)b
        where a.blocked=spid)
        union select spid,blocked from sys.sysprocesses where blocked>0
        
        IF @@ERROR<>0 RETURN @@ERROR
        
        --找到临时表的记录数
        select @intCountProperties=Count(*),@intCounter=1
        from #tmp_lock_who
        
        IF @@ERROR<>0 RETURN @@ERROR
        
        if @intCountProperties=0
        select'现在没有阻塞和死锁信息'asmessage
        
        --循环开始
        while @intCounter<=@intCountProperties
        begin
        --取第一条记录
        select @spid=spid,@bl=bl
        from #tmp_lock_who where Id=@intCounter
        begin
        if @spid=0
        select'引起数据库死锁的是:'+CAST(@bl AS VARCHAR(10))+'进程号,其执行的SQL语法如下'
        else
        select'进程号SPID:'+CAST(@spid AS VARCHAR(10))+'被'+'进程号SPID:'+CAST(@bl AS VARCHAR(10))+'阻塞,其当前进程执行的SQL语法如下'
        DBCC INPUTBUFFER(@bl)
        end
        
        --循环指针下移
        set @intCounter=@intCounter+1
        end
        
        drop table #tmp_lock_who
        
        return 0
        end
    

    关闭数据库锁:
    重启SQL服务即可,亦可

    use master
    go
     
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[p_killspid]
    GO
     
    create proc p_killspid
    @dbname varchar(200)    --要关闭进程的数据库名
    as  
        declare @sql  nvarchar(500)  
        declare @spid nvarchar(20)
     
        declare #tb cursor for
            select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
        open #tb
        fetch next from #tb into @spid
        while @@fetch_status=0
        begin  
            exec('kill '+@spid)
            fetch next from #tb into @spid
        end  
        close #tb
        deallocate #tb
    go
     
    --用法  
    exec p_killspid  'newdbpy'
    

    另外,可以查看锁信息:
    –查看锁信息

    create table #t(req_spid int,obj_name sysname)
     
    declare @s nvarchar(4000)
        ,@rid int,@dbname sysname,@id int,@objname sysname
     
    declare tb cursor for 
        select distinct req_spid,dbname=db_name(rsc_dbid),rsc_objid
        from master..syslockinfo where rsc_type in(4,5)
    open tb
    fetch next from tb into @rid,@dbname,@id
    while @@fetch_status=0
    begin
        set @s='select @objname=name from ['+@dbname+']..sysobjects where id=@id'
        exec sp_executesql @s,N'@objname sysname out,@id int',@objname out,@id
        insert into #t values(@rid,@objname)
        fetch next from tb into @rid,@dbname,@id
    end
    close tb
    deallocate tb
     
    select 进程id=a.req_spid
        ,数据库=db_name(rsc_dbid)
        ,类型=case rsc_type when 1 then 'NULL 资源(未使用)'
            when 2 then '数据库'
            when 3 then '文件'
            when 4 then '索引'
            when 5 then '表'
            when 6 then '页'
            when 7 then '键'
            when 8 then '扩展盘区'
            when 9 then 'RID(行 ID)'
            when 10 then '应用程序'
        end
        ,对象id=rsc_objid
        ,对象名=b.obj_name
        ,rsc_indid
     from master..syslockinfo a left join #t b on a.req_spid=b.req_spid
     
    go
    drop table #t
    

    来源出处http://blog.csdn.net/fredrickhu/archive/2009/12/24/5071970.aspx

    展开全文
  • SqlServer 数据库死锁查询sql

    千次阅读 2019-12-10 17:57:33
    SqlServer 数据库死锁查询sql select         request_session_id spid,        OBJECT_NAME(resource_associated_entity_id)&...

    SqlServer 数据库死锁查询sql

    select    
        request_session_id spid,   
        OBJECT_NAME(resource_associated_entity_id) tableName    
    from    
        sys.dm_tran_locks   
    where    
        resource_type='OBJECT'
    
    展开全文
  • 数据库死锁,阻塞查询,杀死死锁,阻塞进程
  • 数据库死锁查询以及清除

    千次阅读 2018-11-29 10:53:20
    数据库死锁查询以及清除 kill 68 --68代表下面查询数据源的ID select object_name(resource_associated_entity_id) as tableName, request_session_id as pid from sys.dm_tran_locks where resource_type = 'OBJECT...

    数据库死锁查询以及清除

    kill 68    --68代表下面查询数据源的ID
    select object_name(resource_associated_entity_id) as tableName, request_session_id as pid from sys.dm_tran_locks
    where resource_type = 'OBJECT' 
    

    下面是一个存储过程

    CREATE PROC [dbo].[p_lockinfo]
    @kill_lock_spid BIT=0, --是否杀掉死锁的进程,1 杀掉, 0 仅显示
    @show_spid_if_nolock BIT=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
    AS
    declare @count int,@s varchar(8000),@i int
    SELECT id=IDENTITY(INT,1,1),标志,
    进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid,
    数据库名=DB_NAME(dbid),用户ID=uid,用户名=loginame,累计CPU时间=cpu,
    登陆时间=login_time,打开事务数=open_tran, 进程状态=status,
    工作站名=hostname,应用程序名=program_name,工作站进程ID=hostprocess,
    域名=nt_domain,网卡地址=net_address
    INTO #t FROM(
    SELECT 标志='死锁的进程',
    spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
    status,hostname,program_name,hostprocess,nt_domain,net_address,
    s1=a.spid,s2=0
    FROM master..sysprocesses a JOIN (
    SELECT blocked FROM master..sysprocesses GROUP BY blocked
    )b ON a.spid=b.blocked WHERE a.blocked=0
    UNION ALL
    SELECT '|_牺牲品_>',
    spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
    status,hostname,program_name,hostprocess,nt_domain,net_address,
    s1=blocked,s2=1
    FROM master..sysprocesses a WHERE blocked<>0
    )a ORDER BY s1,s2
    
    SELECT @count=@@rowcount,@i=1
    
    IF @count=0 AND @show_spid_if_nolock=1
    BEGIN
    INSERT #t
    SELECT 标志='正常的进程',
    spid,kpid,blocked,dbid,DB_NAME(dbid),uid,loginame,cpu,login_time,
    open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
    FROM master..sysprocesses
    SET @count=@@rowcount
    END
    
    IF @count>0
    BEGIN
    CREATE TABLE #t1(id INT IDENTITY(1,1),a NVARCHAR(80),
    b INT,EventInfo VARCHAR(8000))
    IF @kill_lock_spid=1
    
    BEGIN
    DECLARE @spid VARCHAR(10),@标志 VARCHAR(30)
    WHILE @i<=@count
    BEGIN
    SELECT @spid=进程ID,@标志=标志 FROM #t WHERE id=@i
    INSERT #t1 EXEC('dbcc inputbuffer('+@spid+')')
    IF @标志='死锁的进程' EXEC('kill '+@spid)
    SET @i=@i+1
    END
    END
    ELSE
    WHILE @i<=@count
    BEGIN
    SELECT @s='dbcc inputbuffer('+CAST(进程ID AS VARCHAR)+')'
    FROM #t WHERE id=@i
    INSERT #t1 EXEC(@s)
    SET @i=@i+1
    END
    SELECT a.*,进程的SQL语句=b.EventInfo
    FROM #t a JOIN #t1 b ON a.id=b.id
    END
    
    
    
    

    优化–数据库加锁
    select * from [Book] with(HOLDLOCK)

    锁定提示                                 描述  
    HOLDLOCK        将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。HOLDLOCK        等同于        SERIALIZABLE。        
    NOLOCK        不要发出共享锁,并且不要提供排它锁。当此选项生效时,可能会读取未提交的事务或一组在读取中间回滚的页面。有可能发生脏读。仅应用于SELECT语句。        
    PAGLOCK        在通常使用单个表锁的地方采用页锁。        
    READCOMMITTED        用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL        Server        2000        在此隔离级别上操作。        
    READPAST        跳过锁定行。此选项导致事务跳过由其它事务锁定的行(这些行平常会显示在结果集内),而不是阻塞该事务,使其等待其它事务释放在这些行上的锁。READPAST        锁提示仅适用于运行在提交读隔离级别的事务,并且只在行级锁之后读取。仅适用于        SELECT        语句。        
    READUNCOMMITTED        等同于        NOLOCK。        
    REPEATABLEREAD        用与运行在可重复读隔离级别的事务相同的锁语义执行扫描。        
    ROWLOCK        使用行级锁,而不使用粒度更粗的页级锁和表级锁。 (SELECT,UPDATE和DELETE)    
    SERIALIZABLE        用与运行在可串行读隔离级别的事务相同的锁语义执行扫描。等同于        HOLDLOCK。        
    TABLOCK        使用表锁代替粒度更细的行级锁或页级锁。在语句结束前,SQL        Server        一直持有该锁。但是,如果同时指定        HOLDLOCK,那么在事务结束之前,锁将被一直持有。        
    TABLOCKX        使用表的排它锁。该锁可以防止其它事务读取或更新表,并在语句或事务结束前一直持有。        
    UPDLOCK        读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK        的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。        
    XLOCK        使用排它锁并一直保持到由语句处理的所有数据上的事务结束时。可以使用        PAGLOCK        或        TABLOCK        指定该锁,这种情况下排它锁适用于适当级别的粒度
    
    展开全文
  • Oracle数据库死锁查询

    千次阅读 2019-01-09 14:46:25
    关于对Oracle视图 V$LOCK的学习,看... 用system用户登录数据库conn system/system的密码@IP地址:端口号/数据库实例,执行以下sql检查死锁情况: 检查是否存在死锁 select sess.sid, sess.serial#, lo.oracl...

    关于对Oracle视图 V$LOCK的学习,看参考: http://www.oracleplus.net/arch/632.html


    用system用户登录数据库 conn system/system的密码@IP地址:端口号/数据库实例,执行以下sql检查死锁情况:

    检查是否存在死锁

    select sess.sid,
           sess.serial#,
           lo.oracle_username,
           lo.os_user_name,
           ao.object_name,
           lo.locked_mode
      from v$locked_object lo, dba_objects ao, v$session sess
     where ao.object_id = lo.object_id
       and lo.session_id = sess.sid;

    检查死锁的sql

    select sql_text
      from v$sql
     where hash_value in
           (select sql_hash_value
              from v$session
             where sid in (select session_id from v$locked_object));

    检查死锁用户的sql

    select b.username, b.serial#, d.id1, a.sql_text
      from v$lock d, v$session b, v$sqltext a
     where b.lockwait = d.kaddr
       and a.address = b.sql_address
       and a.hash_value = b.sql_hash_value;

    检查死锁用户和程序

    select username, lockwait, status, machine, program
      from v$session
     where sid in (select session_id from v$locked_object);

    确定谁锁了谁

    select s1.username || '@' || s1.machine || ' ( SID=' || s1.sid ||
           ' )  is blocking ' || s2.username || '@' || s2.machine || ' ( SID=' ||
           s2.sid || ' ) ' AS blocking_status
      from v$lock l1, v$session s1, v$lock l2, v$session s2
     where s1.sid = l1.sid
       and s2.sid = l2.sid
       and l1.BLOCK = 1
       and l2.request > 0
       and l1.id1 = l2.id1
       and l2.id2 = l2.id2;

    确定链接的sql

    select sql_text from v$session v,v$sql s where SID=345 and v.sql_hash_value = s.hash_value;

     

     

    展开全文
  • 【MySQL】数据库死锁查询及处理

    万次阅读 2019-12-17 21:08:38
    数据库死锁 数据库死锁是事务性数据库 (如SQL Server, MySql等)经常遇到的问题。除非数据库死锁问题频繁出现导致用户无法操作,一般情况下数据库死锁问题不严重。在应用程序中进行try-catch就可以。那么数据死锁是...
  • NULL 博文链接:https://yanggx.iteye.com/blog/702761
  • 1.Oracle死锁处理 1.1.查看锁表进程sql语句: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v...
  • 创建存储过程sp_who_lock,查询死锁的进程 create procedure sp_who_lock WITH ENCRYPTION as begin declare @spid int,@bl int, @intTransactionCountOnEntry int, @intRowcount int, ...
  • exec dbo.sp_who_lock --查看当前死锁进程exec dbo.p_killspid db --杀掉引起死锁的进程create procedure sp_who_lock as begin declare @spid int,@bl int, @intTransactionCountOnEntry int, @intRowcount int, .....
  • 数据库死锁

    2011-10-13 19:42:55
    数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁
  • 数据库死锁adafsdfasdf

    2010-07-09 20:53:57
    数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁数据库死锁
  • 可参考: 数据库死锁那些事儿 https://blog.csdn.net/eseaqyq/article/details/7795023 MySQL InnoDB死锁死锁检测(四)http://www.ywnds.com/?p=4949 二、MySQL InnoDB死锁检测 1) 尽量不出现死锁 在代码层...
  • 数据库死锁进程查询

    2019-09-17 06:04:54
    SELECT 'kill '+ CAST(spid as nvarchar(10)) FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SELECT [DBID] FROM [Master].[dbo].[SYSDATABASES] ...
  • 查询数据库死锁

    2017-11-03 10:13:35
    关于死锁: sp_who active –看看哪个引起的死锁, blk里面即阻塞的spid; dbcc inputbuffer(@blk) — 可以查看是那个sql语句造成的死锁; sp_lock –看看锁住了那个资源,objid即被锁住的资源id; ...
  • 解决Sybase数据库死锁

    2014-11-19 16:14:05
    解决Sybase数据库死锁
  • 近来在工作中遇到了oracle数据库死锁问题,下面是转载的问题查询与处理方法,侵删。 一、数据库死锁的现象 程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。 二、死锁的原理 当对于数据库...
  • 查询及删除sql数据库死锁脚本,很有用
  • 查询SQL server数据库死锁存储过程
  • InnoDB数据库死锁

    2016-12-23 22:55:32
    场景描述问题分析解决方法延伸:数据库死锁数据库死锁例子   正文 回到顶部 场景描述 在update表的时候出现DeadlockLoserDataAccessException异常 (Deadlock found when trying to get lock; try ...
  • 数据库死锁案例

    2011-12-08 11:18:08
    描述数据库死锁的解决方法和预防措施,对于新人学习Oracle有很好的帮助
  • 数据库死锁判断SQL

    2012-12-31 15:41:04
    判断数据库死锁的SQL,可以检测出死锁的语句和进程
  • 一、数据库死锁的现象  程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。  二、死锁的原理  当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提  交,另一条...
  • 主要介绍了Mybatis update数据库死锁之获取数据库连接池等待的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 116,595
精华内容 46,638
关键字:

数据库死锁查询