RANGE partition bakımı: ileri partition aç, eskiyi arşivle / düşür
MySQLPartitionKomut
-- Mevcut partition'lar
SELECT PARTITION_NAME, PARTITION_DESCRIPTION, TABLE_ROWS
FROM information_schema.PARTITIONS
WHERE TABLE_SCHEMA = 'shop' AND TABLE_NAME = 'events_log' ORDER BY PARTITION_ORDINAL_POSITION;
-- Bos pmax'i bolerek yeni ay ekle
ALTER TABLE shop.events_log REORGANIZE PARTITION pmax INTO (
PARTITION p2026_11 VALUES LESS THAN ('2026-12-01'),
PARTITION pmax VALUES LESS THAN (MAXVALUE));
-- Eski ayi arsiv tablosuna tasi (aninda), sonra bos partition'i dusur
CREATE TABLE shop.events_log_2026_08 LIKE shop.events_log;
ALTER TABLE shop.events_log_2026_08 REMOVE PARTITIONING;
ALTER TABLE shop.events_log EXCHANGE PARTITION p2026_08 WITH TABLE shop.events_log_2026_08;
ALTER TABLE shop.events_log DROP PARTITION p2026_08;
-- Pruning kontrolu: partitions sutununda tek partition gorunmeli
EXPLAIN SELECT * FROM shop.events_log WHERE created >= '2026-10-01' AND created < '2026-11-01';Ne yapar?
Tarih bazlı RANGE partition'lı tabloda yeni dönem partition'ı ekler, eski dönemi EXCHANGE ile milisaniyeler içinde ayrı tabloya taşır ve partition'ı DELETE'e göre çok daha ucuz biçimde düşürür.
Ne zaman kullanılır?
Log / event / audit gibi zamanla büyüyen tablolarda aylık retention ve arşiv işlerinde.
Dikkat
Partition kolonu tüm unique key'lerde (PK dahil) bulunmalı. REORGANIZE PARTITION pmax, pmax'taki veriyi yeniden yazar; pmax'ı boş tut ve partition'ları önceden (ör. 3 ay ileri) aç. DROP PARTITION geri alınamaz ve satır satır binlog'a yazılmaz; replikada da DDL olarak çalışır. EXCHANGE hedefi aynı yapıda ve partition'sız olmalı; satırlar aralığa uymuyorsa hata verir (WITHOUT VALIDATION hızlıdır ama yanlış veriyi içeri alabilir). Partition DDL'leri tablo düzeyinde metadata lock alır. Pruning için WHERE'de partition kolonu fonksiyona sarılmadan kullanılmalı.