Drupal sitem var ve performans sorunları yaşıyorum. Nasıl bir veritabanı MyISAM InnoDB dönüştürmek nasıl buldum ? performansın anahtarlama ile gelişebileceğini gösterir.
MySQL veritabanımın InnoDB mi, yoksa MyISAM mı olduğunu nasıl anlayabilirim?
Drupal sitem var ve performans sorunları yaşıyorum. Nasıl bir veritabanı MyISAM InnoDB dönüştürmek nasıl buldum ? performansın anahtarlama ile gelişebileceğini gösterir.
MySQL veritabanımın InnoDB mi, yoksa MyISAM mı olduğunu nasıl anlayabilirim?
Yanıtlar:
Özel bir sorgu çalıştırabilirsiniz:
SELECT TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name'
veritabanınızdaki tüm tabloları ve her biri için kullanılan motoru listeler.
Alternatif olarak phpMyAdmin'i kullanarak veritabanınıza giriş yapabilir ve veritabanınızı seçebilirsiniz ... Type
tablo listesindeki sütunda motoru görürsünüz .
Şahsen MySQL için Navicat tavsiye ederim , çok güzel bir MySQL GUI ve böyle şeyler bulmayı çok kolay hale getirir.
Kaynak: http://www.electrictoolbox.com/mysql-table-storage-engine/
SHOW TABLE STATUS
. Her motor tipinde kaç tablonun olduğunu basit bir şekilde hesaplamak için SELECT ENGINE,COUNT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY ENGINE
.
Benim en iyi deneyim, tablo başına karar vermek oldu. InnoDB güzeldir, çünkü tablo kilitlemesini önleyebilir (bir işlem yazarken tablodan başka bir işlem okunamaz), ancak çağrı cihazı sorguları için sıklıkla kullanılan COUNT () ile çok iyi performans gösterir.
(Düzenle: lütfen aşağıdaki Clives yorumuna bakın)
Kullandığınız DB'ye bağlı olarak MySQL kurulumunuzda da bazı etkiler vardır. Sunucuya erişiminiz varsa, yapılandırmayı kontrol etmek için ilk adımınız mysqltuner olmalıdır:
COUNT
göre, sorgular MySQL için eski Yüksek Performanslı Grup yöneticisi tarafından bu makalede sadece gerçekten içeren bir sorgu etkiler olsa COUNT(*)
olmadan bir WHERE
maddede.
SELECT COUNT(*) FROM table
değer bu değerle anında geri dönebilir. InnoDB yapmaz, bu nedenle tüm birincil anahtar dizinini taramalıdır. Bununla birlikte, Drupal çok şey yaparken SELECT COUNT(*)
, tüm kodda sadece bir WHERE
madde olmadan bunu yapan bir yer düşünebilirim . Bu nedenle, MyISAM'i bu özel edgekaz için endişe duymadan kullanmayın. İyi bir boyut tampon havuzuna sahip InnoDB, tüm gerçek dünya sorguları için daha hızlı olacaktır.
Sadece bir web sitesi daha hızlı almak için şeyler denemek körü körüne değişen araba gibi ve bir dahaki sefere daha hızlı bir olsun umuyoruz.
Önce düşük asılı meyveleri deneyin, eğer yardımcı olmazsa, gerçek darboğazı bulmaya çalışın.
Genellikle sadece bir indeks gerektiren yavaş bir DB sorgusu ya da işleri yavaş bir şekilde yapan bir modül.
Ev sahipleri arasında büyük farklılıklar da keşfettim. Kutudan yeni bir drupal takarsanız, performans iyi mi? Değilse, başka bir barındırma zamanı.
FWIW neredeyse 20K düğümü Drupal 6.x sitemizde bazı performans sorunları yaşıyordu ve tüm tabloları InnoDB'ye taşımayı seçtim. Kolaydı ve işlediğim şekilde, tüm içeriği bir sql dosyasına dökmek için mysqldump kullanmak, MyISAM'ın tüm oluşumlarını InnoDB'ye değiştirmek için bir düzenleyici (sed) kullanmak ve veritabanını bu dosyadan yeniden yüklemekti. Aşağı taraflardan biri, InnoDB veritabanından (IIRC) alan kurtaramazsınız, ancak yinelenen tablolarınızı ayrı bir DB'de tuttuğunuz sürece sorun yaşamayacaksınız. Oh, ve önemli bir performans artışı gördük. Dört Drupal örneğimiz olduğu için, çok sayıda tablo dosyası dosya sisteminden kaldırıldı (evet, InnoDB dosyasının içinde yer alıyorlar). Bu benim 0,02 dolarým.
innodb_file_per_table
seçeneği kullanmayı tercih ediyorum .
for tbl in $(mysql -Ne 'show tables' databasename); do mysql -e "ALTER TABLE $tbl ENGINE=InnoDB"; done
. Gerekirse -uroot -psomepass
iki mysql
s'ye uygun seçenekler ekleyin ( örneğin) .
Sadece aklınızda bulunsun. Drupal 6'daysanız , DBTuner modülünü kurabilirsiniz ; tablolarınızı MyISAM'den InnoDB'ye kolayca taşıyabilir. Evet, bunun için bir modül var!