Настройка MySQL для быстрого создания столбцов / индексов во время разработки - PullRequest
2 голосов
/ 17 декабря 2009

Предположим, что MySQL MyISAM таблица с одним гигабайтом данных и одним гигабайтом индексов.

Кроме того, предположим, что во время разработки столбцы и индексы будут добавляться и удаляться из таблицы в таблицу довольно часто. Из-за размера базы данных создание столбца / индекса происходит медленно при использовании стандартных ненастроенных настроек MySQL.

Какие параметры сервера MySQL следует настроить, чтобы минимизировать время, необходимое для добавления новых столбцов / индексов?

Ответы [ 2 ]

4 голосов
/ 17 декабря 2009

Я считаю, что ключевые параметры, на которые вы должны обратить внимание: key_buffer_size, myisam_max_sort_file_size и myisam_sort_buffer_size. key_buffer_size является одним из наиболее важных параметров в целом для MyISAM, но двум другим может потребоваться некоторое пояснение.

С http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html:

myisam_max_sort_file_size

Максимальный размер временного файл, который разрешено использовать MySQL при повторном создании индекса MyISAM (во время ремонта таблицы, изменения таблицы или НАГРУЗКА ДАННЫХ INFILE). Если размер файла будет больше, чем это значение, индекс создается с использованием кеша ключей вместо этого, который медленнее. Значение дано в байтах.

Значением по умолчанию является 2 ГБ. Если MyISAM индексные файлы превышают этот размер и диск пространство доступно, увеличивая значение может помочь производительности.

myisam_sort_buffer_size

Размер буфера, который выделяется при сортировке индексов MyISAM во время ремонта таблицы или при создании индексы с CREATE INDEX или ALTER Таблица.

Максимально допустимая настройка для myisam_sort_buffer_size составляет 4 ГБ.

Итак, если вы ожидаете, что ваши индексы будут больше, чем myisam_max_sort_file_size, вы, возможно, захотите посмотреть, как это настроить. В противном случае myisam_sort_buffer_size может потребовать некоторого внимания.

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

3 голосов
/ 17 декабря 2009

Ниже приведены несколько советов.

  1. Установите key_buffer_size память, необходимую для хранения индекса. Выделенный размер должен быть больше размера, необходимого для столбца * номер строки, которую нужно проиндексировать. В вашем случае он должен быть больше 1 GB, поскольку вы указали, что размер индекса равен 1 ГБ. Для MyISAM Engine индекс может храниться в памяти, но не в данных.

  2. Если индекс необходимо создать на полях varchar, ограничьте число байтов, используемых для индексации. Например, если столбец имеет значение varchar(500), создание индекса для этого будет чрезмерным уничтожением, и оно будет бесполезным, если MySQL сможет охватить несколько записей, используя только первые несколько символов. Например 5 символов.

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

Надеюсь, это поможет.

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