Задача — нужно вести Web-логи. Не много, фактически — учёт посещений всеми пользователями всех ресурсов за 10-20 минут. На моих проектах это порядка (максимум) тысяч-десятков тысяч записей, каждая суммарной длиной в десяток-другой килобайт. Хранить нужно много разной информации и делать сложные выборки. Так что лучше MySQL ничего не придумал.
Проблема. На высокой активности MySQL какого-то фига начинает сильно грузить IO. Ладно, хранить данные всё равно не надо, делаю ENGINE=MEMORY. Отлично, IO резко падает, всё красиво.
Проблема №2. Поскольку таблица постоянно чистится, накапливается высокий уровень фрагментации. И вот тут — опа. Таблицы Memory не оптимайзятся. Уровень мусора постоянно растёт, пока размер таблицы не превысит tmp_table_size/max_heap_table_size, после чего начинают лететь ошибки «table is full». Фигня выходит, реальных данных в таблице едва несколько десятков мегабайт, а жрёт она пол-гига в памяти.
Как её оптимизировать? Есть идеи?
Есть, конечно, вариант, типа раз в час тупо грохать все данные, они не настолько критичны. Но криво.
Другой вариант — пересоздавать таблицу, делая новую временную из старой, потом грохать старую и создавать её заново. Мало того, что некрасиво, так ещё придётся вводить в систему блокировку использования логов, чтобы не сыпались ошибки, пока пересоздаётся таблица.
Какие ещё есть варианты?
Или, может, что-то вместо MySQL применить? Нужно хранить по каждому обращению несколько данных (строковых, целочисленных, с плавающей точкой), делать очень частое получение суммы по одному из параметров (суммарная загрузка — для выдачи 503 ошибки чрезмерно активным ботам и качальщикам) и периодические группировки по ряду параметров (изучение активности по классам/категориям объектов сайта и посетителей).
Ответ на:
комментарий
от leave
Ответ на:
комментарий
от KRoN73
Ответ на:
комментарий
от vromanov
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Каким образом можно дефрагментировать таблицы InnoDB СУБД MySQL? (2014)
- Форум типа time, только memory (2014)
- Форум Шифрование таблиц MySQL (2017)
- Форум [MySQL] починить таблицы (2010)
- Форум Типы таблиц разделов (2007)
- Форум Синхронизация таблиц MySQL (2011)
- Форум Синхронизация таблиц MySQL (2011)
- Форум Восстановление таблицы mysql (2008)
- Форум MySQL, большая таблица (2007)
- Форум mysql изменение таблиц (2007)