Çok çekirdekli ve MySQL Performansı


38

RAM'in önemi köklü bir gerçektir, ancak MySQL tarafından CPU kullanımı söz konusu olduğunda çekirdeklerin ve çoklu kullanımın önemi hakkında çok az malzeme mevcuttur. 4 çekirdek vs 6 çekirdek vs 8 çekirdek vb MySQL çalışan farkı hakkında konuşuyorum.

Farklı depolama motorları CPU'yu farklı kullanıyor mu?



bununla ilgili ancak farklı depolama motorlarının çok çekirdekli işlemcilere yönelik davranışlarını ele almayın.
Rick James

1
Aslında. Bu yüzden "kopya kadar yakın" bir oy yok ...
gbn

Bu harika bir topluluk, hala bu siteyi nasıl kullanacağımı öğreniyorum.
Rick James

Merhaba dostum buraya bir göz atın: mysql-cluster-blog.com en azından bir şey bulmak

Yanıtlar:


30

MySQL'e gelince, iki temel kategoriye girmesi dışında depolama motorları arasında bir karşılaştırma yoktur.

MySQL birkaç depolama motorunun kullanımına sahiptir

Listelenen depolama motorlarına gelince, yalnızca ACID uyumlu olanlar InnoDB ve NDB'dir. Neden bu önem taşıyor? İki sebep:

  • Diğer depolama motorları, temel disk I / O, CPU kullanımı ve genel verim dışında daha fazla çekirdek varlığında faydalanmamaktadır.
  • Depolama motoruna bakılmaksızın temel olarak 14 iç işlemi belirleyen işlemsel olmayan her depolama motorunun kodu, birden çok çekirdeğin erişimini kaldıracak şekilde tasarlanmamıştır.

