注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL:客户端会话中断后,会话中的语句会中断吗?  

2013-06-27 13:39:34|  分类: PG案例分析 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        今天  BBS  有朋友问到这么一个问题:假如在客户端执行某一查询语句需要 20 秒时间,而
在执行过程中由于某种原因客户端掉线了,此时查询语句在数据库服务端是被终止还是继续运行?

    带着这个问题,先做个简单的测试,看看结果如何?

一 客户端异常掉线测试
   
    测试严格按以下步骤进行:

--1.1 会话1
 [pg93@redhatB ~]$ psql francs francs
psql (9.3beta1)
Type "help" for help.

francs=> begin;
BEGIN
francs=> select pg_backend_pid();
 pg_backend_pid 
----------------
          30079
(1 row)

francs=> \timing
Timing is on.

francs=> select pg_sleep(120);
...
备注:这里还在执行过程中。

--1.2 另开一窗口查看会话1 状态
 [pg93@redhatB ~]$ ps -ef | grep 30079
pg93     30079  2504  0 11:47 ?        00:00:00 postgres: francs francs [local] SELECT                   
pg93     30104 29293  0 11:48 pts/1    00:00:00 grep 30079
  
--1.3 中断会话1
 这里模拟客户端异常,直接右键将会话1 的 SecureCrt 客户端关闭。

--1.4 继续查看会话1 状态
 [pg93@redhatB ~]$ ps -ef | grep 30079
pg93     30079  2504  0 11:47 ?        00:00:00 postgres: francs francs [local] SELECT                   
pg93     30104 29293  0 11:48 pts/1    00:00:00 grep 30079
 备注:说明客户端会话被关闭后,查询 SQL 依然在数据库服务器上执行,而没被中断。


二 总结

  1 以上测试的结果是:客户端中断后,语句依然在数据库端执行,有兴趣的朋友可以模拟更多的场景。
  
  2 当语句在客户端发送到数据库后,数据库忙着跑语句,而不会检查客户端的状态,因此客户端掉了,
     语句依然能执行,在程序中需要加入连接异常时的处理代码。
  
  3 当维护人员通过客户端 (psql, pgAdmin3) 时发出大的统计查询时,如果会话异常中断,此时最好
     联系 DBA ,查下会话是否还在跑,大的统计 SQL 可能要跑好几小时,会严重影响数据库性能。
    
三 参考


  评论这张
 
阅读(6443)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016