Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Переход на partition / 7 сообщений из 7, страница 1 из 1
29.01.2014, 21:51:28
    #38542832
rSemen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход на partition
Приветствую, сообщество!

Недавно узнал про partition, "спинным мозгом" чуствую, что должно помочь мне. Но для экспериментов нужно джать админам задание по агрейду старого сервера с версии 5.0.45. Поэтому нужен совет - нужно ли вообще этим заниматься, чтоб админов загружать за зря. Итак постановка задачи.

Таблица MyIsam - 20 млн. строк, 12 Гб, нагрузка - до 100K запросов в сутки.
Для простоты некоторые дублирующие поля убрал (индексов и полей чуть больше).

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE `tov` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `iduser` smallint(6) NOT NULL default '0',
  `rz` varchar(14) NOT NULL default '',
  `name` varchar(255) NOT NULL default '',
  `keywords` text NOT NULL,
  `description` text NOT NULL,
  `param` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `iduser` (`iduser`),
  KEY `name` (`name`),
  KEY `firm` (`firm`),
  KEY `rzfirm` (`rz`,`firm`),
  FULLTEXT KEY `keywords` (`keywords`)
) ENGINE=MyISAM;



Обновление происходит блоками по ключу 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 приходится лопатить всю таблицу с вытекающими последствиями по времени ее обработки.

Спасибо заранее всем откликнувшимся.
...
Рейтинг: 0 / 0
29.01.2014, 22:09:24
    #38542855
Aleksandr Kuzminsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход на partition
rSemenПриветствую, сообщество!

Недавно узнал про partition, "спинным мозгом" чуствую, что должно помочь мне. Но для экспериментов нужно джать админам задание по агрейду старого сервера с версии 5.0.45. Поэтому нужен совет - нужно ли вообще этим заниматься, чтоб админов загружать за зря. Итак постановка задачи.


Вы бы о проблемах рассказали сначала. А то непонятно какую задачу пытаетесь решить.
Партиции - это не универсальное лекарство. Там есть свой оверхед и после перехода может быть только хуже
...
Рейтинг: 0 / 0
29.01.2014, 23:54:47
    #38542925
rSemen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход на partition
Aleksandr KuzminskyВы бы о проблемах рассказали сначала. А то непонятно какую задачу пытаетесь решить.


Страно, вроде пытался все обстоятельно нарисовать. Разве неясно про задачу?

Итак, основная задача - сокращение времени обновления при неухудшении времени выполнения полнотекстового поиска на сайте.


И подробности вроде есть. Что еще добавить?
...
Рейтинг: 0 / 0
30.01.2014, 00:26:06
    #38542942
Aleksandr Kuzminsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход на partition
rSemenСтрано, вроде пытался все обстоятельно нарисовать. Разве неясно про задачу?

Итак, основная задача - сокращение времени обновления при неухудшении времени выполнения полнотекстового поиска на сайте.



Ок, понял - прочитал невнимательно.
ИМХО поиск ухудшится. Если Вы сделаете партиции по iduser, то для поиска по keywords MySQL-ю надо будет сделать поиск по каждой из партиций, а это будет медленнее, даже если бы не было оверхеда, а он есть.
...
Рейтинг: 0 / 0
30.01.2014, 01:24:44
    #38542961
rSemen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход на partition
Мда, а жаль...
Я бы сам также ответил, так как это вроде очевидно для нескольких файлов.
Но меня ввела в заблуждение (я только знакомлюсь с партициями) следущая запись:
авторБолее того, ускорение достигается даже в случае выполнения запросов, затрагивающих все данные во всех партициях — ведь в этом случае сначала происходит первичная «обработка» таблиц по меньше, потом данные объединяются и производятся финальные вычисления. Так вот как раз «первые» этапы, в данном случае будут происходить гораздо быстрее.

на http://habrahabr.ru/post/66151/

А что Вы имеете под оверхедом в данном контексте, можно подробнее?
...
Рейтинг: 0 / 0
30.01.2014, 01:44:53
    #38542967
Aleksandr Kuzminsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход на partition
авторБолее того, ускорение достигается даже в случае выполнения запросов, затрагивающих все данные во всех партициях — ведь в этом случае сначала происходит первичная «обработка» таблиц по меньше, потом данные объединяются и производятся финальные вычисления. Так вот как раз «первые» этапы, в данном случае будут происходить гораздо быстрее.


я так понимаю, что "первый этап" - это чтение из индекса, а "финальные вычисления" - это filesoft etc.
Не будет чтение быстрее. Скорость поиска зависит от разветвленности дерева, а B+tree - слабо разветвленная структура. Т.е. разницу Вы увидите, если в большой таблице будет под миллиард записей, а в маленькой - миллион. (считаем, что первичный ключ 4 байта).

Даже для бинарного дерева разница будет большая. Помните игру "угадай число от 1 до 1000 за десять попыток"? Это возможно потому что 2^10 = 1024 < 1000. А если числа от 1 до 1000 побить на 10 груп, то за 10 раз вы уже не угадаете - надо сделать поиск в каждой группе, и заранее неизвестно в какой.


rSemenА что Вы имеете под оверхедом в данном контексте, можно подробнее?

Открыть таблицу(=партицию), получить лок, ... , отдать лок, закрыть таблицу.
Может еще что-то.
...
Рейтинг: 0 / 0
30.01.2014, 01:51:12
    #38542968
Aleksandr Kuzminsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переход на partition
Хотя, если запросы будут вида

Код: sql
1.
2.
WHERE `iduser` = ?
AND `keywords` ....



то чтение будет быстрее. Мы заранее знаем из какой партиции читать, к тому же она меньше, чем вся таблица
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Переход на partition / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]