Kısa cevap:
select ENGINE, TABLE_NAME,Round( DATA_LENGTH/1024/1024) as data_length , round(INDEX_LENGTH/1024/1024) as index_length, round(DATA_FREE/ 1024/1024) as data_free from information_schema.tables where DATA_FREE > 0;
"Bilmeniz gerekir" cevabı
ilk önce bir satır güncellendiğinde Mysql tablolarının parçalandığını anlamalısınız, bu yüzden bu normal bir durumdur. Bir tablo oluşturulduğunda, veri içeren bir döküm kullanarak içe aktarıldığını varsayalım, tüm satırlar birçok sabit boyutlu sayfada parçalanma olmadan depolanır. Değişken uzunluklu bir satırı güncellediğinizde, bu satırı içeren sayfa değişiklikleri saklamak için iki veya daha fazla sayfaya bölünür ve bu yeni iki (veya daha fazla) sayfa kullanılmayan alanı dolduran boş alanlar içerir.
Parçalanma çok fazla büyümezse, bu performansı etkilemez. Çok fazla parçalanma nedir, peki aradığınız sorguyu görelim:
select ENGINE, TABLE_NAME,Round( DATA_LENGTH/1024/1024) as data_length , round(INDEX_LENGTH/1024/1024) as index_length, round(DATA_FREE/ 1024/1024) as data_free from information_schema.tables where DATA_FREE > 0;
DATA_LENGTH ve INDEX_LENGTH, verilerinizin ve dizinlerinin kullandığı alan ve DATA_FREE, tüm tablo sayfalarında kullanılmayan toplam bayt miktarıdır (parçalanma).
İşte gerçek bir üretim tablosu örneği
| ENGINE | TABLE_NAME | data_length | index_length | data_free |
| InnoDB | comments | 896 | 316 | 5 |
Bu durumda (896 + 316) = 1212 MB kullanarak bir Tablomuz var ve verilere 5 MB boş alan var. Bu, aşağıdakilerin "parçalanma oranı" anlamına gelir:
5/1212 = 0.0041
... Bu gerçekten düşük bir "parçalanma oranı" dır.
0.2'ye yakın (boş alanların% 20'si anlamına gelen) oranlara sahip tablolarla çalışıyorum ve sorgular üzerinde yavaşlama olduğunu fark etmedim, masayı optimize etsem bile, performans aynıdır. Ancak 800 MB'lık bir masaya optimize edilmiş bir masa uygulamak çok zaman alır ve masayı birkaç dakika boyunca bloke eder, bu da üretimde pratik değildir.
Bu yüzden, performansta ne kazandığınızı ve bir masayı optimize etmek için harcadığınız zamanı göz önünde bulundurursanız, OPTIMIZE DEĞİLSİNİZ.
Depolama için daha iyi olduğunu düşünüyorsanız, oranınızı görün ve optimize ederken ne kadar yer kazanabileceğinizi görün. Genellikle çok fazla değil, bu yüzden OPTIMIZE yapmamayı tercih ediyorum.
En iyileştirirseniz, bir sonraki güncelleme, bir sayfayı iki veya daha fazlasına bölerek boş alanlar oluşturur. Ancak, parçalanmış bir tabloyu parçalanmamış bir tablodan güncellemek daha hızlıdır, çünkü tablo parçalanmışsa bir satırdaki bir güncelleme mutlaka bir sayfayı bölmez.
Umarım bu sana yardımcı olur.