MySQL 5.5 altındaki InnoDB, InnoDB Eklentisi) ve Percona Server'ın XtraDB'si birden fazla çekirdeğe erişmek için ayarlayabileceğiniz seçeneklere sahiptir (Percona Sunucusu daha uzun süredir çalışıyor). Aslında, Percona, MySQL kaynak kodunun her yeni GA sürümü ile InnoDB'nin performansının artırılması için özel olarak yaklaşık 30.000 satırlık kod enjekte eder. Oracle'ın çok çekirdekli çalışma için InnoDB içinde çalışacak kendi düşünce tanklarından kendi geliştirmelerini eklediğinden emin olabiliriz (MySQL 5.1.38'den beri).

MVCC'yi verilerde satır / sayfa kilitleme ile bağlantılı olarak gerçekleştirme ihtiyacı ile işlem performansı şimdi gösterilebilir, ölçülebilir ve yapılandırılabilir.

Birden fazla çekirdek kullanma konusunda öğrendiğim bir şey varsa, InnoDB'yi etkin bir şekilde ayarlamalı ve yalnızca kutudan çıkan InnoDB'ye güvenmemelisiniz .

GÜNCELLEME 2011-09-20 08:03 EDT

InnoDB'nin tüm çekirdekten yararlanma ile ilgili olarak, işleri perspektifte tutmamız gerekiyor. Çekirdekler, Veri Tabanı Sunucusu'ndaki diğer hususlara da (OS, Disk, Bellek, Uygulamalar, İzleme vb.) Eğilim göstermelidir. Mütevazı bütçeleri olanlar için, birçoğunun bir Veri Tabanı Sunucusu'nu da NFS sağlama, Munin'den izleme, JBoss, PHP için uygulama desteği sağlama ve liste devam ediyor. MySQL'in, özellikle InnoDB'nin daha fazla çekirdek kullanmasını istiyorsanız , Veritabanı Sunucusu yalnızca MySQL'e tahsis edilmeli ve OS / Disk / Bellek yalnızca MySQL'e yönelmelidir . Bu perspektife bakıldığında, InnoDB bir şüphe ile daha fazla çekirdek meşgul olacaktır .

InnoDB Eklentisi'ne gelince, daha önce MySQL adına daha iyi bir InnoDB'ye sahip olmak için daha önceki girişimlerde bulunmasından söz edildi. Daha fazla çekirdek aktivite toplamak için yeni değişkenler MySQL 5.1.38'den belli oldu.

Örneğin, innodb_read_io_threads ve innodb_write_io_threads (her ikisi de MySQL 5.1.38’den beri) okuma ve yazma için belirtilen sayıda konu tahsis eder. Varsayılan 4 ve maksimum 64'tür. Varsayılan ve maksimum ayarların çok farklı olması (4 - 64), InnoDB'nin yapılandırdığınız gibi çok iş parçacıklı ve çekirdek yoğun olduğunu gösterir !!!

MySQL topluluğunun InnoDB ile daha fazla çekirdeğe erişim gereksinimlerinin karşılanması Percona tarafından yönlendirildi. Sonuç olarak, MySQL takım elbise takip etmeye başladı. Oracle'ın (yuck) daha fazla temel faaliyet için gerekli iyileştirmeleri yaptığını itiraf etmeliyim.


Yukarıda önerildiği gibi ayarlanmış MySQL 5.5 altındaki InnoDB tüm çekirdeklerden faydalanabilir mi? {InnoDB eklentisi hakkında biraz karıştı}
Rick James

@Rick - Daha cevabım Yorumunuzu ele
RolandoMySQLDBA

Burada tamamen farklı bir hikaye gibi görünüyor ve MyISAM o çoklu çekirdek kullanan ama diğer tarafta geldiğinde yüzünde düz düşmek gibi görünüyor dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb MyISAM vardır avantajlar. Yani, hangi yöne gideceğine karar vermek kravat gibi görünüyor.
Rick James

2
Her şey MyISAM veya InnoDB kullanmaktaki amacınıza bağlıdır. Ne ve ne kadar önbelleğe almak istiyorsunuz? Veri alımı için MySQL veya diğer önbellek mekanizmalarına (vernik ve memcached gibi) güveniyor musunuz? Donanımınız InnoDB için düzgün bir şekilde ölçeklendi mi? SQL SELECT'lerin% 98'i mi? Tablo, yüksek hızlı okumalar için en iyi formatta mı? Bu soruları yanıtlamak, bize depolama motoru seçimi, uygun konfigürasyon, donanım seçimi, hatta daha yüksek kullanılabilirlik, DB topolojisi, okuma / yazma bölme gibi daha derin konulara ulaşma konusunda rehberlik etmelidir.
RolandoMySQLDBA 21:11

9

Çekirdekleri kullanan depolama motorları hakkında konuşurken yeni başlayanlar için yanıltıcı olabilir. Bir programın yeterince çoklu iş parçacığı olması koşuluyla, işletim sistemi programı mümkün olduğu kadar çok sayıda çekirdek üzerinde zamanlayacaktır.

CPU-ölçeklendirmeyi sınırlayan özel problem, iç kilitleme kodunun ( muteksler ) çekişmesi ve iş parçacığının aynı anda çalışmasını engellemesidir. Tüm depolama motorları mutekslere ihtiyaç duyacaktır, fakat kesinlikle MyISAM'da sıcak olanları da var.

Bir saniye için mutex çekişmesini görmezden gelirsek ve ana sorunuza geri dönersek: Çok fazla çekirdeğe sahip olmak ne kadar önemli? -

Kullanıcıya yönelik talepleri karşılayan iş yükleri için birçok çekirdeğe sahip olmayı seviyorum. Çok sayıda olması sorgu süreleri arasındaki farkı azaltabilir. Bunu, sadece 2'ye karşı 12 koridor açıkken, süper pazarda sıraya girmek gibi düşünün.

Güncelleme : Dikey ölçeklenebilirliğin (çoklu çekirdekler) neden önemli olduğu üzerine bir blog yazısı yazdım .


5
Odadaki filden bahsettiği için +1: mutex çekişmesi
cerd
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.