【发布时间】:2010-12-31 16:58:35
【问题描述】:
您可以在问题的标题中看到我正在使用的软件组件的组合。
我在 Postgres 服务器(Win 7 Pro)上运行了一个简单的 10 表数据库。我有客户端应用程序(python 使用 psycopg 连接到 Postgres)以随机间隔连接到数据库以执行相对较轻的事务。一次只有一个客户端应用程序执行任何类型的繁重事务,并且通常小于 500 毫秒。他们中的其他人花费更多的时间连接而不是实际等待数据库执行事务。关键是数据库处于轻负载状态,但负载在读取和写入之间平均分配。
我的客户端应用程序本身作为服务器/服务运行。我发现能够 (1) 完全关闭 Postgres 服务器,以及 (2) 通过使用键盘中断终止客户端应用程序来破坏数据库是很常见的。
(1)是指服务器上的Postgres进程中止,需要重启服务。
通过(2),我的意思是每当客户端在重新启动并(可能)完成“恢复模式”操作后尝试访问数据库时,数据库就会再次崩溃。我需要从数据库服务器中删除旧的数据库/模式,然后每次重建它以使其恢复到稳定状态。 (在恢复模式之后,我尝试了各种真空组合,看看是否提高了稳定性;真空运行,但是当客户端再次尝试访问数据库时,服务器仍然会快速关闭。)
我不记得当我使用“taskkill”杀死客户端应用程序时看到相同的效果 - 只有在使用键盘中断来关闭 python 进程时。它不会一直发生,但经常发生,这是一个主要问题(25%?)。
真的很惊讶 anything 在客户端实际上能够删除“企业级”数据库。任何人都可以分享有关如何提高稳健性的提示,并希望能帮助我理解为什么会发生这种情况?谢谢,M
【问题讨论】:
-
这听起来可能很愚蠢,但你有没有可能在 Linux 上尝试一下(即使只有虚拟机/盒子)?如果没有错误,您就知道问题出在哪里...
-
那么,各种日志有什么要说的呢?你有没有调高日志级别?你得到什么确切的错误信息?您确定在杀死客户端进程时没有杀死-9ing postgres进程或其他东西吗?这不是一般的稳健性问题。我运行 pg 服务器,每秒处理 100 次查询,多年来没有停顿,它们永远不会崩溃,除非出现问题,比如坏的驱动器扇区或其他东西。
-
哦,是的,你运行的是什么版本的 pg?如果您确实发现了一个错误,并且您运行的是旧版本,那么尝试更新版本可能会解决这个问题。很高兴知道您使用的是什么版本。本周似乎有人在 9.0.2 中发现了一个非常真实的错误。如果你发现了一个错误,你通常可以很快地从 pgsql-general 列表中的开发人员那里获得一个补丁,以保持生产工作。过去我得到了两个不同的补丁,不到一天就恢复正常运行。
-
我的客户端应用程序本身作为服务器/服务运行。来自 linux 并在命令行中使用 windows - 我注意到 ctrl-c 会杀死 一切 从那个窗口开始,即使进程返回了一个提示并且在后台。
-
@DrColossos:有机会我会在CentOS 5.5上尝试,但近期无法尝试。 @Scott:我在日志中没有发现任何错误消息。系统日志只是说服务意外关闭。我不是 kill-9 服务器,因为我说过活动完全在客户端上。我很高兴您没有遇到与我相同的稳健性问题。正如我所说(在问题的标题中),我在 Win7 上使用 8.4.4 x32。 @Nate:同样,ctrl-C 或 taskkill 在客户端机器上执行,而不是在数据库服务器机器上。
标签: python postgresql database-connection psycopg2