зачем gallery_grabber блокирует базу?

webmaster
Posts: 41
Joined: Sat Feb 09, 2019 1:00 pm

Re: зачем gallery_grabber блокирует базу?

Post by webmaster »

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

Поправите в апдейте СВОЙ костыль - мы легко переключим все обратно, никаких проблем с этим нет.
admin
Site Admin
Posts: 38004
Joined: Wed Sep 10, 2008 11:43 am

Re: зачем gallery_grabber блокирует базу?

Post by admin »

Ок, как вы считаете надо сделать?
Don't forget to run script update
webmaster
Posts: 41
Joined: Sat Feb 09, 2019 1:00 pm

Re: зачем gallery_grabber блокирует базу?

Post by webmaster »

Лично я считаю что блокировку центральной таблицы граббером/чекером надо убирать обязательно. Чем заменить - ну например флагом в rot_settings на мастере или чем-то в этом роде.
admin
Site Admin
Posts: 38004
Joined: Wed Sep 10, 2008 11:43 am

Re: зачем gallery_grabber блокирует базу?

Post by admin »

А если 2 процесса одновременно прочтут?

А не сколько вы считаете лочит запрос?
Don't forget to run script update
webmaster
Posts: 41
Joined: Sat Feb 09, 2019 1:00 pm

Re: зачем gallery_grabber блокирует базу?

Post by webmaster »

Я в первом посте писал - даже сам запрос LOCK выполняется больше 7 секунд. Да, вы правильно сказали что это не время блокировки. Это фактически время на сброс всех уже активных запросов, буферов и т.п. в течение которого новые записи уже заблокированы, т.е. даже если вы просто подряд кинете команды LOCK/UNLOCK - это уже лаг в 7 секунд. А для нагруженной системы это много, особенно учитывая что процесс такой запускается часто.

Про "2 процесса одновременно прочтут" - с чего вдруг? Этот же мускул прекрасно разрулит параллельные запросы, использование команды типа SELECT checker_flag LOCK IN SHARE MODE никаких проблем вызывать не должно. И при этом заблокируется всего одна запись в маленькой таблице а не вся огромная таблица с галерами.
Или вообще использовать UPDATE checker_flag='on' WHERE checkerflag='off' и проверять ответ сервера - тогда можно совсем без блокировок обойтись.
tgptraffic_biz
Posts: 184
Joined: Fri Nov 16, 2018 2:59 pm

Re: зачем gallery_grabber блокирует базу?

Post by tgptraffic_biz »

Ну мы разбираем и разберем, я надеюсь, все заинтересованы в этом.
Пока вопрос gallery_grabber.php можно полностью отключить через админку ? То есть какие настройки надо поменять ?
webmaster
Posts: 41
Joined: Sat Feb 09, 2019 1:00 pm

Re: зачем gallery_grabber блокирует базу?

Post by webmaster »

Gallery Grabber Threads, count выставить в 0 в админке
admin
Site Admin
Posts: 38004
Joined: Wed Sep 10, 2008 11:43 am

Re: зачем gallery_grabber блокирует базу?

Post by admin »

поправлено на for update
но работать будет конечно только с innodb

проверьте плз есть ли у вас сейчас проблемы
Don't forget to run script update
webmaster
Posts: 41
Joined: Sat Feb 09, 2019 1:00 pm

Re: зачем gallery_grabber блокирует базу?

Post by webmaster »

Попробуем.
Хотя я и не понял ограничения про innodb, если делать установку флага например как
UPDATE rot_settings SET checker_flag='on' WHERE checkerflag='off' и потом смотреть affected row - то это будет работать одинаково надежно и на myisam и на innodb и в обоих случаях гарантированно не даст запуститься повторно. Но главное конечно чтобы rot_gallery_info не блокировалась.
admin
Site Admin
Posts: 38004
Joined: Wed Sep 10, 2008 11:43 am

Re: зачем gallery_grabber блокирует базу?

Post by admin »

да, идея хорошая
но тут немного разные подходы

в варианте

UPDATE rot_settings SET checker_flag='on' WHERE checkerflag='off'

если вернуло 0 то надо в цикле чекать пока не получишь 1

посмотрим, если будут проблемы то сделаю и такой вариант
Don't forget to run script update
Post Reply