MySQL tablolarını optimize etmek, veri giriş ve çıkış hızlarını iyileştirmek için özel bir depolama sunucusundaki bilgilerin yeniden sıralanmasına yardımcı olur. Bununla birlikte, her bir optimizasyon işlevinin ne zaman kullanılacağını ve bunları durumunuza nasıl uygulayacağınızı bilmek, uygulanabilir tablo bakımının anahtarıdır.
MySQL Tablolarını Neden Optimize Etmelisiniz?
Optimize edilmemiş MySQL tabloları, sık güncelleme ve silme sorgularından kaynaklanır ve parçalanmaya neden olur. Bunun sonuçları şunlardır:
- Veritabanı tablosu diskte gerekenden daha fazla yer kaplar.
- Verileri sorgulamak gerekenden daha fazla zaman alır.
MySQL tablo optimizasyonu, bir veritabanı tablosundaki verileri yeniden düzenler. Kullanılmayan alanı boşaltmaya ve sorgu hızlarını iyileştirmeye yardımcı olur.
Not: Ek performans ayarlama teknikleri için bkz.
MySQL Tablolarını Ne Zaman Optimize Etmelisiniz?
İşlem veritabanları gibi bir veritabanındaki bilgilerin sürekli güncellendiği tablolar, optimizasyon için en olası adaylardır. Ancak, büyük tabloları optimize etmek daha uzun sürer ve tabloları kilitler. Bir tabloyu birkaç saat kilitlemek sistem işlemlerini bozabilir.
InnoDB altyapı tabloları için aşağıdakilerden birini denemeyi düşünün:
- İndeksleri geçici olarak bırakın. Bir tablo ve sorgular indeks olmadan çalışabiliyorsa, uygun bir seçenek indeksleri bırakmak, en iyi duruma getirmek ve dizinleri geri eklemektir. Bazı durumlarda, bu yaklaşım hemen optimize etmekten daha hızlıdır.
- Birincil endekse odaklanın. Birleştirmeden hangi değerlerin yararlandığını analiz edin. Yanlış indeks seçmek daha fazla parçalanmaya neden olabilir.
Optimize edilecek tabloları bulun
Tabloları bulmanın ve bunları optimizasyon için analiz etmenin birçok yolu vardır. MySQL veritabanınıza bağlanarak başlayın:
USE [database_name];
Kullanım durumunuza bağlı olarak, optimizasyon adaylarını nasıl bulacağınızı görmek için aşağıdaki sorguları deneyin.
İpucu 1: Tabloda kullanılmayan alanı göster
İstenen bir tablonun durumunu şu şekilde kontrol edin:
SHOW TABLE STATUS LIKE "[table_name]" \G

Çıktı, sağlanan tablo hakkında genel bilgileri gösterir. Aşağıdaki iki metrik (bayt cinsinden) gereklidir:
- Data_length. Tablo tarafından kullanılan toplam alanı temsil eder.
- Data_free. Masaya tahsis edilen kullanılmayan alanı gösterir.
İpucu 2: Tüm tablolar için kullanılmayan alan göster
Bilgi şeması meta verileri bir veritabanı şeması hakkında depolar. Bir şemadaki tüm tablolar için tahsis edilen kullanılmayan verileri kontrol etmek için:
SELECT table_name, data_length, data_free
FROM information_schema.tables
WHERE table_schema='[schema_name]'
ORDER BY data_free DESC;

Sorgu, tablonun adını, toplam alanı ve kullanılmayan tahsis edilen alanı görüntüler. Varsayılan olarak, değerler baytlara yazdırılır.
Not: Tüm veritabanları için bilgileri görüntülemek için, satırı çalıştıırn: WHERE table_schema = ‘[şema adı]’.
İpucu 3: verileri Megabayt olarak görüntüle
Verileri megabaytlarda yazdırmak için:
SELECT table_name,
ROUND(data_length/1024/1024) as DATA_LENGTH_MB,
ROUND(data_free/1024/1024) as DATA_FREE_MB
FROM information_schema.tables
WHERE table_schema='[schema_name]'
ORDER BY data_free DESC;

Örnek tablolar yoğun bir şekilde parçalanmamıştır. Ancak, optimize tablo kullanmak Test_table’dan biraz boşluk bırakmaya yardımcı olur.
MySQL tablolarını komut satırı üzerinden optimize edin
Bozulma ile tabloları optimize etmenin birçok yolu vardır. Ancak, gerçekleştirdiğiniz genel adımlar benzerdir.
İpucu 1: Optimize Table Komutunu kullanarak Tabloları Optimize Edin
MySQL, bir tabloyu optimize etmek için belirli bir komut sağlar:
OPTIMIZE TABLE [table_name];

