медленное обновление avail в opds_catalog_book
6 years 2 months ago #1328
by tavx
tavx created the topic: медленное обновление avail в opds_catalog_book
Добрый день.
При сканировании коллекции довольно долго отрабатывает запрос. Если смотреть EXPLAIN, то вот что видим, хотя индекс присутствует:. А вот вариант без NOT:Лог postgresql:
Лог sopds-scanner:Как видно большую часть времени выполняется этот update
Как можно ускорить этот запрос?
Использую Postgresql 9.5 и sopds 0.41.
При сканировании коллекции довольно долго отрабатывает запрос
UPDATE "opds_catalog_book" SET "avail" = 1 WHERE NOT ("opds_catalog_book"."avail" = 0)
sopds=# EXPLAIN UPDATE "opds_catalog_book" SET "avail" = 1 WHERE NOT ("opds_catalog_book"."avail" = 0);
QUERY PLAN
----------------------------------------------------------------------------------
Update on opds_catalog_book (cost=0.00..29132.34 rows=300827 width=190)
-> Seq Scan on opds_catalog_book (cost=0.00..29132.34 rows=300827 width=190)
Filter: (avail <> 0)
(3 rows)
sopds=# EXPLAIN UPDATE "opds_catalog_book" SET "avail" = 1 WHERE ("opds_catalog_book"."avail" = 0);
QUERY PLAN
------------------------------------------------------------------------------------------------------------
Update on opds_catalog_book (cost=0.42..4.44 rows=1 width=190)
-> Index Scan using opds_catalog_book_2a63117d on opds_catalog_book (cost=0.42..4.44 rows=1 width=190)
Index Cond: (avail = 0)
(3 rows)
2017-03-01 12:51:39 MSK [18617-1594] sopds@sopds LOG: duration: 3099356.624 ms statement: UPDATE "opds_catalog_book" SET "avail" = 1 WHERE NOT ("opds_catalog_book"."avail" = 0)
Лог sopds-scanner:
2017-03-01 12:00:00,006 INFO ***** Starting sopds-scan...
2017-03-01 13:46:15,638 INFO Skip INPX file = /mnt/ceph/store/books/libs/fb2.Flibusta.Net/flibusta_fb2_local.inpx. Not changed.
2017-03-01 13:46:59,931 INFO Books added : 0
2017-03-01 13:46:59,931 INFO Books skipped : 0
2017-03-01 13:46:59,931 INFO Bad books : 0
2017-03-01 13:46:59,934 INFO Books DB entries deleted : (0, {})
2017-03-01 13:46:59,934 INFO Books in archives: 0
2017-03-01 13:46:59,934 INFO Archives scanned : 0
2017-03-01 13:46:59,934 INFO Archives skipped : 0
2017-03-01 13:46:59,934 INFO Bad archives : 0
2017-03-01 13:46:59,934 INFO Time estimated:1 hours, 46 minutes, 59 seconds.
Как можно ускорить этот запрос?
Использую Postgresql 9.5 и sopds 0.41.
Please Войти or Create an account to join the conversation.
- tavx
-
Topic Author
- Offline
- Новый участник
-
Less
More
- Posts: 2
6 years 2 months ago - 6 years 2 months ago #1330
by mitshel
mitshel replied the topic: медленное обновление avail в opds_catalog_book
Посмотрел... Действительно есть такая проблема с Postgre. Во втором случае все быстро так как обновилось всего 3 строки а в первом более 300 000. Но в Mysql все занимает секунды...
Видимо это частично связано с транзакционностью БД PostgreSQL и частично с ее архитектурой. Попробую разобраться с этим в ближайшее время. Будут идеи пишите!
Видимо это частично связано с транзакционностью БД PostgreSQL и частично с ее архитектурой. Попробую разобраться с этим в ближайшее время. Будут идеи пишите!
Last Edit: 6 years 2 months ago by mitshel.
Please Войти or Create an account to join the conversation.
- mitshel
-
- Offline
- Администратор
-
Less
More
- Posts: 297
- Karma: 8
6 years 2 months ago - 6 years 2 months ago #1331
by mitshel
mitshel replied the topic: медленное обновление avail в opds_catalog_book
В общем приблизительно понятно в чем дело. Дейсвительно в Postgre при массовых Update нужно учитывать особенности архитектуры системы. Пока посоветую вручную выполнить следующие модификации в БД:
После такой настройки таблицы opds_catalog_book выполнение найденного вами запроса будет происходить значительно быстрее.
Результат:
sopds# alter table opds_catalog_book SET ( fillfactor = 50);
sopds# VACUUM FULL opds_catalog_book;
После такой настройки таблицы opds_catalog_book выполнение найденного вами запроса будет происходить значительно быстрее.
Результат:
2017-03-09 20:28:48,471 INFO Books added : 0
2017-03-09 20:28:48,471 INFO Books skipped : 6029
2017-03-09 20:28:48,471 INFO Bad books : 1
2017-03-09 20:28:48,472 INFO Books DB entries deleted : (0, {})
2017-03-09 20:28:48,472 INFO Books in archives: 0
2017-03-09 20:28:48,472 INFO Archives scanned : 82
2017-03-09 20:28:48,472 INFO Archives skipped : 116
2017-03-09 20:28:48,472 INFO Bad archives : 0
2017-03-09 20:28:48,472 INFO Time estimated:0 hours, 7 minutes, 51 seconds.
Last Edit: 6 years 2 months ago by mitshel.
Please Войти or Create an account to join the conversation.
- mitshel
-
- Offline
- Администратор
-
Less
More
- Posts: 297
- Karma: 8
6 years 2 months ago - 6 years 2 months ago #1334
by tavx
tavx replied the topic: медленное обновление avail в opds_catalog_book
Спасибо за помощь.Скорость выросла больше чем в 5 раз.
2017-03-10 10:40:13 MSK [20999-3] postgres@sopds LOG: duration: 588496.282 ms statement: UPDATE "opds_catalog_book" SET "avail" = 1 WHERE NOT ("opds_catalog_book"."avail" = 0);
Last Edit: 6 years 2 months ago by tavx.
Please Войти or Create an account to join the conversation.
- tavx
-
Topic Author
- Offline
- Новый участник
-
Less
More
- Posts: 2
Time to create page: 0.099 seconds