Назад | Перейти на главную страницу

Распределение разделов таблицы по дискам

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

Текущая схема таблицы:

CREATE TABLE IF NOT EXISTS `a` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `special_key` varchar(20) NOT NULL DEFAULT '0',
  `data1` varchar(20) NOT NULL,
  `data2` varchar(20) NOT NULL,
  `updated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`,`special_key`),
  UNIQUE KEY `special_key` (`special_key`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4
PARTITION BY KEY (special_key)
PARTITIONS 12;

Если бы мы сделали это при первоначальном разбиении, работающая команда выглядела бы так:

ALTER TABLE `a`
partition by key(special_key) PARTITIONS 12  
(
PARTITION p0 ,
PARTITION p1 ,
PARTITION p2 ,
PARTITION p3 DATA DIRECTORY='/media/p1/mysql_table_a',
PARTITION p4 DATA DIRECTORY='/media/p1/mysql_table_a',
PARTITION p5 DATA DIRECTORY='/media/p1/mysql_table_a',
PARTITION p6 DATA DIRECTORY='/media/p1/mysql_table_a',
PARTITION p7 DATA DIRECTORY='/media/p2/mysql_table_a',
PARTITION p8 DATA DIRECTORY='/media/p2/mysql_table_a',
PARTITION p9 DATA DIRECTORY='/media/p2/mysql_table_a',
PARTITION p10 DATA DIRECTORY='/media/p3/mysql_table_a',
PARTITION p11 DATA DIRECTORY='/media/p3/mysql_table_a',
);

Но теперь, когда мы уже разбили эту таблицу на разделы, есть ли способ заставить MySQL «перемещать» определенные разделы без повторного создания всей таблицы?

Копирование и символические ссылки на эти таблицы вручную работают, но это не 'правильно и это сбрасывается при любых дальнейших изменениях.

Является

ALTER TABLE `a` REORGANIZE PARTITION
     p0 INTO (PARTITION p0 DATA DIRECTORY='/media/p666/mysql_table_a');

что ты ищешь?

Документы предполагаем, что запуск на существующих разделах должен быть безопасным, что означает, что он не будет перераспределять всю таблицу.

ALTER TABLE с ADD PARTITION, DROP PARTITION, COALESCE PARTITION, REBUILD PARTITION или REORGANIZE PARTITION не создает никаких временных таблиц (кроме случаев, когда они используются с таблицами NDB); однако эти операции могут создавать и создают временные файлы разделов.

...

Операции REORGANIZE копируют только измененные разделы и не трогают неизмененные.