繁体   English   中英

Google Cloud App Engine - Django 应用程序使用 PostGreSQL 失去 SQL 连接

[英]Google Cloud App Engine - Django App using PostGreSQL loses SQL connection

我一直在通过 Google Cloud App Engine 为我的 Django 应用程序使用 PostGreSQL。 最近,我开始看到以下问题:

...
File "/env/lib/python3.7/site-packages/django/utils/asyncio.py", line 26, in inner      return func(*args, **kwargs)    
File "/env/lib/python3.7/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection      self.connect()    
File "/env/lib/python3.7/site-packages/django/db/utils.py", line 90, in __exit__      raise dj_exc_value.with_traceback(traceback) from exc_value    
File "/env/lib/python3.7/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection      self.connect()    
File "/env/lib/python3.7/site-packages/django/utils/asyncio.py", line 26, in inner      return func(*args, **kwargs)    
File "/env/lib/python3.7/site-packages/django/db/backends/base/base.py", line 197, in connect      self.connection = self.get_new_connection(conn_params)    
File "/env/lib/python3.7/site-packages/django/utils/asyncio.py", line 26, in inner      return func(*args, **kwargs)    
File "/env/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 185, in get_new_connection      connection = Database.connect(**conn_params)    
File "/env/lib/python3.7/site-packages/psycopg2/__init__.py", line 126, in connect      conn = _connect(dsn, connection_factory=connection_factory, **kwasync)  
django.db.utils.OperationalError: FATAL:  remaining connection slots are reserved for non-replication superuser connections

我的数据库设置如下:

if os.getenv('GAE_APPLICATION', None):
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'HOST': '/cloudsql/MYAPP:europe-west2:MYAPP',
            'NAME': 'MYNAME',
            'USER': 'MYUSER',
            'PASSWORD': access_secret_version("MYSECRET_SQL_PASSWORD"),
            'PORT': '5432',
        }
    }

这实际上意味着什么?

这基本上意味着您正在达到实例的并发连接限制,并且需要增加限制或关闭一些不需要的连接。

您可以通过使用max_connections 标志来配置它来增加连接限制,但是,建议设置一个保持实例稳定的限制。 您还可以使用更高的 memory 更改您的实例机器类型,因为它提供了更高的默认并发连接限制。

另一种解决方案是使用带有pgbouncer的数据库连接池,因为 Django 框架不提供数据库连接池。 此外,在某些情况下,将CONN_MAX_AGE设置为零会有所帮助,因为它允许在每个请求结束时关闭数据库连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM