Ускорить токудб "изменить таблицу... двигатель =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 и ОЧЕНЬ СЧАСТЛИВЫ.
Надеюсь, это поможет другим при экспериментировании. Очевидно, очень поздно для оригинального аскера. Единственный существующий ответ не был конструктивным для меня. (Вопрос был)