Добрый день, уважаемые!Испытываю затруднения с работой MySQL 4.1.22-log.
Сервер 2 * Xeon 3,2 ГГц, 2 Гб памяти.
Около 40 запросов в секунду, пики до 100.Происходит "зависание" запросов, с последующим исчерпанием max_connections (=100) и отказом в обслуживании.
Переменные сервера по памяти:
key_buffer = 256M (пробовал до 512)
sort_buffer_size = 1M (пробовал до 2)
read_buffer_size = 1M (пробовал до 2)В slow-query.log очень много запросов (форума) следующего вида:
select ... i.name, c.name, t.subject, t.username, date_format(t.orderdate,'%Y%m%d%H%i%s') ... from forum_topic as t, forum_index as i, city as c where t.deleted='0' and t.orderdate>date_sub(now(),interval 14 day) and t.idc=c.id and i.id=t.idi order by t.orderdate desc;
Объединяются таблицы forum_index (разделы форума), forum_topics (темы форума), city (города) с последующей сортировкой по полю orderdate (timestamp).
Количество записей:
forum_index = 42
forum_topics = 107000
city = 5Индексы:
в forum_topic индекс idi_deleted по двум полям idi и deletedИсходя из этого есть предположения как можно оптимизировать запрос или таблицы? Очень надеюсь на вашу помощь.
Если данных мало - скажите.
>Добрый день, уважаемые!
>
>Испытываю затруднения с работой MySQL 4.1.22-log.
>Сервер 2 * Xeon 3,2 ГГц, 2 Гб памяти.
>Около 40 запросов в секунду, пики до 100.
>
>Происходит "зависание" запросов, с последующим исчерпанием max_connections (=100) и отказом в обслуживании.
>
>
>Переменные сервера по памяти:
>key_buffer = 256M (пробовал до 512)
>sort_buffer_size = 1M (пробовал до 2)
>read_buffer_size = 1M (пробовал до 2)
>
>В slow-query.log очень много запросов (форума) следующего вида:
>
>select ... i.name, c.name, t.subject, t.username, date_format(t.orderdate,'%Y%m%d%H%i%s') ... from forum_topic as t, forum_index as i, city as c where t.deleted='0' and t.orderdate>date_sub(now(),interval 14 day) and t.idc=c.id and i.id=t.idi order by t.orderdate desc;
>
>Объединяются таблицы forum_index (разделы форума), forum_topics (темы форума), city (города) с последующей
>сортировкой по полю orderdate (timestamp).
>
>Количество записей:
>forum_index = 42
>forum_topics = 107000
>city = 5
>
>Индексы:
>в forum_topic индекс idi_deleted по двум полям idi и deleted
>
>Исходя из этого есть предположения как можно оптимизировать запрос или таблицы? Очень
>надеюсь на вашу помощь.
>
>Если данных мало - скажите.два гига памяти, а ты всего 256 юзаешь :)
на буферы побольше отведи, на хранение индексов тоже
оптимизируй ядро под мускуль,рарреши зать больше гига памяти одному процессу, ну и тд...давай конфиг my.cnf, что за операционка у тебя? :)
FreeBSD 4.11Добавил буферов.
Конфиг такой:
[mysqld]
set-variable=max_heap_table_size=48M
set-variable=tmp_table_size=80M
set-variable=wait_timeout=600
port = 3306
socket = /tmp/mysql.sock
datadir = /db/mysql
skip-locking
default-character-set = cp1251
character-set-server = cp1251
key_buffer = 512M
max_allowed_packet = 1M
max_connections = 70
back_log = 30
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
Больше никто не может ничего сказать? Где прибавить, где убавить?
>Больше никто не может ничего сказать? Где прибавить, где убавить?sort_buffer_size = 2M
прибавляй пару нулейkey_buffer = 512M
увеличивай до полутора гигов (проверь только чтоб ядро разрешало юзать такой объем памяти одному процессу)max_connections = 70
тут лучше сделать около 200, чтобы с запасом... перезапустишь апач рестартом - коннекты незакрытые останутся, будет ошибка - лимит закончен
myisam_sort_buffer_size = 64M
тут раза в 4 большеthread_cache_size = 8
а ето считается как количество процессоров * на два
на самом деле просто поиграйся с параметром - тулка будет больше... тюнинг всетаки )
Сейчас установлен лимит на процесс 1,5 гига.Как я понимаю mysql выделяет sort_buffer_size и read_buffer_size для каждого соединения, получается если эти буфферы будут 200 метров, на 200 коннекций = 40 гиг.
Ты ничего не путаешь?