
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
29.01.2014, 21:51:28
|
|||
|---|---|---|---|
|
|||
Переход на partition |
|||
|
#18+
Приветствую, сообщество! Недавно узнал про partition, "спинным мозгом" чуствую, что должно помочь мне. Но для экспериментов нужно джать админам задание по агрейду старого сервера с версии 5.0.45. Поэтому нужен совет - нужно ли вообще этим заниматься, чтоб админов загружать за зря. Итак постановка задачи. Таблица MyIsam - 20 млн. строк, 12 Гб, нагрузка - до 100K запросов в сутки. Для простоты некоторые дублирующие поля убрал (индексов и полей чуть больше). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Обновление происходит блоками по ключу iduser по следующему алгоритму: 1. Делается копия таблица tov_1, спасает INSERT ... SELECT, неплохо работает и таблица не лочится. 2. Все скрипты (и нагрузка) на сайте переключаются на копию tov_1, я назвал это псевдо-репликация smile самопально, но реально работает smile 3. Снимаются индексы 4. Последовательно обновляются блоками по полю iduser = N (размеры блоков от 100 до 1,5 млн строк) 4.1. Удаляются строки iduser = N (если не снимать индексы, удаляются долго) 4.2. Вставляются новые iduser = N 5. OPTIMIZE tov 6. Активируем ключи tov 7. Переводим скрипты сайта опять на tov Засада, в принципе, может быть в двух местах: 1. Поиск на сайте (обычно по fulltext на 20 млн.строках) 2. Обновление данных. Вот тут в настоящее время и есть засада- т.к. вся процедура даже не по всей таблице может занять сутки. если сократить до нексольких часов- врполне приемлемо. Итак, основная задача - сокращение времени обновления при неухудшении времени выполнения полнотекстового поиска на сайте. Обновление происходит блоками iduser = N. Уникальное кол-во iduser = 50-100. Новые значение iduser вводятся редко, вполне возможно применение "ручного" труда, хотя конечно лучше автоматом. Большая часть из таблицы: около 10 iduser размером 12 млн. строк из 20 вообще обновляются очень редко. Остальные iduser (около 50) в настоящее время по причине длительности процесса обновляются раз в неделю, но хотелось бы ежедневно. Основной вопрос: поможет ли кардинально применение секционирования (а имено по полю iduser)? Я так понял, что секционирование разбивает один файл (таблицу) на части, причем поиск по всей таблице, как утверждается, не ухудшается. Ну, а если не вдаваться в подробности, для моего случая работа с частями - гораздо удобнее, получается своего рода возможности по масштабированию. А сейчас, у меня очень громоздкая структура: для замены даже одного блока iduser приходится лопатить всю таблицу с вытекающими последствиями по времени ее обработки. Спасибо заранее всем откликнувшимся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.01.2014, 22:09:24
|
|||
|---|---|---|---|
|
|||
Переход на partition |
|||
|
#18+
rSemenПриветствую, сообщество! Недавно узнал про partition, "спинным мозгом" чуствую, что должно помочь мне. Но для экспериментов нужно джать админам задание по агрейду старого сервера с версии 5.0.45. Поэтому нужен совет - нужно ли вообще этим заниматься, чтоб админов загружать за зря. Итак постановка задачи. Вы бы о проблемах рассказали сначала. А то непонятно какую задачу пытаетесь решить. Партиции - это не универсальное лекарство. Там есть свой оверхед и после перехода может быть только хуже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.01.2014, 23:54:47
|
|||
|---|---|---|---|
|
|||
Переход на partition |
|||
|
#18+
Aleksandr KuzminskyВы бы о проблемах рассказали сначала. А то непонятно какую задачу пытаетесь решить. Страно, вроде пытался все обстоятельно нарисовать. Разве неясно про задачу? Итак, основная задача - сокращение времени обновления при неухудшении времени выполнения полнотекстового поиска на сайте. И подробности вроде есть. Что еще добавить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2014, 00:26:06
|
|||
|---|---|---|---|
|
|||
Переход на partition |
|||
|
#18+
rSemenСтрано, вроде пытался все обстоятельно нарисовать. Разве неясно про задачу? Итак, основная задача - сокращение времени обновления при неухудшении времени выполнения полнотекстового поиска на сайте. Ок, понял - прочитал невнимательно. ИМХО поиск ухудшится. Если Вы сделаете партиции по iduser, то для поиска по keywords MySQL-ю надо будет сделать поиск по каждой из партиций, а это будет медленнее, даже если бы не было оверхеда, а он есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2014, 01:24:44
|
|||
|---|---|---|---|
|
|||
Переход на partition |
|||
|
#18+
Мда, а жаль... Я бы сам также ответил, так как это вроде очевидно для нескольких файлов. Но меня ввела в заблуждение (я только знакомлюсь с партициями) следущая запись: авторБолее того, ускорение достигается даже в случае выполнения запросов, затрагивающих все данные во всех партициях — ведь в этом случае сначала происходит первичная «обработка» таблиц по меньше, потом данные объединяются и производятся финальные вычисления. Так вот как раз «первые» этапы, в данном случае будут происходить гораздо быстрее. на http://habrahabr.ru/post/66151/ А что Вы имеете под оверхедом в данном контексте, можно подробнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2014, 01:44:53
|
|||
|---|---|---|---|
|
|||
Переход на partition |
|||
|
#18+
авторБолее того, ускорение достигается даже в случае выполнения запросов, затрагивающих все данные во всех партициях — ведь в этом случае сначала происходит первичная «обработка» таблиц по меньше, потом данные объединяются и производятся финальные вычисления. Так вот как раз «первые» этапы, в данном случае будут происходить гораздо быстрее. я так понимаю, что "первый этап" - это чтение из индекса, а "финальные вычисления" - это filesoft etc. Не будет чтение быстрее. Скорость поиска зависит от разветвленности дерева, а B+tree - слабо разветвленная структура. Т.е. разницу Вы увидите, если в большой таблице будет под миллиард записей, а в маленькой - миллион. (считаем, что первичный ключ 4 байта). Даже для бинарного дерева разница будет большая. Помните игру "угадай число от 1 до 1000 за десять попыток"? Это возможно потому что 2^10 = 1024 < 1000. А если числа от 1 до 1000 побить на 10 груп, то за 10 раз вы уже не угадаете - надо сделать поиск в каждой группе, и заранее неизвестно в какой. rSemenА что Вы имеете под оверхедом в данном контексте, можно подробнее? Открыть таблицу(=партицию), получить лок, ... , отдать лок, закрыть таблицу. Может еще что-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&mobile=1&tid=1835321]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
20ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
23ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 298ms |

| 0 / 0 |
