Вопрос

Я создал новый индекс на столе с 35 миллионов записей, и сейчас проводится почти 1 день. Ранее, когда я создал индексы, потребовалось 20 минут, там были столбцы, однако, плавающие. Новый IDNEX находится на Varchar (45)

Я использовал команду ProcessList, которая показывает создание индекса, все еще выполняется в следующем выходе

65417 | Repair with keycache | CREATE INDEX insert_index on checkins(dateinserted)

Мне было интересно, может ли кто-нибудь дать мне совет по выяснению, если запрос на самом деле мертв и просто сидит в списке процессов. Может быть, что-то пошло не так на некотором этапе, и я не знаю.

Спасибо

Это было полезно?

Решение

Ваш индекс строится, но очень медленно.

MySQL имеет два метода для строительства индексов:

  1. сортировка. Это самый быстрый метод, но использует много памяти.
  2. ключей Keycache. Медленный, медленный, медленный - но использует небольшую память.

Метод KeyCace немного похоже на сортировку вставки: значения вставляются в индекс один за раз. Это тот же метод, используемый сервером, когда оператор INSERT используется для добавления строк в таблицу.

Метод сортировки сортирует все значения, используя QuickSort, а затем создают индекс от этого. Это очень быстро, но требует много памяти и временного дискового пространства.

Некоторые переменные сервера могут увеличить пространство, доступное для метода сортировки, поэтому позволяет ему работать с большим количеством таблиц. Смотрите myisam_max_sort_file_size.

http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_myisam_max_sort_file_size.

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

sudo ls -l /proc/[mysql-pid]/fd  

Затем проверьте размер с хэшими в их имя - это временные файлы.

Другие советы

Имейте в виду, что размер индекса будет 35 м * 45, по меньшей мере. Если это столбец UTF8, то будет 35 м * 45 * 3. Это более 4 гигов! Если у вас нет тонн RAM, чтобы поддержать, что он должен будет делать много доступа к диску и действительно убивать производительность.

Можете ли вы нормализовать этот столбец в другой стол?

Если не сделают значения, как правило, варьируются достаточно, говорят первые 8 символов? Возможно, вы сможете сойти с простой индексацией первых 8, затем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top