Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2022, 19:54   #1
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию Ошибки deadlock detected

Использую 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 секунды для обновления сотрудников
из одного аккаунта, то блокировку невозможно создать.
Сами запросы сильно не тормозят, пробовал их ускорить по максимуму.

Есть ли какие-нибудь универсальные решения таких проблем?
Может кто-то сталкивался, есть общие советы?
Можно ли почитать что-нибудь по данному вопросу?
polin11 вне форума Ответить с цитированием
Старый 31.01.2022, 11:09   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

Цитата:
Сообщение от polin11 Посмотреть сообщение
10 вызовов с интервалом 0.1 секунды
может в этом причина...? имхо неправильно это
да таблица в 100т записей это ничто, чтоб в блокировки падать
если только обращение к БД не сделано через одно место
нет ли на клиенте запросов в цикле? как часто обращаются за данными с одного аккаунта, сколько таких активных аккаунтов?
ADSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание deadlock-а UaKot SQL, базы данных 0 26.04.2017 14:29
CallbackOnCollectedDelegate was detected KonstantinLitvn C# (си шарп) 6 14.11.2014 14:39
socket select deadlock letmefun C/C++ Сетевое программирование 1 02.05.2014 16:09
JBoss - Deadlock veter48 Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 0 14.11.2013 17:54
deadlock megachuhancer Win Api 2 08.07.2009 03:48