powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Зависает на UPDATE
19 сообщений из 19, страница 1 из 1
Зависает на UPDATE
    #35201911
Evgeny Bronnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE mytable
(
        id1        INTEGER NOT NULL,
        id2        INTEGER NOT NULL,
        value          INTEGER NOT NULL,
        PRIMARY KEY(id1, id2),
        FOREIGN KEY(id1) REFERENCES another_table(id) ON DELETE CASCADE,
        FOREIGN KEY(id2) REFERENCES users(id) ON DELETE CASCADE
);

В ней одновременно не более 30 строк. Строки часто обновляются - только поле value - (до нескольких раз в секунду), удаляются - раз в несколько минут, создаются новые (разв неск. минут).
Достаточно часто зависают запросы на UPDATE одной из строк - процесс может висеть часами пока не рестартнуть базу. При этом спокойно делается select, но удалить или изменить эту строку не даёт. С остальными строками работает нормально: изменяет, удаляет, добавляет.

В чем может быть проблема? Postgresql 8.1.11-1.el5_1.1, CentOS release 5 (Final).
Автовакуум отрублен. База пропахала примерно месяц.

Заранее спасибо за помощь.
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35202189
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny Bronnikov
В чем может быть проблема? Postgresql 8.1.11-1.el5_1.1, CentOS release 5 (Final).
Автовакуум отрублен. База пропахала примерно месяц.

Заранее спасибо за помощь.
А VACUUM делался хотя бы раз за месяц? А то при такой интенсивности работы, там уже физических строчек должно за миллион перевалить ;)
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35202357
Evgeny Bronnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет не делал :(
Зависает только на определенных id1 и id2 (они одинаковые значения содержат):
3008, 1008, 8, 1108. На других (их еще штук 20) никаких проблем...
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35202445
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny BronnikovДостаточно часто зависают запросы на UPDATE одной из строк - процесс может висеть часами пока не рестартнуть базу. При этом спокойно делается select, но удалить или изменить эту строку не даёт.возможно, проблема с блокировками. посмотрите select * from pg_locks
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35202465
Evgeny Bronnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VACUUM FULL не помог :(
в pg_locks висит вот что:

Код: plaintext
1.
2.
3.
4.
5.
6.
select * from pg_locks;
   locktype    | database | relation | page | tuple | transactionid | classid | objid | objsubid | transaction |  pid  |      mode       | granted
---------------+----------+----------+------+-------+---------------+---------+-------+----------+-------------+-------+-----------------+---------
 transactionid |          |          |      |       |       13853943  |         |       |          |     13853943  |  10000  | ExclusiveLock   | t
 relation      |     16384  |     10342  |      |       |               |         |       |          |     13853943  |  10000  | AccessShareLock | t
( 2  rows)

я не понимаю что это означает :(
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35202476
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny Bronnikovв pg_locks висит вот чтов момент зависшего запроса на update?
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35203560
Evgeny Bronnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вроде да..
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35203658
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny Bronnikovвроде да..вряд ли. в выдаче нет эксклюзивного лока на данные, который потребовал бы апдейт.
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35203802
Evgeny Bronnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что вообще за проблема может быть? Там нигде локи не ставятся в коде (было раньше SELECT FOR UPDATE, но я поубирал)
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35203840
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny BronnikovА что вообще за проблема может быть? Там нигде локи не ставятся в коде (было раньше SELECT FOR UPDATE, но я поубирал)Если две сессии одновременно делают update одной и той же строки, то пока первая не закоммитится, вторая будет ждать освобождения строки
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35203864
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny BronnikovТам нигде локи не ставятся в коде (было раньше SELECT FOR UPDATE, но я поубирал)при выполнении запросов select и update неявно ставятся локи, именно их можно увидеть в pg_locks
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35203870
Evgeny Bronnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pamir Evgeny BronnikovА что вообще за проблема может быть? Там нигде локи не ставятся в коде (было раньше SELECT FOR UPDATE, но я поубирал)
Если две сессии одновременно делают update одной и той же строки, то пока первая не закоммитится, вторая будет ждать освобождения строки


да это понятно. происходит всё так:
клиент пытается выполняет INSERT. Всё нормально происходит. При следующем его обращении на UPDATE - он виснет. Клиент отваливается, а на сервере процесс postmaster молотит до упора. Естественно все последующие обращения этого клиента к своей строчке зависают..
Параллельно никто не обращается - id1 и id2 это ID клиента, то есть на каждого клиента своя уникальная строчка в которую кроме него никто не лезет.
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35203959
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny BronnikovКлиент отваливается, а на сервере процесс postmaster молотит до упора.postmaster активно работает или спит?
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35204982
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35207035
Evgeny Bronnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat Evgeny BronnikovКлиент отваливается, а на сервере процесс postmaster молотит до упора.postmaster активно работает или спит?

молотит аж вся база колом встаёт (100% проца в топе показывает, я ему renice +19 делал - все равно нагружает).
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35207128
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeny Bronnikovмолотит аж вся база колом встаёт (100% проца в топе показываеттогда проблема видимо не в блокировках

покажете содержимое pg_locks во время выполнения "зависшего" апдейта? еще можно и содержимое pg_stat_activity.

покажите ещё дамп схемы базы "pg_dump -s" (к сообщению в этом форуме можно прикрепить файл)

Evgeny BronnikovVACUUM FULL не помог :(попорбуйте перестроить все индексы с помощью команды REINDEX
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35207298
Evgeny Bronnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Индексов нет вообще. Там всего штук 6 таблиц и очень много процедур, в т.ч. в виде модулей на Си.
Я уже показал как выглядит таблица, на которой зависает. Зависание происходит на конкретных id1 и id2. Возможно проблема в коде хранимых процедур, но тогда не понятно, почему остальные id не зависают..
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35207326
guest7777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Evgeny BronnikovИндексов нет вообще. Там всего штук 6 таблиц и очень много процедур, в т.ч. в виде модулей на Си.
Я уже показал как выглядит таблица, на которой зависает. Зависание происходит на конкретных id1 и id2. Возможно проблема в коде хранимых процедур, но тогда не понятно, почему остальные id не зависают..

PRIMARY KEY - это тоже индекс, надо посмотреть как он называется и попробовать его перестроить командой REINDEX
...
Рейтинг: 0 / 0
Зависает на UPDATE
    #35207354
Thamerlan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В часто обновляемых таблицах все FK constraint'ы должны быть проиндексированы! И если id1 у вас покрыт индексом от первичного ключа, то id2 нужно проиндексировать отдельным индексом.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Зависает на UPDATE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]