关键词搜索

源码搜索 ×
×

一次人大金仓剔除锁经历

发布2021-06-26浏览1143次

详情内容

前几天有同事在群里问,怎么杀掉人大金仓的锁?因为伊在安装软件的时候遇到警告,提示有锁,无法继续。

这种问题,应该由DBA负责,我们开发人员只是二把刀,甚至连二把刀都称不上,并非专业的DBA,况且人大金仓刚接触。就算是oracle,遇到这种问题,也只能查资料或翻看以往的记录,不可能记住这些繁琐的命令。这次也是从网上搜来的语句,我试了一下,问题解决。

SELECT pid,usename,application_name
app,client_addr,xact_start,wait_event_type,wait_event,state,query
FROM sys_stat_activity
WHERE pid<>(SELECT sys_backend_pid())
AND datname='gistest' AND usename='sde';//数据库名和用户名

SELECT sys_terminate_backend(6120);//将觉得有问题的pid处理一下,居然是用select,有点令人惊讶
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

第一条语句查找指定数据库和用户的当前活动,最重要的是列出了pid。如果觉得有些活动有问题,就终结它(terminate)。终结者,terminator,阿诺猪华生力啤。

这些pid由2个数字组成,中间用逗号隔开。但sys_terminate_backend函数里,它们全部堆上去,并无逗号。比如这个6120,明明是"6,120"。
在这里插入图片描述
sys_stat_activity,是人大金仓里的一个动态统计视图,显示每个会话进程的当前活动信息,如进程PID、进程状态、查询语句、 开始时间等。

在这里插入图片描述
同事这次遇到的锁,是有人修改了东西,没有commit,因此锁住了。这类似于是一个长事务。事务和锁,是关系型数据库支持并发的手段。事务的原则,简而言之,就是晚开启,早释放。长事务,是不受欢迎的。

附录:

 长事务的弊端

  • 阻止垃圾回收,导致表和索引膨胀
  • 频繁唤醒autovacuum进程,浪费I/O
     查找长事务
  • SELECT pid,state,query FROM sys_stat_activity WHERE state <> ‘idle’ AND now()-xact_start >
    interval ‘300s’;
     终止长事务、长连
  • SELECT sys_terminate_backend(pid
    )清理长事务

幸甚至哉,记它。

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载