Ускорить токудб "изменить таблицу... двигатель =TokuDB"

Я пытаюсь преобразовать таблицу Innodb на 400 миллионов строк в движок Tokudb. Когда я начну с "alter table ... engine=TokuDB" вначале все шло очень быстро, (используя SHOW PROCESSLIST) я вижу, что он читает примерно 1 миллион строк каждые 10 секунд. Но как только я достигаю примерно 19-20 миллионов строк, чтение начинает замедляться и больше похоже на 10 000 строк каждые несколько секунд.

Существуют ли переменные mysql или tokudb, влияющие на скорость ALTER TABLE токудб работает? Я попробовал tmp_table_size и некоторые другие, но не могут преодолеть это препятствие.

Есть идеи?

2 ответа

Решение

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

  • tokudb_load_save_space: по умолчанию выключено и должно быть оставлено в покое, если у вас мало места на диске.
  • tokudb_cache_size: если не установлено, TokuDB будет выделять 50% оперативной памяти для собственного механизма кэширования, мы обычно рекомендуем оставить этот параметр в покое. Поскольку вы работаете на существующем сервере, вам необходимо убедиться, что вы не перегружаете память между TokuDB, InnoDB и MyISAM.

Решением этой проблемы для меня было экспортировать "в outfile" и импортировать "загрузить данные infile"

Для меня это было на несколько порядков быстрее (110 миллионов записей). Каждый раз, когда я изменяю большую базу данных токудов (изменяю таблицу), это занимает вечность (~30k/ сек). Быстрее был полный экспорт и импорт (~500k/sec). Пропущено изменение таблицы раз от часов до минут.

Это верно при конвертации из innodb или изменении нативного токудба (любая таблица изменения).

select a.*,calcfields from table1 a into outfile 'temp.txt';
create table table2 .....<br>
load data infile 'temp.txt' into table table2 (field1,field2,...);

PS: поэкспериментируйте с таблицей создания row_format=tokudb_lzma или же tokudb_uncompressed). Вы можете попробовать 3 способа довольно быстро (вам нужно сделать каталог уровня ОС ls, чтобы увидеть размер). Я тоже нахожу офлайн-индексы.

set tokudb_create_index_online=off;
create clustering index field1 on table2(field1); (much faster)

Несколько кластеризованных индексов могут изменить мир к лучшему, когда вы узнаете, когда их использовать.

Я использовал инструменты с графическим интерфейсом, которые изменяют таблицу для изменения индекса (время ожидания каждый раз). Делая это вручную, я делаю вещи намного более продуктивными (я потратил несколько дней, не используя GUI, чтобы сделать это за 30 минут)

Используя 5.5.30-tokudb-7.0.1-MariaDB и ОЧЕНЬ СЧАСТЛИВЫ.

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

Другие вопросы по тегам