Советы по оптимизации MySQL для полностью статической базы данных? - PullRequest
3 голосов
/ 03 июня 2011

У меня есть база данных размером около 20 ГБ. Я хочу знать, есть ли какие-либо советы по оптимизации, специфичные для работы со статической базой данных. Когда я имею в виду статический, я не имею в виду изменения нечасто, я имею в виду, что не изменится вообще. Существуют ли какие-либо экстремальные настройки для значений или других вещей, от которых вы обычно избегаете нестабильной базы данных, которые могут принести пользу действительно статичной базе данных; особенно учитывая, что будут только операторы SELECT и абсолютно нет операторов INSERT? Я использую таблицы MyISAM.

- росшлер

1 Ответ

1 голос
/ 07 июня 2011

Поскольку все это MyISAM, вам нужно сосредоточиться на двух основных вещах:

КЛЮЧ КЛЮЧ

Основным механизмом кэширования является кеш ключей. Он кэширует только индексные страницы из файлов .MYI. Чтобы изменить размер кэша ключей, выполните следующий запрос:

SELECT CONCAT(ROUND(KBS/POWER(1024,IF(PowerOfTwo<0,0,IF(PowerOfTwo>3,0,PowerOfTwo)))+0.4999),
SUBSTR(' KMG',IF(PowerOfTwo<0,0,IF(PowerOfTwo>3,0,PowerOfTwo))+1,1)) recommended_key_buffer_size
FROM (SELECT LEAST(POWER(2,32),KBS1) KBS FROM
(SELECT SUM(index_length) KBS1 FROM information_schema.tables
WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) AA) A,
(SELECT 2 PowerOfTwo) B;

Это даст Рекомендованную настройку для MyISAM Key Cache (key_buffer_size) с учетом вашего текущего набора данных ( запрос будет ограничен рекомендацией 4G (4096M) ). Для 32-битной ОС 4GB - это предел. Для 64-разрядных, 8 ГБ.

Индексы FULLTEXT

Вам следует изменить список стоп-слов. Вы можете изменить стоп-слова, потому что MySQL не будет индексировать этот список из 643 слов . Попробуйте создать свой собственный список стоп-слов и изменить минимальную длину слова.

Шаг 1) Создайте собственный список стоп-слов. Вы можете добавить «a», «an» и «the».

echo "a" > /var/lib/mysql/custom_stopwords.txt<BR>
echo "an" >> /var/lib/mysql/custom_stopwords.txt<BR>
echo "the" >> /var/lib/mysql/custom_stopwords.txt

Шаг 2) Добавьте эти параметры в /etc/my.cnf

ft_min_word_len=2
ft_stopword_file=/var/lib/mysql/custom_stopwords.txt

Шаг 3) перезапуск службы mysql

Шаг 4) Создайте новые индексы FULLTEXT. Любые существующие индексы FULLTEXT перед перезапуском mysql должны быть переиндексированы.

Дайте этим идеям попробовать !!!

...