Ad Widget

Collapse

Стирание старых данных в БД

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Victor Vislobokov
    Senior Member
    • Aug 2018
    • 298

    #1

    Стирание старых данных в БД

    Как написано в доках, за стирание старых, ненужных данных отвечает процесс housekeeper, который делает всё автоматом.
    Как оказалось, всё да не всё, или я чего-то не понимаю.
    В общем был шаблон, который сохранял /proc/meminfo как элемент данных в формате текст. Период хранения истории этого элемента данных стоял 90 дней, при этом, интервал обновления 1 минута. Пока хостов было немного, меня это не особо заботило, но как только база пошла пухнуть не по-детски, я начал оптимизировать. И вот я отредактировал шаблон, установив период хранения истории 14 дней. С тех пор прошло 5 дней, сегодня я залез в базу и сделал запрос:

    Code:
    MariaDB [zabbix]> select min(itemid) from history_text;
    +-------------+
    | min(itemid) |
    +-------------+
    |       28880 |
    +-------------+
    1 row in set (0.01 sec)
    Далее, посмотрел к чему относится этот itemid, оказалось как раз к вышеописанному элементу данных. Далее нашёл минимальное время этого элемента данных:

    Code:
    MariaDB [zabbix]> select min(clock) from history_text where itemid=28880;
    +------------+
    | min(clock) |
    +------------+
    | 1550822120 |
    +------------+
    1 row in set (0.00 sec)
    Данное число соответствует 22 февраля. Сегодня 6 мая, но эти данные не вычищены, хотя период хранения для них уменьшен до 2 недель.
    И вот собственно вопрос - почему не вычистились старые данные и как вообще проверить, что housekeeper делает свою работу правильно?
    И наконец, могу ли я вычистить руками то, что не вычистил housekeeper и если да то как (чтобы не порушить зависимости внутри базы)?
  • Evgeniy
    Senior Member
    • May 2012
    • 157

    #2
    Сейчас не знаю как, но раньше было ограничение на работу housekeeper.

    Comment

    • Victor Vislobokov
      Senior Member
      • Aug 2018
      • 298

      #3
      Спасибо за ответ. Ограничение есть и сейчас, но проблема не в количестве удаляемых строк за один раз, а в том, что не удаляются более ранние данные. Я пробовал запускать его вручную - чем чаще запускаешь, тем меньше он пишет, что удаляет строк. Если бы каждый раз была одинаковая цифра, тогда было бы понятно - запускать надо почаще, пусть даже и руками.

      Про заплатки к housekeeper'у написано интересно, но к сожалению всё это относится к Заббикс 2.4, а у меня 4.0 и вряд ли что-то из описанного заработает корректно на моей версии.
      Так что вопрос по-прежнему открыт!

      Comment

      • Evgeniy
        Senior Member
        • May 2012
        • 157

        #4
        Как я понимаю, цифра и не должна быть одинаковой. И речь идет не о кол-ве удаляемых строк за раз (MaxHousekeeperDelete), а о другом ограничении. Т.е., например, имея HousekeepingFrequency=24 и самые старые данные по итему на 22 февраля, то после однократного запуска хаускипера, удаляться только данные за 22-26 февраля.

        Comment

        • Victor Vislobokov
          Senior Member
          • Aug 2018
          • 298

          #5
          Я уже в крон его поставил на ручной запуск каждые 3 минуты, чтобы чистил побыстрее. Завтра посмотрю на результаты.

          Comment

          • Victor Vislobokov
            Senior Member
            • Aug 2018
            • 298

            #6
            В общем штука такая. Действительно housekeeper не успевал удалять старые данные. Эта проблема решилась путём постановки вызова housekeeper в cron каждые три минуты.
            Спустя несколько дней он нагнал те данные, которые необходимо удалять и в этом плане всё стало хорошо, но теперь другая проблема.
            Я использую MySQL и InnoDB, после удаления данных, размер файла, содержащего таблицу не меняется. Если выполнить OPTIMIZE TABLE то таблица компактифицируется, но на время этой операции таблица блокируется и обновления данных тоже. А если таблица занимает как у меня - несколько десятков гигабайт, то время компактификации составляет 20-30 минут, что неприемлимо. Прочитал про партиционирование. Да, наверное можно было бы так сделать, однако это ломает насмерть работу housekeeper'а.

            Comment

            Working...