Почему запрос на обновление postgresql иногда такой медленный, даже с индексом - PullRequest
4 голосов
/ 24 мая 2010

У меня есть простой запрос на обновление (тип столбца foo - BOOLEAN (по умолчанию false)):

update tablename set foo = true where id = 234;

для которого "id" установлен на (первичный) ключ, и если я запускаю "объяснить анализ"я получил:

Index Cond: (id = 234)
Total runtime: 0.358 ms

но, тем не менее, у меня есть множество необъяснимых запросов в медленном журнале (pgfouine), который занял более 200 с (?!):

Times executed: 99, Av. duration (s): 70

может кто-нибудь, пожалуйстаобъясните, в чем причина?(1,5 млн строк в таблице, postgresql 8,4)

Ответы [ 2 ]

2 голосов
/ 24 мая 2010

Мое первое предположение: у вас есть какой-то другой запрос, блокирующий всю таблицу или строки, которые обновляются.Ваше простое обновление заставляет ждать завершения этой другой операции.

1 голос
/ 27 июля 2011

Убедитесь, что у вас нет индекса или ограничения на обновленный столбец. Если это так, то база данных может выполнять пересчет индекса или оценку ограничений. Эти дополнительные задачи не включены в результат EXPLAIN ANALYZE.

Другая возможность заключается в том, что он медленный из-за операций ввода-вывода. Проверьте эту ветку о производительности ОБНОВЛЕНИЯ в Postgres .

...