Есть сервер на FreeBSD11 с системой мониторинга Zabbix 3.4 с БД на mysql 5.6.34 (без разбивки по файлам innodb_file_per_table=0). Сейчас БД весит около 90Гб, проверял через
SELECT table_schema as `Database`, table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC
Хочу оптимизировать размер БД, удалив устаревшие данные (например, историю состояния хостов). Что нужно сделать после запроса на удаление, чтобы физический размер БД сократился в соответствии с удаленными данными?
Mysql настроен так:
[mysqld]
long_query_time = 2
key_buffer_size = 512M
max_allowed_packet = 2M
sort_buffer_size = 16M
read_buffer_size = 16M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size = 256M
thread_cache_size = 16
query_cache_size = 256M
query_cache_type=1
query_cache_limit=1048576
max_connections = 2048
tmp_table_size=256M
max_heap_table_size=128M
innodb_file_per_table=0
innodb_buffer_pool_size = 32G
innodb_log_buffer_size = 32M
innodb_flush_method=O_DIRECT
innodb_doublewrite = false
innodb_flush_log_at_trx_commit = 0
innodb_log_file_size = 512M
innodb_buffer_pool_instances = 8
sync_binlog = 0
character-set-server=utf8
collation-server=utf8_bin
default-storage-engine=INNODB
max_allowed_packet=100M
1. Включить троттлинг (throttling).
Где искать. В правилах препроцессинга.
В Zabbix возможна настройка троттлинга двух видов:
⚡️ Discard unchanged — игнор повторяющихся значений. В этом случае график будет пустым, если метрика не меняется.
⚡️ Discard unchanged with heartbeat — игнор повторяющихся значений, но с регулярной проверкой жива ли метрика. На графике будут значения. Этот параметр препроцессинга требует ввода периода проверки. Если данные собираются раз в секунду, а интервал задан одной минутой, то Zabbix превратит ежесекундный поток единичек в ежеминутный поток.
2. Настроить переменное значение периода сбора данных.
Любой элемент данных можно собирать с разной периодичностью (или вообще не собирать) в зависимости от времени суток, дня недели или дня месяца. Примеры эпизодического сбора:
wd1−5h9 — каждый день с понедельника по пятницу в 9:00.
h9m/30;h11 — каждый день в 9:00, 9:30, 10:00, 10:30, 11:00.
h9−10m10−40/30 — каждый день в 9:10, 9:40, 10:10, 10:40.
md1wd1h9m30 — каждый первый день месяца в 9:30 если это понедельник.
Где искать. В настройках элементов данных (items), раздел пользовательский интервал (custom interval).
3. Удалять значение исходного элемента данных для зависимых элементов данных.
Простой пример: вы выполняете команду, которая возвращает портянку с данными, которые потом распознаёте при помощи зависимых метрик. Нет никакого смысла хранить эти данные. тем более если это большой текстовый блок.
Где искать. В настройках элементов данных, раздел период хранения истории. Установить значение в «не хранить».
Если наш подход заинтересовал, подробнее о наших услугах вы можете узнать на специальной странице
.
Data Base zabbix db
Тут будет различная инфа связная с базой заббикса. На основе MySQL MariaDB innodb
Обычно упираемся в следующие проблемы это :
1. Все стало тормозит пошли ложные срабатывания триггера сервер завис
2. Большие объемы данных нужно их подчистить
3. Потерянные данные нужно убрать
Больше нагрузка падает на оперативную память и на диск.
Сперва рассмотрим структуру базы, далее варианты ее очистки, поиска потерянных данных и тд.
То что сопоставил я к таблице
Связи означает что таблица сделана для связи других таблиц между собой ключами.
Если не хватает оперативки и быстрые диски можно временно использовать файл подкачки SWAP если его нет
Если не хватает оперативы на какое то время поможет swap, но он работает медленнее и быстрее изнашивает диск.
Для начала, нужно убедиться, что своп ещё не подключен:
swapon -s
Если команда выдала пустой результат или что-то навроде:
Результат:
Filename Type Size Used Priority
— значит, своп, скорее всего отсутствует.
Если в таблице в строке swap стоит 0, значит своп отсутствует
Быстрый способ
Используем fallocate:
fallocate -l 4G /swapfile
Результатом будет пустая строка, это нормально.
В отличие от dd, результат будет получен почти сразу, и я рекомендую именно его
Традиционный, медленный способ
команда
dd if=/dev/sda1 of=/swapfile bs=1G count=6
Синтаксис команды простой:
dd — команда предназначена для того, чтобы что-то куда-то копировать побайтово;
if=/dev/zero — указывает на источник, т.е. на то, откуда копируем, в данном случае из /dev/zero — это специальный файл в UNIX-подобных системах, представляющий собой источник нулевых байтов;
of=/swapfile — указывает путь назначения, куда копируем данные;
bs=1G — количество байт, которые будут записаны за раз. В нашем случае, 1 гигабайт. Обозначения: G — гигабайт, M — мегабайт, K — килобайт, и так далее;
count=4 — сколько блоков размером с bs будет создано, в нашем случае 4.
ошибиться с определением пути для of= (куда сохранять файл), можно повредить данные на диске
Теперь, когда файл создан, проверим результат:
ls -lh /swapfile
Ответ
-rw-r—r— 1 root root 6,0G мар 12 14:42 /swapfile
ограничим права доступа
chmod 600 /swapfile
ls -lh /swapfile
ответ
-rw——- 1 root root 6,0G мар 12 14:42 /swapfile
Теперь нужно сделать из swapfile файл подкачки:
mkswap /swapfile
Ответ
mkswap: /swapfile: warning: wiping old ext4 signature.
Setting up swapspace version 1, size = 6291452 KiB
без метки, UUID=9950de08-0d80-4440-93c8-dbcd8c1b31bf
Подключим его к системе:
swapon /swapfile
Проверка
swapon -s
Ответ
Filename Type Size Used Priority
/swapfile file 6291452 0 -1
Как очистить SWAP в Linux
Вообще, это делается с помощью отключения и включения свопа.
swapoff -a && sleep 3 && swapon -a
не рекомендую прибегать к этому способу, так как swap просто очищается,
а не переносится в ОЗУ, и, в случае наличия данных системных процессов, система может стать недоступна.
Удаление файла подкачки
Чтобы деактивировать и удалить файл подкачки, выполните следующие действия:
Сначала отключите пространство подкачки, набрав:
swapoff -v /swapfile
Затем удалите запись файла подкачки /swapfile swap swap defaults 0 0 из файла /etc/fstab.
Наконец, удалите фактический файл подкачки:
rm /swapfile
Запуск вручную Очистки истории Заббикс
zabbix_server -R housekeeper_execute
или
zabbix_server -c /usr/local/etc/zabbix_server.conf -R housekeeper_execute
Пример свернутых таблиц выстроенных по алфавиту для версии 4.2
Сохранённая страница как zabbixbdA-Z это id 1
— Дамп данных таблицы `pma__table_coords`
—
— Дамп данных таблицы `pma__table_coords`
—
Схему связи можно просмотреть скачав исходный архив zabbix_4.2.8.orig.tar.gz
Смотрим zabbix_4.2.8.orig.tar\zabbix_4.2.8.orig\zabbix-4.2.8\database\mysql\schema.sql