Задача — нужно вести 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)