Hangi tablolar InnoDB'ye taşınmalı veya taşınmalı ve hangileri MyISAM olarak kalmalıdır?


10

Başlığa göre: Tabloların InnoDB'ye taşınması için hızlı bir aday listesi var mı? Ve MyISAM olarak ne kalmalı.

Bazı ek bilgiler

  • Site oldukça ağır bir okuma yüküne sahiptir, ancak etiketler ve benzerleriyle saatte yaklaşık 10 düğüm ekler.
  • CCK'yı (şeklinde büyük miktarda normalize edilmiş tablolar content_field%) yoğun şekilde kullanıyoruz.
  • Görünümlerimizi tüm bloklarımız ve sayfalarımız için de kullanırız ; ancak bunların çoğu özel modüllerle değiştirilmeye adaydır (veritabanı sorgularını ve bu sorguların ağırlığını azaltmak için).
  • Kullanıcıların hepsi anonimdir; giriş yapan birkaç editör ve webmaster hariç.

Tüm internetin aslında bu soruya nasıl cevap vereceği konusunda hiçbir fikri yok. Hangi Drupal tabloları en çok yazar alır ve kilitli .... kim bilir.
JM Becker

Yanıtlar:


8

Tablo kilitleme sorunlarını önlemek için tüm verileri InnoDB'ye dönüştürmelisiniz. Ancak, burada düşünülmesi gereken şeyler var:

FULLTEXT Dizine Ekleme

Şu anda, yalnızca MyISAM FULLTEXT dizinlemesini desteklemektedir. InnoDB için FULLTEXT indeksleme şu anda MySQL 5.6 için çalışıyor, ancak üretime hazır değil . FULLTEXT dizinleri olan herhangi bir Drupal tablonuz varsa, şu anda InnoDB'ye dönüştürülemezler.

FULLTEXT Endekslemesinde GÜNCELLEME

MySQL 5.6 artık GA (Üretimde Kullanım için). Lütfen InnoDB'de FULLTEXT dizinini deneyin.

FULLTEXTDizin içeren tabloları bulmak için şu sorguyu çalıştırın:

SELECT table_schema,table_name
FROM information_schema.statistics
WHERE index_type='FULLTEXT';

Hiçbir satır geri gelmezse, tüm InnoDB tablolarını kalbinizin içeriğine dönüştürün. Tüm MyISAM tabloları sadece mysql kullanarak InnoDB dönüştürmek nasıl önceki bir yazı yazdım .

MySQL Çoğaltma

Ağır bir ortamınız varsa, aşağıdakileri yaparsanız MyISAM'de okumalar daha hızlı olabilir:

  • Ana / Bağımlı Çoğaltmayı Ayarlama
  • Master altında bir veya daha fazla Okuma Kölesi oluşturun
  • --skip-innodbTüm Kölelere /etc/my.cnf içinde ekleyin (Slave'e veri yüklerken tabloları MyISAM'a dönüştürür)
  • Her Slave'deki tüm MyISAM tablolarının satır biçimini bu komutla DÜZELTİL olarak değiştirin: ALTER TABLE tblname ROW_FORMAT=FIXED;
  • Bu konuda bir şey DBA StackExchange gönderdi
  • MySQL Veritabanı Tasarımı ve Ayarlama kitabı ROW_FORMAT=FIXEDsayfa 72,73'te kullanılmasını tavsiye eder . Bu, tüm VARCHAR alanlarını dahili olarak CHAR'a dönüştürecektir. MyISAM tablosunu büyütür, ancak buna karşı yürütülen SELECT'ler çok daha hızlı olur. Ben şahsen bunu kanıtlayabilirim. Bir zamanlar 1.9GB'lık bir masa vardı. Biçimi ile değiştirdim ALTER TABLE tblname ROW_FORMAT=FIXED. Masa 3,7GB oldu. SELECT'lerin buna karşı hızı, başka bir şey geliştirmeden veya değiştirmeden% 20-25 daha hızlıydı.

Bununla ilgili tek baş ağrısı, uygulamanızı ayrı okuma kölelerinden haberdar etmektir.

SONSÖZ

Her bir depolama motorunun sahip olduğu diğer avantajlara bakıyorsanız, DBA StackExchange'i kontrol edin:


4

Web siteniz salt okunur tarafta olduğundan, tüm tabloları InnoDB'ye dönüştürürüm. Daha sonra InnoDB arabellek havuzunu ve sorgu önbelleğini uygun şekilde boyutlandırarak okuma performansını optimize edebilirsiniz. Bu şekilde, Drupal barındırma altyapımızdaki özel veritabanı sunucularında saniyede birkaç bin sorgu gerçekleştiriyoruz.

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.