Оптимизация за счёт переменных MySQL

Pustota

Новичок
Оптимизация за счёт переменных MySQL

Народ, есть виртуальный сервер Linux с установленным 4.1 MySQL'ем.
Сразу опишусь: Нагрузка на базу велика. Таблиц, одновременно использующих в запросе около 12. В день около 1200 юзеров ищут что-то по этой базе. В базе примерно 6,000,000 записей. В мегабайтах около 700.
Вот хотел такую тему обсудить. В MySQL есть переменные, которые могут повлиять на производительность. Но в справочнике много непоясненного для меня оказалось:

1. Переменная key_buffer_size. Было установлено в значение 8388600 (я так понял байт). Вычитал, что рекомендуется устанавливать в 25-30% от всей доступной памяти на сервере. На виртуальной машине выделено под этот сервер 256 мегов. Получается, что надо ставить 64 мега? И как это скажется на другие процессы? Там ещё помимо этого стандартный web-серверский набор: Апач, ПХП, FTPD, почта. Я выделил 32 мега. На глаз прироста не ощутил.

2. table_cache. Был установлен вообще на смешном уровне - 64. В справочнике рекомендовали 200. Выкрутил на 1024.

3. read_rnd_buffer_size. Было 262144. Поставил на 1024000. Тоже, что дало - не понятно. И сколько нужно?

И ещё, порядок всех этих переменных разумный? Просто мнене с чем было сравнить. Может, кто подскажет у кого сколько стоит из этих переменных. Сами запросы пока оптимизировать не советуйте. Это отчасти сделано. Я хочу сначала настроить сервер под вышеобозначенные задачи путём изменения глобальных переменных MySQL.
 

Апельсин

Оранжевое создание
1. key_buffer_size используется для кэширования индексов. 25-30% - это весьма и весьма условная цифра. Посмотрите соотношение key_reads/key_read_requests из show status. Желательно что бы эта величина была как можно меньше.

2. table_cache необходимо устанавливать в зависимости от кол-ва ваших таблиц. Если у вас всего 12 таблиц то смысла устанавливать 1024 - нет.

3. read_rnd_buffer_size используется при сортировке.

Далее. Вы просто отфонаря повыдергивали какие-то переменные, увеличили и чего-то там ждете. Так не бывает. Буферы надо настраивать под конкретную задачу. Если у вас есть много запросов на сортировку, тогда стоит увеличивать read_rnd_buffer_size/sort_buffer_size, если нет - значит не стоит. И так далее.
Не говоря уже о том, что сколько вы памяти не выделяйте, но если сами запросы не оптимизированы то настройки самого сервера вам не слишком помогут.

Для начала почитайте описание всех серверных переменных (что для чего используется) и описание статусных переменных SHOW STATUS. Найдите в чем конкретно у вас проблема и исходя из этого уже настраивайте сервер.
 

Pustota

Новичок
Код:
| Key_read_requests          | 114512783  |
| Key_reads                  | 223120     |
2. В справочнике грся, что количество таблиц, учавствующих в запросе нужно помножить на количество одновременно пользователей, которые сидят. Это получается около 5-10 одновременно. Да и таблиц всего конечно больше. В другой БД форум лежит ещё. Ещё кто-то что-то загружает.

3. Сортировка есть. Она в каждом запросе практически используется. Как раз и в той таблице с 6 миллионами записей. Из них пользователь может выбрать от 1 до 1000-1200 где-то записей.

И засоветы спасибо. Буду пробовать.
 
Сверху