Size: a a a

2020 July 02

IZ

Ilia Zviagin in MySQL
Maksim Petuhov
Всем привет!
Есть два сервера на MariaDB 10.2.17  (master) и MariaDB 10.2.32 (slave). Возможно совпадение, но после обновления до последнего релиза слева он стал сильно отставать от мастера, при этом и insert/update на мастере вырос в 1.5 раза. Оба сервера используют разные ssd хранилки. Mysql tunner ничего не даёт по рекомендациям.
Wait io по нулям. Где может быть затык?
Памяти свободной вагон. Используются MyISAM.
Куда копнуть? Подскажите, пожалуйста.

Воркеров не добавить т.к. бд одна. Bin логи мастера пишутся на отдельный диск, relay на слейве на тот же ssd.
Вот ты же сам написал всё:

"Используются MyISAM.
Куда копнуть? "

:-D
источник

AM

Askold Monarkhov in MySQL
Ilia Zviagin
В плане -- ты нашёл случай бага в MySQL
У меня на рабочем пк и на продакшене этот баг, мускул 8 версии
источник

AM

Askold Monarkhov in MySQL
Я так понимаю, нужно откатиться?
источник

IZ

Ilia Zviagin in MySQL
Askold Monarkhov
У меня на рабочем пк и на продакшене этот баг, мускул 8 версии
Значит, ОЧЕНЬ повезло.
источник

IZ

Ilia Zviagin in MySQL
Askold Monarkhov
Я так понимаю, нужно откатиться?
На другую минорную версию вниз или вверх, да.
источник

IZ

Ilia Zviagin in MySQL
Askold Monarkhov
У меня на рабочем пк и на продакшене этот баг, мускул 8 версии
Ещё есть вариант, собрать из сорцов самому , отладить и полечить баг.
источник

AM

Askold Monarkhov in MySQL
Ilia Zviagin
Ещё есть вариант, собрать из сорцов самому , отладить и полечить баг.
К сожалению я не такой модный кодер такое делать
источник

IZ

Ilia Zviagin in MySQL
Askold Monarkhov
К сожалению я не такой модный кодер такое делать
Ещё можно упростить или изменить запрос, чтобы он делал то же, но проще.
источник

IZ

Ilia Zviagin in MySQL
Askold Monarkhov
К сожалению я не такой модный кодер такое делать
Тут падает явно при компиляции запроса, который не самый логичный.
select count(*) as aggregate from `orders` where exists (select * from `product_warehouse` where `orders`.`warehouse_id` = `product_warehouse`.`id` and exists (select *, COALESCE(
           (select min(`price`) from `product_warehouse` where `product_warehouse`.`product_id` = products.id and `product_warehouse`.`product_id` is not null and `product_warehouse`.`deleted_at` is null),
           (select min(`price`) from `product_pricing` where `product_pricing`.`product_id` = products.id)
       ) AS min_price from `products` where `product_warehouse`.`product_id` = `products`.`id` and exists (select * from `shops` where `products`.`shop_id` = `shops`.`id` and `shop_id` = '2')))
источник

AM

Askold Monarkhov in MySQL
Дело в том, что другого кодера этот запрос работает отлично
источник

MP

Maksim Petuhov in MySQL
Ilia Zviagin
Вот ты же сам написал всё:

"Используются MyISAM.
Куда копнуть? "

:-D
Идеология разрабчиков не позволяет перейти на innodb
источник

IZ

Ilia Zviagin in MySQL
Askold Monarkhov
Дело в том, что другого кодера этот запрос работает отлично
select *, COALESCE(    (select min(price) from  -- вот это место по-идиотски выглядит
источник

IZ

Ilia Zviagin in MySQL
Maksim Petuhov
Идеология разрабчиков не позволяет перейти на innodb
Это была полушутка , но как известно в любой полушутке есть доля полуправды...
источник

IZ

Ilia Zviagin in MySQL
Askold Monarkhov
Дело в том, что другого кодера этот запрос работает отлично
Вот эту колонку
 COALESCE(    
               (select min(`price`) from `product_warehouse`
               where `product_warehouse`.`product_id` = products.id
                 and `product_warehouse`.`product_id` is not null
                 and `product_warehouse`.`deleted_at` is null),
                               (select min(`price`) from `product_pricing`
               where `product_pricing`.`product_id` = products.id) ) AS min_price


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

AM

Askold Monarkhov in MySQL
Ilia Zviagin
Вот эту колонку
 COALESCE(    
               (select min(`price`) from `product_warehouse`
               where `product_warehouse`.`product_id` = products.id
                 and `product_warehouse`.`product_id` is not null
                 and `product_warehouse`.`deleted_at` is null),
                               (select min(`price`) from `product_pricing`
               where `product_pricing`.`product_id` = products.id) ) AS min_price


можно запросто выкинуть, она не влияет ни на что, но содержит два подзапроса
Понял спасибо, попробую
источник

IZ

Ilia Zviagin in MySQL
Askold Monarkhov
Понял спасибо, попробую
Ну и уплощить надо запрос, убрать по возможности вложенные вложенные подзапросы.
Думаю, это возможно.
источник

ls

løst søul in MySQL
Переслано от Nickolay Ihalainen
источник

ls

løst søul in MySQL
Maksim Petuhov
Всем привет!
Есть два сервера на MariaDB 10.2.17  (master) и MariaDB 10.2.32 (slave). Возможно совпадение, но после обновления до последнего релиза слева он стал сильно отставать от мастера, при этом и insert/update на мастере вырос в 1.5 раза. Оба сервера используют разные ssd хранилки. Mysql tunner ничего не даёт по рекомендациям.
Wait io по нулям. Где может быть затык?
Памяти свободной вагон. Используются MyISAM.
Куда копнуть? Подскажите, пожалуйста.

Воркеров не добавить т.к. бд одна. Bin логи мастера пишутся на отдельный диск, relay на слейве на тот же ssd.
а каких ты воркеров добавишь? myisam нетранзакционный
источник

AM

Askold Monarkhov in MySQL
Ilia Zviagin
Ну и уплощить надо запрос, убрать по возможности вложенные вложенные подзапросы.
Думаю, это возможно.
А как лучше, 3 запроса или 1 с вложенными
источник

AM

Askold Monarkhov in MySQL
В плане производительности
источник