Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибки deadlock detected 
:(
    Опции темы
polin11
Дата 29.1.2022, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 6.6.2015

Репутация: нет
Всего: нет



Использую PGSQL. 
Есть  таблица записей ~ 1000K записей
https://www.db-fiddle.com/f/efkuMVy21JWNTE1HyTgYYk/0
Код

CREATE TABLE forms (
    id serial PRIMARY KEY,
    account int not null,
    author text,
    salary int NOT NULL
);
insert into  forms(account, author, salary) values 
(1, 'Иванов', 30),
(1, 'Петров', 40),
(2, 'Сидоров', 40),
(2, 'Сергеев', 50)


Есть запросы с UPDATE, INSERT, DELETE к этой таблице.
стали падать ошибки 

Код

ERROR: deadlock detected
DETAIL: Process 3415 waits for ShareLock on transaction 1958114794; blocked by process 87442.
Process 87442 waits for ShareLock on transaction 1958114529; blocked by process 3415.
HINT: See server log for query details.


Решил сделать блокировку по аккаунту на 5 секунд

Код

BEGIN ISOLATION LEVEL READ COMMITTED READ WRITE;
SET LOCAL statement_timeout = '5000ms'; 
SELECT PG_ADVISORY_XACT_LOCK("lock_id") FROM (
                SELECT UNNEST('{1100889}'::BIGINT[]) AS "lock_id"
            ) LocksId      
RESET statement_timeout


Это помогло избавиться от deadlock detected, но возникла другая проблема.
Если происходят частые вызовы 10 вызовов с интервалом 0.1 секунды для обновления сотрудников
из одного аккаунта, то  блокировку невозможно создать. 
Сами запросы сильно не тормозят, пробовал их ускорить по максимуму.

Есть ли какие-нибудь универсальные решения таких проблем?
Может кто-то сталкивался, есть общие советы? 
Можно ли почитать что-нибудь по данному вопросу? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.1045 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.