wrk 2025-01-29 12-27-13
mariadb: Создание шедулера для автоматической подрезки записей (заготовка не проверялась) -- Создание таблицы для логирования операций, если она еще не существует CREATE TABLE IF NOT EXISTS operation_log ( id INT AUTO_INCREMENT PRIMARY KEY, operation_time DATETIME NOT NULL, status VARCHAR(50) NOT NULL ); -- Создание события для автоматической подрезки записей DELIMITER // CREATE EVENT daily_cleanup ON SCHEDULE EVERY 1 DAY STARTS '2025-01-30 01:25:00' DO BEGIN -- Переменные для управления циклом DECLARE rows_affected INT DEFAULT 1; -- Инициализация для входа в цикл DECLARE batch_size INT DEFAULT 1000; -- Размер порции для удаления -- Цикл удаления записей WHILE rows_affected > 0 DO -- Удаление записей старше 24 часов (порциями) DELETE FROM protokol WHERE created_at < NOW() - INTERVAL 1 DAY LIMIT batch_size; -- Получение количества удаленных строк SET rows_affected = ROW_COUNT(); -- Регистрация статуса операции INSERT INTO operation_log (operation_time, status) VALUES (NOW(), CONCAT(rows_affected, ' записей удалено')); -- Задержка между итерациями (при необходимости) DO SLEEP(1); -- Задержка в 1 секунду (можно настроить) END WHILE; -- Оптимизация таблицы после завершения удаления (при необходимости) OPTIMIZE TABLE protokol; END; // DELIMITER ; Объяснение кода Создание таблицы operation_log: Проверяется существование таблицы для логирования операций. Если таблица не существует, она будет создана. Создание события daily_cleanup: Событие настроено на выполнение ежедневно в 1:25. Цикл удаления: Внутри события используется цикл WHILE, который продолжает удалять записи порциями по 1000 до тех пор, пока есть записи для удаления. Регистрация статуса: После каждой итерации количество удаленных записей записывается в таблицу operation_log. Оптимизация таблицы: После завершения удаления выполняется оптимизация таблицы protokol. 2025-01-29_13-09-47