InnoDB ve MyISAM tablolarını aynı sunucuda karıştırmak yaygın bir uygulama mıdır?


21

8GB RAM ile bir sunucuda çalışan yaklaşık 4.5GB tek bir veritabanı var. Tabloların büyük çoğunluğu MyIsam'dır (yaklaşık 4.3GB), ancak yakında bazılarını InnoDB'ye dönüştüreceğim . (İlk başta en yoğun olarak yazılmış tablolara odaklanan yavaş bir işlem olacak).

Her iki tür depolama motorunun bulunduğu özel bir sunucuyu çalıştırmada yanlış bir şey var mı?


Is there anything wrong with running a dedicated server where both types of storage engines exist? Belki rephrase Multiple types?
John

'İkisini de' söylememin tek nedeni, bu sorunun 'iyi ayarlanmış' olarak yapılandırılmış iki ana motorla ilgili olmasıdır. MEMORY veya MERGE gibi diğer motor türlerini görmezden gelmeye çalışıyorum, ki bu da afaik'in performans ayarlaması nesnesi olmadığı kadar nadir.
Derek Downey

Yanıtlar:


18

Her birinin avantajlarını ve dezavantajlarını anladığınız sürece, aynı fiziksel makinede birden fazla depolama motorunu kullanmakta yanlış bir şey yoktur . Performans eklentileri, özellik sınırlamaları ve tüm eklenti depolama türleri için kullanım durumları vardır.

Örneğin,% 90 yazan küçük bir tablonuz varsa, MyISAM'i seçebilirsiniz. Veriler kolayca yeniden üretilebiliyorsa ve küçük bir tabloysa, sıraya almak için diyelim ki, Bellek'i seçebilirsiniz. % 90'ı okuyan bir tablonuz varsa ve veriler onu aradığınızda orada bulunmalıdır, muhtemelen InnoDB gibi işlemleri ve yapılandırılabilir atomiciliği destekleyen bir depolama motoru seçersiniz. Verilere zarar vermeden dosya sistemi üzerinden erişilebilirlik istiyorsanız, CSV'yi seçebilirsiniz.

Bununla birlikte, aynı şema içinde fiziksel ana bilgisayarın yanı sıra birden fazla depolama motorunu güvenle kullanabilirsiniz.

Yine de, tamponlarınızın tüm bu karışıklıkta bir rol oynadığını belirtmeme izin verin. Hem MyISAM'ı hem de InnoDB'yi kullanırsanız, key_buffer ve innodb_buffer_pool cihazınızın rekabet etmediğine dikkat etmeniz gerekir. Bu sizin açınızdan dikkatli bir planlama yapacaktır, ancak yaptığımız şey bu.


4
+1 Başka bir yaygın kullanım durumu, tam metin araması gerektiren tablolar için MyISAM ve diğer tüm tablolar için InnoDB'dir.
Asaf

@Aseph: Yorumunuz sırasında bile, InnoDB Fulltext endekslerini destekledi .
BlueRaja - Danny Pflughoeft

2
^^^^ "MySQL 5.6 özellikleri",
GA’a

1
@randymelder Güzel cevap. Ne demek istediğinizi "key_buffer ve innodb_buffer_pool'nuzun rekabet etmemesi için dikkatli olmanız gerekecek" üzerinde yoğunlaşabilir misiniz?
Neel,

1
Yanlış olduğumu kanıtlamak istiyorum, ancak mantık bu stackoverflow.com/a/6796566/5645769'un tam tersi görünüyor .
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ

7

Bunun yaygın bir uygulama olup olmadığını söyleyemem. Kendi deneyimim hakkında söyleyebilirim.

İş için her zaman en iyi aleti kullanırım, bu yüzden motorları sürekli karıştırırım. Projelerimin çoğu, varsayılan motor olarak MyISAM kullanıyor.

Sadece InnoDB'de mevcut olan özelliklere ihtiyacım olduğunda, bunun için gidiyorum.

Bir masa çoğunlukla salt okunur olduğunda, göz açıp kapamadan önce Arşiv motorunu seçerim.

Makine sunucusunun yeterli belleği olduğunu bilerek, tüm geçici verilerim Heap tablolarında depolanır.

Geçmişte MyISAM ve InnoDB'yi karıştıran bazı yavaşlamalar gördüm ama bu spesifik bir MySQL sorunu değil. Sadece bir motor kullanırken görünmeyen bir tasarım problemi. Aslında yanlış motor kullanmak daha yavaşlamaya neden olur, sadece MyISAM, sadece InnoDB veya her ikisinin karışımı olsun farketmez. Yavaşlamanın ne zaman olacağını bilmek için bir formül tanımlamak zor. Sadece gerçek testler size söyleyebilir.

Tabii ki, benzersiz bir sorguda InnoDB ve MyISAM karıştırma bütünlüğü ve tutarlılığı koruyamadı.


arşiv motoru dizin oluşturmayı desteklemiyor, bu nedenle neden arşivde saklıyorsunuz?
user4951

0

MyISAM ve InnoDB tablolarını aynı veritabanında karıştırmamaya çalışıyorum, ancak bu pratik sebeplerden ziyade akıl sağlığı için. Ancak, tam metin arama için MyISAM tablolarını içeren bir veritabanına sahip olmayı faydalı buluyorum, böylece sitelerde çalıştırabilirim. Her giriş için ayrı bir veritabanına sahip ayrı bir veritabanında tutulması, DB üzerinde çalışan diğer geliştiricilerin neler olup bittiğini görmesini kolaylaştırır.


MyISAM kullanırken yabancı anahtarlara nasıl sahip olabilirsiniz?
a_horse_with_no_name

Yanlış terminoloji, ancak yabancı bir anahtar gibi çalışır. Ben InnoDB tablosundan öğenin kimlik numarasını saklamak ve arama sonucu sayfa arama yapmak için kullanın.
Kenzo
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.