0

我们从我们的 django 后端和 lambda 连接到我们的 Postgresql (RDS) 服务器,有时 django 后端查询超时,我运行以下查询来查看锁:

                SELECT
                    pg_stat_activity.client_addr,
                    pg_stat_activity.query
                FROM pg_class
                JOIN
                    pg_locks ON pg_locks.relation = pg_class.oid
                JOIN
                    pg_stat_activity ON pg_locks.pid =
                    pg_stat_activity.pid
                WHERE
                    pg_locks.granted='t' AND
                    pg_class.relname='accounts_user'

这给了我 30 行从 lambda 执行的简单选择查询,如下所示:

SELECT first_name, picture, username FROM accounts_user WHERE id = $1

为什么这个查询持有锁?我应该担心吗?

我正在使用 pg8000 库从 Lambda 连接

    with pgsql.cursor() as cursor:
        cursor.execute(
            """
            SELECT first_name, picture, username
            FROM accounts_user
            WHERE id = %s
            """,
            (author_user_id,),
        )
        row = cursor.fetchone()
    # use the row ..

我在 Github 上打开了一个问题,可能是因为我使用错误的库。https://github.com/tlocke/pg8000/issues/16

4

1 回答 1

0

您也可以尝试重用数据库连接,请参阅https://docs.djangoproject.com/en/2.2/ref/settings/#conn-max-age

    DATABASES = {
        'default': {
            ...
            'CONN_MAX_AGE': 600,             # reuse database connection
        }
    }
于 2019-06-19T15:15:19.333 回答