mysql -u zabbix -p zabbix -e "
SELECT
table_name AS 'Таблица',
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Размер (MB)',
table_rows AS 'Количество записей',
ROUND((data_length / 1024 / 1024), 2) AS 'Данные (MB)',
ROUND((index_length / 1024 / 1024), 2) AS 'Индексы (MB)'
FROM information_schema.TABLES
WHERE table_schema = 'zabbix'
ORDER BY (data_length + index_length) DESC
LIMIT 20;"
2. Проверка данных в таблицах истории
Дата диапазон в таблицах истории:
mysql -u zabbix -p zabbix -e "
SELECT
'history_uint' AS table_name,
MIN(FROM_UNIXTIME(clock)) AS oldest_record,
MAX(FROM_UNIXTIME(clock)) AS newest_record,
COUNT(*) AS total_records,
DATEDIFF(NOW(), FROM_UNIXTIME(MIN(clock))) AS days_span
FROM history_uint
UNION ALL
SELECT
'history',
MIN(FROM_UNIXTIME(clock)),
MAX(FROM_UNIXTIME(clock)),
COUNT(*),
DATEDIFF(NOW(), FROM_UNIXTIME(MIN(clock)))
FROM history
UNION ALL
SELECT
'trends',
MIN(FROM_UNIXTIME(clock)),
MAX(FROM_UNIXTIME(clock)),
COUNT(*),
DATEDIFF(NOW(), FROM_UNIXTIME(MIN(clock)))
FROM trends;"
3. Поиск проблемных элементов данных
Самые активные элементы (генерируют больше всего данных):
mysql -u zabbix -p zabbix -e "
SELECT
i.itemid,
i.name AS 'Элемент',
h.name AS 'Хост',
i.key_ AS 'Ключ',
i.delay AS 'Интервал (сек)',
COUNT(*) AS 'Записей за сутки',
ROUND(COUNT(*) / (24 * 3600 / i.delay), 2) AS 'Эффективность %'
FROM history his
JOIN items i ON his.itemid = i.itemid
JOIN hosts h ON i.hostid = h.hostid
WHERE his.clock > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))
GROUP BY i.itemid, i.name, h.name, i.key_, i.delay
HAVING COUNT(*) > 10000
ORDER BY COUNT(*) DESC
LIMIT 10;"
4. Проверка фрагментации таблиц
Уровень фрагментации таблиц:
mysql -u zabbix -p zabbix -e "
SELECT
table_name,
ROUND((data_free / 1024 / 1024), 2) AS fragmented_mb,
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS total_mb,
ROUND((data_free * 100 / (data_length + index_length + data_free)), 2) AS fragmentation_percent
FROM information_schema.TABLES
WHERE table_schema = 'zabbix'
AND table_name LIKE 'history%'
AND data_free > 0
ORDER BY fragmentation_percent DESC;"
5. Оптимизация таблиц
⚠️ Оптимизация может занять время и заблокировать таблицы! Выполняйте в период низкой нагрузки.
sudo mysqldumpslow /var/log/mysql/slow.log | head -20
Защита от повторения проблем
1. Настройка автоматического перезапуска MariaDB
Создание конфигурации для автоматического перезапуска:
sudo systemctl edit mariadb
Вставьте:
[Service]
Restart=on-failure
RestartSec=10
2. Мониторинг дискового пространства
Скрипт проверки места:
#!/bin/bash
THRESHOLD=90
USAGE=$(df /var/lib/mysql | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $USAGE -gt $THRESHOLD ]; then
echo "WARNING: Disk usage is ${USAGE}%"
echo "Cleaning old Zabbix data..."
# Автоматически запускаем очистку
/usr/local/bin/clean_zabbix_history.sh
fi
3. Регулярное обслуживание
Еженедельно: Проверяйте размер БД и выполняйте оптимизацию таблиц
Ежемесячно: Проверяйте логи на предмет ошибок и предупреждений
Квартально: Пересматривайте интервалы опроса элементов данных
Полгода: Проверяйте актуальность версий Zabbix и MariaDB
✅ Итог: Регулярное обслуживание базы Zabbix, мониторинг самых активных элементов данных и своевременная очистка старых записей предотвратят 90% проблем с производительностью и доступностью системы мониторинга.
Комментарии
Пока нет комментариев. Будьте первым!