`
逆风的香1314
  • 浏览: 1415907 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

处理BLOCK

阅读更多

use master --必须在master数据库中创建
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_lockinfo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_lockinfo]
GO

/*--处理BLOCK

 查看当前进程,或BLOCK进程,并能自动杀掉死进程

 因为是针对block的,所以如果有block进程,只能查看block进程
 当然,你可以通过参数控制,不管有没有block,都只查看block进程

 感谢: caiyunxia,jiangopen 两位提供的参考信息

--邹建 2004.4(引用请保留此信息)--*/

/*--调用示例

 exec p_lockinfo
--*/
create proc p_lockinfo
@kill_lock_spid bit=1,  --是否杀掉block的进程,1 杀掉, 0 仅显示
@show_spid_if_nolock bit=1 --如果没有block的进程,是否显示正常进程信息,1 显示,0 不显示
as
set nocount on
declare @count int,@s nvarchar(1000),@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 标志='BLOCK的进程',
  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 '|_牺牲品(被BLOCK)_>',
  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(30),b Int,EventInfo nvarchar(255))
 if @kill_lock_spid=1
 begin
  declare @spid varchar(10),@标志 varchar(10)
  while @i<=@count
  begin
   select @spid=进程ID,@标志=标志 from #t where id=@i
   insert #t1 exec('dbcc inputbuffer('+@spid+')')
   if @@rowcount=0 insert #t1(a) values(null)
   if @标志='BLOCK的进程' 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)
   if @@rowcount=0 insert #t1(a) values(null)
   set @i=@i+1
  end
 select a.*,进程的SQL语句=b.EventInfo
 from #t a join #t1 b on a.id=b.id
 order by 进程ID
end
set nocount off
go

分享到:
评论

相关推荐

    关于block的循环引用

    通过理解ARC如何处理Block的引用,以及何时使用弱引用或强引用,可以有效避免这类问题。 6. 避免循环引用的最佳实践: - 在Block内部使用弱引用。 - 尽可能减少Block在成员变量中的使用,改为局部变量或函数参数...

    block测试代码

    在描述中提到的博客文章《iOS block测试代码》中,作者可能详细介绍了如何编写和测试Block的实践案例,包括如何处理Block中的异常情况,以及在多线程环境中使用Block需要注意的问题。通过阅读该博客,开发者可以更...

    ios-把block当成属性放在全局字典中的用例.zip

    因此,使用时应谨慎处理Block中的强引用循环,确保及时释放不再使用的资源。 总的来说,这个示例提供了一种在iOS应用中方便地跨界面传递和执行Block的方法,减少了对代理模式的依赖,提高了代码的灵活性。然而,...

    block在ios中的具体用法与解析

    因此,正确处理Block的copy行为对于内存管理至关重要。 8. OCLesson6_Block "OCLesson6_Block"可能是一个关于Block的示例项目或教程,包含具体的代码示例和实践练习,帮助学习者深入理解和应用Block。 总之,Block...

    block的循环引用导致的内存泄露的示例及解决办法

    总的来说,理解并正确处理Block的内存管理是iOS开发中的重要技能。通过合理使用弱引用和理解Block的捕获机制,我们可以有效地防止因循环引用导致的内存泄漏问题。在实际开发中,应时刻保持警惕,避免潜在的内存管理...

    iOS block编程要点

    通过理解Block的基本概念、如何声明和使用Block、以及如何处理Block中的变量,开发者可以充分利用Block带来的便利性,同时避免常见的陷阱和错误。 #### 推荐资源 - Apple官方文档:深入学习Block的相关文档和技术...

    ios-block循环引用的三种解决办法.zip

    总结,处理Block循环引用的策略包括使用弱引用、不安全的无保留引用以及将Block复制到堆。选择哪种方法取决于具体场景和对性能的影响考虑。了解并正确使用这些技巧,对于优化iOS应用的内存管理至关重要。通过实践和...

    教你学会block

    然而,如果Block内部修改了捕获的变量,可能会引发强引用循环,因此需要谨慎处理Block与对象之间的引用关系。 ### 4. Block作为参数和返回值 Block可以作为函数的参数和返回值,这在处理异步操作或者回调时非常...

    block官方源码

    例如,当Block被赋值给一个对象属性或者作为参数传递时,可能会发生Block的复制,这需要处理Block内部引用的对象的强引用循环问题。Block_private可能会揭示这些机制的具体实现。 3. **BlockImplementation**: 这...

    Block循环引用的问题

    在iOS开发中,Objective-C...了解并掌握如何处理Block循环引用是每个OC开发者必备的技能,这不仅能优化应用性能,还能减少因内存泄漏导致的程序崩溃。通过不断学习和实践,我们可以更好地应对这类问题,提升代码质量。

    Block反向传值Demo

    5. 避免内存泄漏:确保正确处理Block与捕获对象之间的引用关系,防止强引用循环。 6. 使用`weakSelf`技巧:为了避免Block内部对自身造成强引用,通常会定义一个弱引用的`weakSelf`指针,如`__weak typeof(self) ...

    block反向传值

    5. **处理Block回调**:在控制器A中,Block会被调用并处理返回的结果。 这种Block反向传值的方式避免了设置代理或注册通知的繁琐过程,同时也使得代码结构更清晰,因为Block可以直接嵌入到具体的操作中。不过需要...

    FusionStorage Block运维故障处理指南.pptx

    FusionStorage Block 运维故障处理指南 FusionStorage Block 是华为分布式存储系统,了解和掌握 FusionStorage Block 的故障处理方法,可以更好的部署和维护企业云计算存储环境。本指南将为您介绍 FusionStorage ...

    元素超过线程个数时的处理方案

    # 在这里处理block内的元素,例如执行加法操作 pass def add_loop_long_blocks(elements, num_threads): block_size = len(elements) // num_threads # 计算每个线程处理的元素数量 remainder = len(elements) ...

    FusionStorage Block故障处理概述.pptx

    【FusionStorage Block 故障处理概述】 华为的FusionStorage Block是一款先进的分布式存储系统,为企业级云计算存储环境提供高效、稳定的服务。了解并掌握其故障处理方法是确保系统正常运行的关键。 1. **Fusion...

    Block 处理cell上button的点击事件

    在iOS开发中,我们经常...这种方法让代码更简洁,易于理解和维护,同时也提供了更高的灵活性,因为我们可以直接在Block中处理事件,而无需跳转到其他方法。在实际项目中,这种技术经常被用来增强UITableView的交互性。

    block-kit-handler:一个用于处理Slack Block Kit的npm模块

    block-kit-handler允许您以更少的代码和更轻松的方式以编程方式处理Block Kit。安装npm install block-kit-handler用法我有一个Github项目,展示了如何使用block-kit-handler。 有关详细信息,请参阅。信息import {...

    swift-防微信底部操作提示弹框分别用代理block实现轻松调用实现效果

    `addOption(withHandler:)`方法允许添加一个新的操作处理Block。当用户选择一个选项时,我们可以找到对应的Block并执行它。 结合这两种方法,开发者可以根据需求灵活选择实现方式。代理协议适用于需要在多个地方...

    SAP方丈-Coding Block详解x.doc

    一个典型的Coding Block包括了输入处理、主逻辑、错误处理和输出处理四个部分。输入处理负责收集和验证必要的数据;主逻辑则是实现具体功能的核心部分;错误处理用于捕获可能出现的问题并给出相应的反馈;最后,输出...

    block回调测试

    下面我们将详细探讨Block的基础知识,Block作为回调的使用,以及如何处理回调时的参数传递。 一、Block基础 Block是Objective-C中的一个内联函数对象,它可以捕获并存储其定义范围内的局部变量,包括自动变量和...

Global site tag (gtag.js) - Google Analytics