we are sorry, we are open

19.12.2010

И ещё один интересный замер MySQL-запроса — удаление строк

СисАдминство — Тэги: — Админ @ 12:35:09.

Таблица имеет почти 16 тысяч строк. Надо её почистить от старых записей:
mysql> delete from log where id < 188595088;
Query OK, 8798074 rows affected (33 min 35.91 sec)

При этом база была в работе и в таблицу данные поступали без видимых проблем.

9.12.2010

Ещё один замер работы с таблицами MySQL

СисАдминство — Тэги: — Админ @ 23:31:36.

Я уже как-то проводил оптимизацию нескольких MySQL-таблиц, для сведения замерял время и объёмы и размещал эти замеры здесь.

Похоже понадобилась оптимизация ещё одной таблицы — стал замечать медленный запрос,  которого раньше даже видно не было. Ничего особенно не менялось, чтобы вызвать какое-либо замедление выполнения запросов. Таблица на момент написания этой заметки содержала 1659783 записей, объём IBD-файла составлял почти 2 ГБ (2000683008 Б). Таблица содержит тексты личных сообщений пользователей форума, так что записи в ней часто удаляются и добавляются, так что оптимизация не помешает.

Команда «optimize table» выполнялась 5 минут 28 секунд и размер файла уменьшился до 1,4 ГБ (1488977920 Б).

Посмотрим, изменит ли это ситуацию с медленным запросом.

Попутно решил оттимизировать и несколько других таблиц.

2060421 строк, файл в 400МБ обработан за 1 минуту 54 секунда, размер файла стал 310 МБ.
434582 строк, файл в 330МБ обработан за 37 секунд, размер файла уменьшился мало — до 315 МБ.
Показателен файл таблицы с неким кэшем движка — 1588 строк, объём файла 1,9 ГБ — оптимизация длилась меньше 1 секунды и размер файла стал 10 МБ.



1.8.2010

Пара замеров работы с таблицами MySQL

СисАдминство — Тэги: — Админ @ 11:57:21.

Я не такой уж и большой специалист по MySQL, так что приведённые далее наблюдения прошу не считать показательными — это просто мои эксперименты на моём сервере и с моей БД )

Озаботился проблемой разрастания таблиц в БД. Надо их дефрагментировать. Таблицы в InnoDB. Провёл пару замеров с одной из самых больших таблицей под рукой — log:
— больше 3 миллионов записей;
— размер файла log.ibd — 3,5ГБ;

Для начала мне нужно было заменить значение одного из полей таблицы:
mysql> update log set tip='no data';
До замены в этом поле была довольно длинная строка с информацией user-agent, полученной от браузеров, посетителей, т.е. новая строка в несколько раз короче старой.
Результаты:
Query OK, 3033596 rows affected (57 min 56.91 sec)
Rows matched: 3239214 Changed: 3033596 Warnings: 0

Размер файла заметно увеличился — 4ГБ. Очевидно надо дефрагментировать таблицу (это был плавный переход к следующему тесту)))

Второй тест — оптимизация таблицы:
mysql> optimize table log;
Результаты:
mydb.log | optimize | note | Table does not support optimize, doing recreate + analyze instead
mydb.log | optimize | status | OK
2 rows in set (38 min 47.55 sec)

Размер файла существенно уменьшился — 2,7ГБ, а было ведь 4ГБ!
Напрашивается вывод о том, что оптимизацию надо проводить почаще, но тут надо учитывать, что во время оптимизации таблица будет заблокирована и недоступна для ваших скриптов.

Для полноты картины конечно не обойтись без информации о сервере — старенькая рабочая станция:
— софт — FreeBSD 7.2, apache 2, php, MySQL;
— Intel Pentium4 3.40GHz;
— RAM 3GB;
— система и БД лежат на двух разных винтах;
— сервер, фактически, выделенный;

Следующим будет оптимизация боевого, сильнонагруженного сервера, с кучей больших таблиц, общим размеров гигов под 10. Результаты сообщу дополнительно. Вот только надо выбрать время и заявить ТО на пару часов )

Дополнение от 03-08-2010

Добавление индекса к база размером более 4ГБ и с более 4 с половиной мульёна строк заняло 18 минут полного отказа СУБД от обслуживания:
mysql> alter table log add index (id_site);
Query OK, 4784444 rows affected (18 min 49.74 sec)
Records: 4784444 Duplicates: 0 Warnings: 0

Последние комментарии:

Powered by WordPress (29 queries. 0,319 seconds)