-- یک‌بار روی دیتابیس زنده (مثلاً kh_goldarvin) در Navicat اجرا شود. -- سفارش / کیف / مشتری را پاک نمی‌کند؛ فقط لاگ ورودی مانده و سند. -- بعد از اجرا دوباره دامپ بگیر؛ حجم باید از حدود ۲۳۰MB به حدود ۱۰–۲۰MB برسد. -- ایندکس برای حذف سریع SET @db = DATABASE(); SET @sql = IF( (SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'pargar_sync_logs' AND INDEX_NAME = 'pargar_sync_logs_type_status_index') = 0 AND (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'pargar_sync_logs') > 0, 'ALTER TABLE `pargar_sync_logs` ADD INDEX `pargar_sync_logs_type_status_index` (`type`, `sync_status`)', 'SELECT ''skip pargar_sync_logs_type_status_index'' AS info' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- نگه داشتن ۲۰۰۰ سند ورودی تازه DELETE FROM `pargar_sync_logs` WHERE `type` = 'document' AND `sync_status` = 'success' AND `id` <= ( SELECT `cutoff` FROM ( SELECT `id` AS `cutoff` FROM `pargar_sync_logs` WHERE `type` = 'document' AND `sync_status` = 'success' ORDER BY `id` DESC LIMIT 1 OFFSET 2000 ) AS `keep` ); -- نگه داشتن ۲۰۰۰ مانده تازه DELETE FROM `pargar_sync_logs` WHERE `type` = 'mande' AND `sync_status` = 'success' AND `id` <= ( SELECT `cutoff` FROM ( SELECT `id` AS `cutoff` FROM `pargar_sync_logs` WHERE `type` = 'mande' AND `sync_status` = 'success' ORDER BY `id` DESC LIMIT 1 OFFSET 2000 ) AS `keep` ); -- Event داخل خود MySQL — بدون کرون سیستم (Navicat → Events) DROP EVENT IF EXISTS `khanegi_prune_pargar_inbound_docs`; DROP EVENT IF EXISTS `khanegi_prune_pargar_inbound_mande`; CREATE EVENT `khanegi_prune_pargar_inbound_docs` ON SCHEDULE EVERY 1 HOUR STARTS CURRENT_TIMESTAMP ON COMPLETION PRESERVE ENABLE DO DELETE FROM `pargar_sync_logs` WHERE `type` = 'document' AND `sync_status` = 'success' AND `id` <= ( SELECT `cutoff` FROM ( SELECT `id` AS `cutoff` FROM `pargar_sync_logs` WHERE `type` = 'document' AND `sync_status` = 'success' ORDER BY `id` DESC LIMIT 1 OFFSET 2000 ) AS `keep` ) LIMIT 4000; CREATE EVENT `khanegi_prune_pargar_inbound_mande` ON SCHEDULE EVERY 1 HOUR STARTS CURRENT_TIMESTAMP ON COMPLETION PRESERVE ENABLE DO DELETE FROM `pargar_sync_logs` WHERE `type` = 'mande' AND `sync_status` = 'success' AND `id` <= ( SELECT `cutoff` FROM ( SELECT `id` AS `cutoff` FROM `pargar_sync_logs` WHERE `type` = 'mande' AND `sync_status` = 'success' ORDER BY `id` DESC LIMIT 1 OFFSET 2000 ) AS `keep` ) LIMIT 4000; -- اگر دسترسی SUPER داری: -- SET GLOBAL event_scheduler = ON; -- SHOW VARIABLES LIKE 'event_scheduler'; -- SHOW EVENTS;