powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как ускорить update?
6 сообщений из 6, страница 1 из 1
как ускорить update?
    #32535949
pgdumper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть вот такой update
Код: plaintext
update quotas set qt_traf_cur=qt_traf_cur- 1  where pk_qt= 144 
вот примерный план его выполнения
Код: plaintext
1.
2.
3.
4.
5.
Index Scan using quotas_pkey on quotas  (cost=0.00..110.00 rows=1 width=133)
 (actual time=0.37..143.61 rows=1 loops=1)
   Index Cond: (pk_qt = 144)
 Total runtime: 314.86 msec
(3 rows)

беда в том, что total runtime имеет свойство увеличиваться до 7-8 секунд!
update очень интенсивный.
есть рецепны как уменьшить время выполнения?
...
Рейтинг: 0 / 0
как ускорить update?
    #32536336
Hordi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В твоем случае архитектурно все идеально (индекс в запрос включен). Поэтому единственное что возможно, это регулярно делать VACUUM FULL ANALYZE.
...
Рейтинг: 0 / 0
как ускорить update?
    #32536357
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть изменить приложение, вместо сотни апдейтов "set qt_traf_cur=qt_traf_cur-1" выполнять один "set qt_traf_cur=qt_traf_cur-100"?
...
Рейтинг: 0 / 0
как ускорить update?
    #32536621
pgdumper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to LeXa NalBat

дело в том, что в реальности выражение выглядит как

"update quotas set qt_traf_cur=qt_traf_cur-? where pk_qt=?",

и только в момент выполнения ? заменяются на реальные величины.
кэширование в приложении реализовано.

to Hordi

"регулярно" это насколько часто? у меня крон скрипт раз в сутки (ночью) запускается. нужно чаще? как выполнение этой операции в разгар рабочего дня повлияет на реактивность субд?
...
Рейтинг: 0 / 0
как ускорить update?
    #32536885
pgdumper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашел ответы здесь. спасибо Genady
...
Рейтинг: 0 / 0
как ускорить update?
    #32539014
Wireless
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если к твоей таблице quotas происходит огромное число
параллельных обращений, то может помочь техника
замены UPDATE на INSERT. Естественно, это потребует
переписание всех остальных запросов к этой таблице.

Рассмотрим на другом примере - система счетчиков обращений к сайтам
(число посещений/просмотров, хостов по каждому сайту).
Напр, запрос
UPDATE sitestat SET visits = visits + 1 WHERE site_id = $site_id

заменить на
INSERT INTO sitestat_v2 (site_id, visits) VALUES ($site_id, 1)

Соотв-но, запрос получения стат-ки по какому-либо сайту
будет выглядеть как SELECT SUM(visits) FROM sitestat_v2 WHERE site_id=$site_id .
Поверьте, на очень волатильных таблицах таблицах этот запрос
будет выполняться практически столько же, сколько и
SELECT visits FROM sitestat WHERE ...
так как UPDATE в PostgreSQL - суть тот же INSERT, только еще плюс
неявный DELETE (вспоминайте про MVCC...).

Но, повторяю, экономия будет только если мы имеем большое число
параллельных обращений к таблице. Производительность повышается
за счет уменьшения числа ожиданий/локировок.

Естественно, ночью или в другое время, когда нагрузка снижается
при этой технике нужно запускать скрипт, который бы агрегировал
статистику по каждому сайту. В результате на каждый сайт останется
по 1 записи. После этого скрипта запускай VACUUM [FULL].

Удачи.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как ускорить update?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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