Mysql реаликация. Многопоточность.

12
Bazis007
На сайте с 10.06.2008
Offline
84
1975

Здравствуйте, коллеги.

Дано: 2 сервера master-slave. С базы с большими таблицами (2-3 ГБ).

Если реплицируется какой-либо тяжёлый запрос, который выполняется более 1 минуты, то затормаживается вся очередь репликации. С запросами, которые работают с загруженной таблицей всё понятно, но даже запросы, которые её не используют не могут выполниться, и встают в очередь.

Соответственно вопрос, можно как-то организовать репликацию в несколько потоков, или как с этой проблемой бороться?

Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#1

Хм, 2-3 гб не так и много, а что у вас там за "сложные запросы" ? На которые по минуте уходит?

Есть около 15.000 ipv4 !!! (http://onyx.net.ua/price.php#ipv4) Качественный хостинг с 2005 года - лучшее клиентам! (http://onyx.net.ua/)
N
На сайте с 06.05.2007
Offline
419
#2
Bazis007:
Соответственно вопрос, можно как-то организовать репликацию в несколько потоков, или как с этой проблемой бороться?

Если у вас хотя бы 5.1 и вы попробуете изменить построчный формат репликации (или наоборот на покомандный) , то те же самые запросы возможно будут реплицироваться быстрее. Лучше бы посмотреть на их природу.

Bazis007:
запросами, которые работают с загруженной таблицей всё понятно, но даже запросы, которые её не используют не могут выполниться, и встают в очередь.

А вы уверены, что вам нужно именно репликацию ускорять, а не сервер ? Блокировки на серверах возникают не из-за репликации.

Очередь запросов в репликации тоже есть, но ее не так уж просто увидеть. Может, вы видите обычные блокировки в show processlist ?

Ну и многопоточную можно организовать. Зависит от того как вы мотивируете.

Кнопка вызова админа ()
Bazis007
На сайте с 10.06.2008
Offline
84
#3

Некоторое время назад таблицы раздувались до 15 ГБ. И комманда delete from .. Where time < (последние три дня) выполняться могла довольно долго. Подобные таблицы используются не часто.. но на 3-4 часа репликацию вешать из-за неё нельзя!

Сервер Core-i7 920. С ним полный порядок. Просто запросов до 20 тыс в сек )

Andreyka
На сайте с 19.02.2005
Offline
822
#4

Смотрите в сторону ndb кластера

Не стоит плодить сущности без необходимости
Bazis007
На сайте с 10.06.2008
Offline
84
#5

К сожалению он не подходит из-за особенностей выборок. Пытались его уже применить. Остановились пока на схеме master-master, и вцелом она нас устраивает, кроме этих моментов.

Himiko
На сайте с 28.08.2008
Offline
560
#6

А диски как себя чувствуют? Может как раз их производительности и не хватает.

Профессиональное администрирование серверов (https://systemintegra.ru). Круглосуточно. Отзывы (/ru/forum/834230) Лицензии (http://clck.ru/Qhf5) ISPManager,VDSManager,Billmanager e.t.c. по низким ценам.
iHead
На сайте с 25.04.2008
Offline
137
#7
Bazis007:
Некоторое время назад таблицы раздувались до 15 ГБ. И комманда delete from .. Where time < (последние три дня) выполняться могла довольно долго. Подобные таблицы используются не часто.. но на 3-4 часа репликацию вешать из-за неё нельзя!
Сервер Core-i7 920. С ним полный порядок. Просто запросов до 20 тыс в сек )

иногда проще переименовать большую таблицу (rename table ... to ...), создать новую со старым названием и структурой (create table ... like...) и скопировать в новую нужные данные из старой (insert into ... select * from ...), чем удалять миллионы строк из таблицы.

Рекомендуемый хостинг партнер 1С-Битрикс (https://www.ihead.ru/bitrix/), PHP-хостинг (https://www.ihead.ru/php/), доверенный партнер RU-CENTER (https://www.ihead.ru/news/573.html), официальный представитель REG.RU в Кирове (https://www.ihead.ru/news/851.html)
Romka_Kharkov
На сайте с 08.04.2009
Offline
485
#8

Bazis007, в вашем случае нужна регулярная ротация данных, например не delete from ... where > 3 дня, а delete ...... > 10 минут. Я думаю что тут можно оптимизировать чуток нагрузку.

Bazis007
На сайте с 10.06.2008
Offline
84
#9
Bazis007, в вашем случае нужна регулярная ротация данных, например не delete from ... where > 3 дня, а delete ...... > 10 минут. Я думаю что тут можно оптимизировать чуток нагрузку.

Сейчас уже так и делаем, точнее написан скрипт который интеллектуально подбирает колличество строк для Limit, чтоб запрос за 5 сек не вылазил. Этот манёвр решил определённую часть проблем.

А диски как себя чувствуют? Может как раз их производительности и не хватает.

atop в среднем показывает 15-20 % нагрузки на диск. Сервер оптимизировали таким образом, чтоб оперативка использовалась по максимуму. Ну да, когда падает тяжёлый запрос то до 90% подскакивает, но такое бывает редко.

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

Andreyka
На сайте с 19.02.2005
Offline
822
#10

Перейти менеджер очередей не думали?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий