MySQL DB Server'da OPTIMIZE TABLE Sorgusu çalıştırmanın faydaları


9

OPTIMIZE TABLE tbl_nameMySQL Server'da sorguyu çalıştırarak reape edilebilir faydaları [gerçekten pratik] bilmek istiyorum .

Bunu bir kez kontrol ettim ve bu çalıştırıldıktan sonra, bir sonraki DB isabetinin parçaların yer değiştirmesi nedeniyle uzun sürebileceğini buldu, ancak sonraki isabetler performans türünü gösteriyor, sorgu önbelleğe almanın bu hile yapıp yapmadığından emin değilim optimizasyon veya optimizasyon tek başına bu hile yapar.

MySQL ile çalışmak projemizde yerçekimi kazanıyor gibi daha fazla alabilir böylece herhangi biri mümkünse bazı gerçek performans farkı değerleri ile bana rehberlik edebilir.

Yanıtlar:


7

OPTİMİZE TABLOSUNUN birleştirme yapmadığını lütfen unutmayın . Dahili olarak, OPTIMIZE TABLE birkaç işlem gerçekleştirir (verileri geçici bir dosyaya kopyalama, dizinleri yeniden oluşturma, dizin istatistiklerini yeniden hesaplama). Aslında, sahip olduğum örnek gösterildiği gibi manuel olarak gerçekleştirilebilir.

Örnek: Optimize mydb.mytableederseniz şu komutu girersiniz:

OPTIMIZE TABLE mydb.mytable;

MySQL'in aşağıdaki başlık altında bir şey yaptığını unutmayın:

CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;

Bu, yüksek düzeyde UPDATE ve DELETE alan tablolar için oldukça kullanışlıdır

Bunu yapmak iki şeyi başarabilir

  1. MySQL'in veriyi doğru boyutlu parçalara yüklemek için bir tablodaki parçalara bakmasını önleyin. Bu parçaların ortadan kaldırılması bu işlemi azaltacaktır.

  2. Dizin istatistiklerinin yeniden hesaplanması MySQL Sorgu Optimize Edici'nin daha iyi EXPLAIN planları oluşturmasına yardımcı olur. Aksi takdirde, MySQL Sorgu Optimize Edici EXPLAIN planında kötü tahminler yapmaya karar verdiğinden, sorgular yürütme zamanında bozulabilir. Bu, yüksek bir UPDATE ve DELETE hacmine sahip bir tablonun kesin bir belirtisi olacaktır.

UYARI

Önbellekleme ile ilgili olarak, önbellekleme, tam tablo taraması yapması nedeniyle hızlı bir şekilde dalış yapar. MyISAM dizin sayfaları için MyISAM Anahtar Önbelleği'ne girip çıkın. InnoDB için, veri ve dizin sayfaları InnoDB Arabellek Havuzu'na girip çıkar.


Cevabın için teşekkürler. Sizin bakış açınıza göre, daha iyi performans elde etmek için sık güncellenen tablolarımdan biri için optimizasyon tablosunu zamanlamak üzere bir cron işi gibi bazı hizmetleri daha iyi kullandığımı anlıyorum. Ayrıca bu tablo için InnoDB kullanıyorum. Bu daha iyi bir seçim mi? Ayrıca, SQL Server'da sorgu performansını artırmak için önerilen HASH birleşimlerini buluyorum, lütfen bunu benim için açıklayabilir ve MySQL'de buna benzer bir tane nasıl alabilirim. Ayrıca lütfen bana MySQL [Windows7 version] için bir SQL Query optimizer verin.
Saravanan

@savaranan: Bahsettiğim MySQL Sorgu İyileştiricisi, MySQL'de yerleşik olan dahili bir sorgulayıcıydı. BTW Optimize etmek istediğiniz tablo InnoDB olduğundan, KİLİTLERİ DEVRE DIŞI BIRAK ve KİLİTLERİ ETKİNLEŞTİR adımlarını atlayabilirsiniz. Ayrıca, ANALİZ TABLOSU atlanabilir çünkü InnoDB indeks dalışları olarak bilinen BTREE indekslerindeki sayfaları kullanarak tablo kardinalitelerini yakın tahminlerle yeniden hesapladığı için InnoDB tablolarında tamamen yararsızdır.
RolandoMySQLDBA

@savaranan: HASH indeksleri gittikçe, InnoDB'nin uyarlanabilir karma dizinleri var ( dev.mysql.com/doc/refman/5.5/en/innodb-adaptive-hash.html ). Ayrıca, "Yüksek Performanslı MySQL" in 103-106. Sayfalarına dayanan kendi karma dizinlerinizi taklit etme ve çarpışmalarla ilgili güzel öneriler de var ( amazon.com/dp/0596101716 )
RolandoMySQLDBA
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.