Таблица pg_locks имеет много простых операторов выбора - PullRequest
0 голосов
/ 19 июня 2019

мы подключаемся к нашему серверу Postgresql (RDS) из нашего бэкэнда django, а также из lambda, иногда бэкенд запросов 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 строк простых запросов на выборку, выполняемых из лямбды, например:

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

1 Ответ

0 голосов
/ 19 июня 2019

Вы также можете попробовать повторно использовать соединение с базой данных, см. https://docs.djangoproject.com/en/2.2/ref/settings/#conn-max-age

    DATABASES = {
        'default': {
            ...
            'CONN_MAX_AGE': 600,             # reuse database connection
        }
    }
...