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

Код: 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
20.03.2008, 06:31
    #35202189
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает на UPDATE
Evgeny Bronnikov
В чем может быть проблема? Postgresql 8.1.11-1.el5_1.1, CentOS release 5 (Final).
Автовакуум отрублен. База пропахала примерно месяц.

Заранее спасибо за помощь.
А VACUUM делался хотя бы раз за месяц? А то при такой интенсивности работы, там уже физических строчек должно за миллион перевалить ;)
...
Рейтинг: 0 / 0
20.03.2008, 09:21
    #35202357
Evgeny Bronnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает на UPDATE
нет не делал :(
Зависает только на определенных id1 и id2 (они одинаковые значения содержат):
3008, 1008, 8, 1108. На других (их еще штук 20) никаких проблем...
...
Рейтинг: 0 / 0
20.03.2008, 09:52
    #35202445
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает на UPDATE
Evgeny BronnikovДостаточно часто зависают запросы на UPDATE одной из строк - процесс может висеть часами пока не рестартнуть базу. При этом спокойно делается select, но удалить или изменить эту строку не даёт.возможно, проблема с блокировками. посмотрите select * from pg_locks
...
Рейтинг: 0 / 0
20.03.2008, 09:59
    #35202465
Evgeny Bronnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает на UPDATE
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
20.03.2008, 10:02
    #35202476
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает на UPDATE
Evgeny Bronnikovв pg_locks висит вот чтов момент зависшего запроса на update?
...
Рейтинг: 0 / 0
20.03.2008, 14:28
    #35203560
Evgeny Bronnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает на UPDATE
вроде да..
...
Рейтинг: 0 / 0
20.03.2008, 14:48
    #35203658
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает на UPDATE
Evgeny Bronnikovвроде да..вряд ли. в выдаче нет эксклюзивного лока на данные, который потребовал бы апдейт.
...
Рейтинг: 0 / 0
20.03.2008, 15:18
    #35203802
Evgeny Bronnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает на UPDATE
А что вообще за проблема может быть? Там нигде локи не ставятся в коде (было раньше SELECT FOR UPDATE, но я поубирал)
...
Рейтинг: 0 / 0
20.03.2008, 15:25
    #35203840
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает на UPDATE
Evgeny BronnikovА что вообще за проблема может быть? Там нигде локи не ставятся в коде (было раньше SELECT FOR UPDATE, но я поубирал)Если две сессии одновременно делают update одной и той же строки, то пока первая не закоммитится, вторая будет ждать освобождения строки
...
Рейтинг: 0 / 0
20.03.2008, 15:30
    #35203864
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает на UPDATE
Evgeny BronnikovТам нигде локи не ставятся в коде (было раньше SELECT FOR UPDATE, но я поубирал)при выполнении запросов select и update неявно ставятся локи, именно их можно увидеть в pg_locks
...
Рейтинг: 0 / 0
20.03.2008, 15:30
    #35203870
Evgeny Bronnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает на UPDATE
pamir Evgeny BronnikovА что вообще за проблема может быть? Там нигде локи не ставятся в коде (было раньше SELECT FOR UPDATE, но я поубирал)
Если две сессии одновременно делают update одной и той же строки, то пока первая не закоммитится, вторая будет ждать освобождения строки


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

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

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

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

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

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


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