Разбиение (секционирование) в бд zabbix My. SQLКогда количество устройств в zabbix перевалило за 1. Один из вариантов решения проблемы - партиционирование таблиц в базе данных(Mysql). Как это работает и преимущества разбиения нужно читать здесь https: //www. Сразу опишу перевод zabbix на партиции, с учетом того, что в zabbix уже есть данные. В настоящий момент, My. SQL поддерживает разбиение “из коробки”. Поддержка секционирования начинается с версии My. Выше был один из вариантов, второй комплексный вариант я видел у создателей уважаемого, думаю, не только мной Zabbix. Тех, кто использует или собирается использовать Zabbix в промышленных масштабах, всегда MySQL 5.5 партиционирование. Хаускипинг выключен, так как настроено партиционирование таблиц. Как подключиться к MySQL из Zabbix? 2 подписчика.. Партиционирование в mySQL [new]. Роман2343 Member. MySQL 5.5. Подскажите, пожалуйста, процедуру партиционирования уже существующей большой таблицы.. В общем есть Zabbix, есть его база, аж в целых 683 Гб и эта зараза когда- то его отключал забыл про партиционирование таблиц. SQL 5. 1, если у вас установлена версия более ранняя, то придется My. SQL придется обновить. Так же следует учесть, что сам My. SQL сервер должен быть собран с поддержкой секционирования. Проверить наличие можно командой: mysql> show variables like 'have_partitioning'. Variable_name | Value |. YES |. +- -- -- -- -- -- -- -- -- -- +- -- -- -- +. На офсайте предлагается секционировать следующие таблицы, проведя мониторинг использования таблиц, пришел к выводу, что и в моем случае этот список актуален. Вот эти таблицы с делением по дням: historyhistory_loghistory_strhistory_texthistory_uint. Сначала выполним бекапы,на всякий случай трех типов(для секционирования, если уже система мониторинга была в работе нам нужен третий тип): # mysqldump - u root - p zabbix > zabbix. Далее останавливаем zabbix демон, и отключаем веб интерфейс(например остановкой аппача). В конфиге zabbix сервера отключаем Housekeeper. Disable. Housekeeping=1. Создаем таблицу настроек секционирования. В этой таблице будут хранится настройки секционирования для таблиц Zabbix. SHOW CREATE TABLE `manage_partitions`. CREATE TABLE `manage_partitions` (. VARCHAR(6. 4) NOT NULL COMMENT 'Имя секционируемой таблицы'. VARCHAR(6. 4) NOT NULL COMMENT 'Период секционирования: day или month'. INT(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT 'Количество дней или месяцев хранения секций'. DATETIME DEFAULT NULL COMMENT 'Время последнего добавления секции'. VARCHAR(1. 28) DEFAULT '1' COMMENT 'Комментарии'. PRIMARY KEY (`tablename`). ENGINE=INNODB; Так же нужно заполнить таблицу ”manage_partitions” в соответствии с выбранным диапазоном разбиения и сроком хранения секций. INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('acknowledges', 'month', 6, now(), ''). INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('alerts', 'month', 6, now(), ''). INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('auditlog', 'month', 6, now(), ''). INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('events', 'month', 6, now(), ''). INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('service_alarms', 'month', 6, now(), ''). INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('history', 'day', 3. INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('history_uint', 'day', 3. INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('history_str', 'day', 1. INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('history_text', 'day', 1. INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('history_log', 'day', 1. INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('trends', 'month', 2. INSERT INTO manage_partitions (tablename, period, keep_history, last_updated, comments) VALUES ('trends_uint', 'month', 2. Изменяем движок таблицы housekeeper. ALTER TABLE housekeeper ENGINE = BLACKHOLE; Даже с включенной опцией Disable. Housekeeping=1 Zabbix сервер и веб- интерфейс будут писать информацию для будущей очистки базы в таблицу housekeeper. Чтобы этого избежать вы можете выставить ENGINE =Blackhole для этой таблицы. The BLACKHOLE storage engine acts as a “black hole” that accepts data but throws it away and does not store it. В некоторых сборах My. SQL подсистемы Black. Hole не имеется по умолчанию. Для того чтобы проверить имеется ли у вас эта подсистема выполните запрос SHOW ENGINES; 6. Очищаем выше обозначенные таблицы от данных. ERROR 1. 70. 1 (4. Cannot truncate a table referenced in a foreign key constraint (`zabbix`.`auditlog_details`, CONSTRAINT `c_auditlog_details_1` FOREIGN KEY (`auditid`) REFERENCES `zabbix`.`auditlog` (`auditid`)). ERROR 1. 70. 1 (4. Cannot truncate a table referenced in a foreign key constraint (`zabbix`.`acknowledges`, CONSTRAINT `c_acknowledges_2` FOREIGN KEY (`eventid`) REFERENCES `zabbix`.`events` (`eventid`)). Так как в My. SQL имеются внутренние ограничения использование уникальных индексов, первичных ключей и т. Zabbix. mysql> use zabbix. ALTER TABLE `acknowledges` DROP PRIMARY KEY, ADD KEY `acknowledges_0` (`acknowledgeid`). ALTER TABLE `alerts` DROP PRIMARY KEY, ADD KEY `alerts_0` (`alertid`). ALTER TABLE `auditlog` DROP PRIMARY KEY, ADD KEY `auditlog_0` (`auditid`). ALTER TABLE `events` DROP PRIMARY KEY, ADD KEY `events_0` (`eventid`). ALTER TABLE `service_alarms` DROP PRIMARY KEY, ADD KEY `service_alarms_0` (`servicealarmid`). ALTER TABLE `history_log` DROP PRIMARY KEY, ADD PRIMARY KEY (`id`,`clock`). ALTER TABLE `history_log` DROP KEY `history_log_2`. ALTER TABLE `history_log` ADD UNIQUE INDEX `history_log_2`(`itemid`,`id`,`clock`). ALTER TABLE `history_text` DROP PRIMARY KEY, ADD PRIMARY KEY (`id`,`clock`). ALTER TABLE `history_text` DROP KEY `history_text_2`. ALTER TABLE `history_text` ADD UNIQUE INDEX `history_text_2`(`itemid`,`id`,`clock`); для версии 2. ALTER TABLE `acknowledges` DROP FOREIGN KEY `c_acknowledges_1`, DROP FOREIGN KEY `c_acknowledges_2`. ALTER TABLE `alerts` DROP FOREIGN KEY `c_alerts_1`, DROP FOREIGN KEY `c_alerts_2`, DROP FOREIGN KEY `c_alerts_3`, DROP FOREIGN KEY `c_alerts_4`. ALTER TABLE `auditlog` DROP FOREIGN KEY `c_auditlog_1`. ALTER TABLE `service_alarms` DROP FOREIGN KEY `c_service_alarms_1`. ALTER TABLE `auditlog_details` DROP FOREIGN KEY `c_auditlog_details_1`; 8. Выполняем секционирование. PARTITION p. 20. 14_0. UNIX_TIMESTAMP("2. Создаем количество партиций, в соответствии с временным интервалом в пределах которого мы хотим сохранить уже существующие наши данные(если секционирование делаем не на «чистом» недавно установленным zabbix). Допустим у нас данные собирались с 0. Значит создадим партиции начиная с 0. Аналогичным образом поступаем и с таблицами, секционируемыми по месяцам. ALTER TABLE `history_uint` PARTITION BY RANGE ( clock). PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB). ALTER TABLE `history` PARTITION BY RANGE ( clock). PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB). ALTER TABLE `history_text` PARTITION BY RANGE ( clock). VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. ALTER TABLE `history_str` PARTITION BY RANGE ( clock). PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2. ENGINE = Inno. DB. PARTITION p. 20. 14_0. VALUES LESS THAN (UNIX_TIMESTAMP("2.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
November 2016
Categories |