Çıktı, bir tablodaki optimizasyonun eylemleri ve sonuçları hakkında bilgilendirici bir durum mesajı gösterir. Komut, önbelleğe alma nedeniyle değişiklikleri hemen yansıtmaz.
Tablo boyutu ve boş alanla ilgili önbelleğe alınmış verileri temizlemek için tüm tabloları temizleyin:
FLUSH TABLES;

Ardından, optimizasyonun uygulandığını onaylamak ve tablo istatistiklerini güncellemek için tabloyu analiz edin:
ANALYZE TABLE [table_name];

Bu komut dizisi, tablonun tamamen optimize edilmesini ve istatistiklerinin güncel olmasını sağlar.
Farklı Depolama Motorlarında OPTIMIZE TABLE Komutu
Optimize Table komutunun davranışı, tablo için kullanılan depolama altyapısına bağlıdır:
- InnoDB. Komut, kullanılmayan alanı geri almak için tabloyu yeniden oluşturur. İşlem geçici bir tablo kopyası oluşturur ve orijinal tabloyu optimize edilmiş olanla değiştirir. İşlem, büyük tablolar için geçici olarak önemli disk alanı gerektirir.
- MyISAM. Komut, parçalanmayı ortadan kaldırmak için verileri yeniden düzenler, dizinleri sıralar ve tablonun istatistiklerini günceller. Optimizasyon daha hızlıdır ve daha az disk alanı gerektirir.
- Memory.
OPTIMIZE TABLE
veriler bellekte depolandığından ve parçalanma olmadığından bu tablolar üzerinde hiçbir etkisi yoktur. - CSV. Komut, depolama motorunu tanır, ancak önemli bir performans iyileştirmesi yoktur.
- Archive. Komut, tabloyu daha küçük ve kompakt bir biçime sıkıştırır.
2. İpucu: Aynı Anda Birden Çok Tabloyu Optimize Edin
Aynı anda birden çok tabloyu optimize etmek için şunu kullanın:
OPTIMIZE TABLE [table_name_1], [table_name_2];

Sonuç, en iyi duruma getirilmiş her tablo için en iyi duruma getirilen tablonun durumunu gösterir. Tabloları İpucu 1’de açıklandığı gibi yıkamaya ve analiz etmeye devam edin.
İpucu 3: mysqlcheck Komutu ile Tabloları Optimize Edin
Linux terminali aracılığıyla aşağıdakilerle tablo optimizasyonu gerçekleştirin:
sudo mysqlcheck -o [schema] [table] -u [username] -p [password]
Örneğin, kök kullanıcı kimlik bilgilerini kullanarak test_db adlı bir şema ve test_table adlı bir tablo üzerinde denetimi gerçekleştirmek için şunu çalıştırın:
sudo mysqlcheck -o test_db test_table -u root -p

İstendiğinde parolayı girin.
Not: Erişim reddedildi hatası mı alıyorsunuz? Sorunun nasıl ele alınacağına ilişkin kılavuzumuzu okuyun: MySQL Hatası Nasıl Çözülür: Kullanıcı root@localhost için erişim reddedildi.
En iyileştirmeyi birden çok tabloda gerçekleştirmek için, her tablo adını bir boşlukla ayırın:
sudo mysqlcheck -o [schema] [table_name_1] [table_name_2] -u [username] -p
MySQL Tablolarını GUI ile Optimize Edin
MySQL’de tabloları optimize etmenin başka bir yolu da GUI’yi kullanmaktır. Çoğu veritabanı yönetimi GUI aracı, tabloları optimize etmek için benzer bir yöntem sunar.
Aşağıdaki adımlar, bunun MySQL Workbench aracılığıyla nasıl yapılacağını gösterir:
1. MySQL Workbench’i başlatın ve veritabanı örneğine bağlanın.

İstendiğinde kullanıcının parolasını girin.
2. Sol panelde Şemalar görünümüne gidin.

3. İstediğiniz veritabanı şemasını genişletin ve ardından Tablolar’ı genişletin.

4. Herhangi bir tablo adına sağ tıklayın -> Table Maintenance.

5. Tables sekmesine geçin.

6. Listeden tablo adını seçin ve sağ bölmede Optimize Table‘e tıklayın.

Eylem bir açılır pencere açar ve optimizasyon sonuçlarını gösterir.
Optimizasyondan Sonra
Optimizasyon sonuçları, optimize edilmiş tablonun data_length ve data_free değerlerini değiştirir.

Her iki değer de düşürülür ve şunları gösterir:
- Optimizasyon, kullanılmayan ayrılmış belleği serbest bıraktı.
- Veritabanının genel belleği, serbest bırakılan alan nedeniyle daha düşüktür.
Yazının orijinalini buradan okuyabilirsiniz.

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.