psycopg2 + pgbouncer. Async mode with gevent error

試著忘記壹切 提交于 2019-12-21 21:26:43

问题


I've got an application psycopg2 + pgbouncer + gevent. Asynchronous application, ie one process serves multiple requests. Asynchronous access to database appeared in the latest version of psycopg2, if rather then 2.2. But just in this release introduces bug for which there is a lot of disconnections from pgbouncer. In the pgbouncer logs there are entries:

2011-10-04 12:16:38.972 4590 LOG C-0x1b3f490: database/user@10.58.65.143:43849 login successful: db=database user=user
2011-10-04 12:16:38.972 4590 LOG C-0x1b3f0a0: database/user@10.58.65.143:43850 login successful: db=database user=user
2011-10-04 12:16:38.973 4590 LOG C-0x1b40840: database/user@10.58.65.143:43802 closing because: client close request (age=0)
2011-10-04 12:16:38.973 4590 LOG S-0x1b5cd80: database/user@127.0.0.1:5432 closing because: unclean server (age=0)
2011-10-04 12:16:38.976 4590 LOG C-0x1b3ef50: database/user@10.58.65.143:43825 closing because: client close request (age=0)
2011-10-04 12:16:38.976 4590 LOG S-0x1b5e520: database/user@127.0.0.1:5432 closing because: unclean server (age=0)
2011-10-04 12:16:38.977 4590 LOG S-0x1b5e520: database/user@127.0.0.1:5432 new connection to server
2011-10-04 12:16:38.979 4590 LOG C-0x1b3f340: database/user@10.58.65.143:43791 closing because: client close request (age=0)
2011-10-04 12:16:38.979 4590 LOG S-0x1b5d410: database/user@127.0.0.1:5432 closing because: unclean server (age=0)
2011-10-04 12:16:38.980 4590 LOG S-0x1b5d410: database/user@127.0.0.1:5432 new connection to server
2011-10-04 12:16:38.983 4590 LOG S-0x1b5cd80: database/user@127.0.0.1:5432 new connection to server
2011-10-04 12:16:38.987 4590 LOG S-0x1b5dbf0: database/user@127.0.0.1:5432 new connection to server
2011-10-04 12:16:38.990 4590 LOG S-0x1b5c1b0: database/user@127.0.0.1:5432 new connection to server
2011-10-04 12:16:38.992 4590 LOG C-0x1b3ff10: database/user@10.58.65.143:43854 login successful: db=database user=user
2011-10-04 12:16:38.995 4590 LOG S-0x1b5c450: database/user@127.0.0.1:5432 new connection to server
2011-10-04 12:16:38.996 4590 LOG C-0x1b3f340: database/user@10.58.65.143:43855 login successful: db=database user=user
2011-10-04 12:16:38.996 4590 LOG C-0x1b3ee00: database/user@10.58.65.143:43828 closing because: client close request (age=0)
2011-10-04 12:16:38.998 4590 LOG S-0x1b5c300: database/user@127.0.0.1:5432 new connection to server
2011-10-04 12:16:38.999 4590 LOG C-0x1b3f1f0: database/user@10.58.65.143:43805 closing because: client close request (age=0)
2011-10-04 12:16:38.999 4590 LOG S-0x1b5daa0: database/user@127.0.0.1:5432 closing because: unclean server (age=0)
2011-10-04 12:16:39.010 4590 LOG C-0x1b41410: database/user@10.58.65.143:43655 closing because: client close request (age=1)
2011-10-04 12:16:39.010 4590 LOG S-0x1b5d2c0: database/user@127.0.0.1:5432 closing because: unclean server (age=1)
2011-10-04 12:16:39.011 4590 LOG S-0x1b5d2c0: datab+ase/user@127.0.0.1:5432 new connection to server
2011-10-04 12:16:39.014 4590 LOG C-0x1b3fc70: database/user@10.58.65.143:43818 closing because: client close request (age=0)
2011-10-04 12:16:39.014 4590 LOG S-0x1b5d170: database/user@127.0.0.1:5432 closing because: unclean server (age=0)
2011-10-04 12:16:39.042 4590 LOG C-0x1b40990: database/user@10.58.65.143:43822 closing because: client close request (age=0)
2011-10-04 12:16:39.042 4590 LOG S-0x1b5de90: database/user@127.0.0.1:5432 closing because: unclean server (age=0)
2011-10-04 12:16:39.043 4590 LOG C-0x1b40060: database/user@10.58.65.143:43820 closing because: client close request (age=0)
2011-10-04 12:16:39.043 4590 LOG S-0x1b5e280: database/user@127.0.0.1:5432 closing because: unclean server (age=0)

Maybe there is some way to configure pgbouncer, to avoid messages about unclean server? Information about a bug, like there is a patch that cures something. All packages from ubuntu repositories, apply patches on the production machine - not a good option. My config pgboucner:

[pgbouncer]
logfile = /var/log/postgresql/pgbouncer.log
pidfile = /var/run/postgresql/pgbouncer.pid
listen_addr = *
listen_port = 6432
unix_socket_dir = /var/run/postgresql

pool_mode = session

server_reset_query = DISCARD ALL;
server_check_query = select 1
server_check_delay = 10

max_client_conn = 1000
default_pool_size = 200

log_connections = 1
log_disconnections = 1

回答1:


You are probably not calling connection.close(). Before Psycopg 2.2 an implicit ROLLBACK was issued on connection delete, but this condition couldn't be guaranteed anymore (and even before it was considered not safe).

See http://initd.org/psycopg/docs/connection.html#connection.close



来源:https://stackoverflow.com/questions/7658714/psycopg2-pgbouncer-async-mode-with-gevent-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!