Büyük bir MySQL tablosundan veri silmek için DELETE ifadesini kullandığınızda disk alanı hemen serbest bırakılmaz. Veritabanı bunun yerine kayıtları veya veri sayfalarını yalnızca yeniden kullanılabilir olarak işaretler. Tablo alanını geri kazanmak ve disk kullanımını azaltmak için OPTIMIZE TABLE ifadesini çalıştırın.
Ön koşullar
OPTIMIZE TABLEifadesi yalnızca InnoDB ve MyISAM depolama motorları tarafından desteklenir.-
Örneğin kullanılabilir disk alanı, optimize etmek istediğiniz tablonun boyutuna eşit veya ondan büyük olmalıdır.
NotKullanılabilir disk alanı yetersizse öncelikle disk alanını genişletin. İşlem tamamlandıktan sonra ihtiyaca göre alanı küçültebilirsiniz; sistem fiyat farkını iade eder.
Kullanım notları
Önce büyük miktarda veriyi silin:
DELETEifadesiyle önemli miktarda veri silmedikçeOPTIMIZE TABLEçalıştırmak tablo alanı kullanımını azaltmada etkisizdir.Disk alanı kullanımında geçici artış:
OPTIMIZE TABLEçalıştırıldığında yeniden düzenlenen verileri depolamak için geçici bir tablo oluşturulur ve bu durum disk alanı kullanımını geçici olarak artırır. İşlem tamamlandığında geçici tablo silinir ve disk alanı kullanımı normale döner.Geri kazanım sonrası tablo ve dizin istatistikleri değişmeyebilir: Disk alanı serbest bırakılsa da tablo istatistikleri hemen güncellenmeyebilir. Daha fazla bilgi için bkz. ApsaraDB RDS for MySQL örneğimde OPTIMIZE TABLE çalıştırdıktan sonra depolama kullanımı neden değişmiyor?.
Yoğun saatlerde performans etkisi ve riskler: ApsaraDB RDS for MySQL 5,7 ve 8,0 sürümlerinde
OPTIMIZE TABLEifadesi çevrimiçi DDL kullanır ve eşzamanlı DML işlemlerine olanak tanır. Ancak bu işlemi büyük bir tabloda çalıştırmak G/Ç ve arabellek kaynak tüketiminde ani artışlara neden olabilir. Bu durum tablo kilitlenmelerine veya kaynak çekişmesine yol açarak yoğun saatlerde örnek kullanılamaz hale gelmesine veya izleme kesintilerine neden olabilir. Bu nedenle iş etkisini önlemek amacıyla işlemi yoğun olmayan saatlerde gerçekleştirin.
Komut satırını kullanma
Bir istemci kullanarak ApsaraDB RDS for MySQL örneğine bağlanın.
İş gereksinimlerinize göre gereksiz verileri silmek için
DELETEifadesini kullanın.-
Tablo alanını geri kazanmak için
OPTIMIZE TABLEifadesini çalıştırın.OPTIMIZE TABLE <$Database1>.<Table1>,<$Database2>.<Table2>;Not<$Database1> ve <$Database2> veritabanı adlarıdır. <Table1> ve <Table2> tablo adlarıdır.
-
InnoDB depolama motorunda
OPTIMIZE TABLEifadesini çalıştırdığınızda aşağıdaki ileti döndürülür. Bu ileti beklenen bir durumdur ve dikkate alınmayabilir. Çıktıda "ok" varsa işlem başarılı demektir. Daha fazla bilgi için bkz. OPTIMIZE TABLE Statement.Table does not support optimize, doing recreate + analyze instead
DMS kullanma
DMS kullanarak ApsaraDB RDS for MySQL örneğinde oturum açın.
Sol gezinme bölmesinde hedef örneğin örnek kimliğini seçin, hedef veritabanına çift tıklayın, herhangi bir tablo adına sağ tıklayın ve ardından batch operation table seçeneğini belirleyin.
Alanını geri kazanmak istediğiniz tabloları seçin ve ardından seçeneklerini belirleyin.

Açılan iletişim kutusunda bilgilerin doğru olduğunu onaylayın ve OK tıklayın.