16 GB RAM ile QuadCore makinede MySQL'den en iyi şekilde nasıl yararlanılır?


10

Bilimsel veri analizi için iş istasyonumda bir MySQL 5.5 sunucusu çalıştırıyorum ve performans açısından en iyi şekilde yararlanmak için MySQL'in nasıl yapılandırılacağını merak ediyorum. Genellikle çalıştırdığım sorgu türleri 10-20 tablo birleşimleri içerir ve oldukça uzun süre çalışabilir, bir ila birkaç dakika hiç bir istisna değildir. Veritabanına aynı anda yalnızca çok az kullanıcı erişiyor (en fazla 5 kullanıcı). Sunucuyu 2.2 GHz Çift Çekirdekli ve 4 GB RAM'li bir Lenovo Thinkpad T61'den elle seçilen bileşenlere sahip yepyeni bir makineye taşıdım:

  • Intel i7 3770, 4x 3,4 GHz (4x3,7 GHz'de çalışıyor)
  • Z77 yonga seti
  • 16 GB DDR3 1600 RAM
  • Windows 7 Prof 64 bit
  • Windows ve MySQL sunucusu Intel 520 serisi SSD sürücüde çalışır.

İlk testler (her iki makinede de aynı sorguyu çalıştırıyor), yenisi için hızda kesin bir iyileşme gösterdi, ancak sorgular hala çok zaman alıyor ve daha fazla artış bekliyordum. Söz konusu sorgular oldukça iyi bir şekilde optimize edilmiştir, yani tüm tablolar "genişletilmiş açıklama" olarak da kullanılan uygun anahtarlara sahiptir.

Şimdi mevcut MySQL ayarlarıma: Öncelikle uzun zaman önce MyISAM'dan Innodb'a geçtiğimi söylemeliyim.

Bazı my.ini ayarlarım (varsayılan ayarlardan çıkışlar):

# Maximum size for internal (in-memory) temporary tables. If a table
# grows larger than this value, it is automatically converted to disk
# based table This limitation is for a single table. There can be many
# of them.
#tmp_table_size=35M
tmp_table_size=4000M
max_heap_table_size=4000M

# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system.  Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
#innodb_buffer_pool_size=96M
innodb_buffer_pool_size=800M

general-log
expire_logs_days = 60
general_log_file = "F:/my_query_mysql.log"
log-output = TABLE
optimizer_search_depth = 0 #meant to cure the "statistics state" bug in some queries

Birinin yukarıdaki sayılarda değişiklik veya daha önce bilmediğim diğer ayarlarda değişiklik önerip önermeyeceğini bilmek istiyorum.

Herhangi bir yararlı söz için teşekkür ederiz.

Steve

EDIT: 10-20 tablo arasında birleştirmeler içeren iki sorgu var ve bunları Lenovo dizüstü bilgisayarımda ve yeni PC'de çalıştırdı. Sorgu # 1 dizüstü bilgisayarda 9m11s vs yeni makinede 3m36s aldı; Sorgu # 2 dizüstü bilgisayarda 48.5s vs iş istasyonunda 22.5s aldı. Böylece yürütme hızı kabaca 2-2.5 faktörü ile geliştirildi. İş istasyonunda RAM'in% 50'si bile kullanılmadı. Dört çekirdekteki ortalama CPU yükü (Windows Görev Yöneticisi tarafından bildirildiği gibi) sadece% 13 idi. Çekirdek başına yük (Core Temp tarafından bildirildiği gibi) ONE çekirdeği için yaklaşık% 25-40 iken, diğerleri için <=% 10'du, bu da MySQL'in tek bir sorgu için birden fazla çekirdek kullanmadığını gösterir .


Lütfen sunucu yükünüzü gösterin, bu yüzden belleği, io, cpu yüklerini vb. Kontrol edin

Bazı testler yapacağım ve Windows Görev Yöneticisi'nin söylediklerini geri rapor edeceğim (ya da daha iyi bir araç önerir misiniz?)

İlk belirtinin, sorunun nerede olduğunu görmesi için bu yeterli olmalıdır.

bazı istatistikler ekledim.

2
Ayrıca burada Percona almak için sihirbazı adresinden veritabanı sunucusu için ayarları "tavsiye" deneyebilirsiniz tools.percona.com/wizard
Stephen Senkomago Musoke

Yanıtlar:


5

MySQL 5.5 çalıştırdığınız için, InnoDB'yi birden çok çekirdeğe erişecek şekilde yapılandırmayı düşünebilirsiniz.

İşte kullanmanız gereken ayarlar

innodb_thread_concurrency , InnoDB'nin açık tutabileceği eşzamanlı iş parçacığı sayısının üst sınırını ayarlar. Bunun için ayarlanacak en iyi yuvarlak sayı (2 X CPU Sayısı) + Disk Sayısıdır. GÜNCELLEME : Percona NYC Konferansı'ndan ilk elden öğrendiğim gibi, içinde çalıştığı ortam için en iyi iş parçacığı sayısını bulmak üzere InnoDB Depolama Motorunu uyarmak için bunu 0 olarak ayarlamanız gerekir.

innodb_concurrency_tickets eşzamanlılık kontrolünü cezasızlıkla atlayabilecek iş parçacığı sayısını ayarlar. Bu sınıra ulaşıldıktan sonra, iş parçacığı eşzamanlılık denetimi yeniden norm haline gelir.

innodb_commit_concurrency , gerçekleştirilebilecek eşzamanlı işlemlerin sayısını belirler. Varsayılan değer 0 olduğu için, bunun ayarlanmaması herhangi bir sayıda işlemin aynı anda yapılmasına izin verir.

innodb_thread_sleep_delay , InnoDB sırasına yeniden girmeden önce bir InnoDB iş parçacığının hareketsiz kalabileceği milisaniye sayısını ayarlar. Varsayılan 10000 (10 sn) 'dir.

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 iş parçacığı ayırır. Varsayılan değer 4 ve maksimum değer 64'tür.

innodb_replication_delay bir köle üzerinde iş parçacığı gecikmesi uygular innodb_thread_concurrency ulaşılır.

İşte MySQL 5.5'teki geçmiş yazılarım ve InnoDB için birden fazla çekirdeği etkinleştirme


2

Percona- Lider MySQL danışmanı bir MySQL yapılandırma sihirbazı sunar . my.cnf/my.iniSistem yapılandırmanıza bağlı olarak yapılandırmanıza olanak tanır .

Ayrıca Percona halkı " Yüksek Performanslı MySQL " adlı bir kitap yayınladı . Üçüncü baskı yakın zamanda piyasaya sürüldü ve ayarlamayı ayrıntılı olarak ele alıyor.


Bu değerler iyi performans için önerdikleri şey midir, yoksa girdiğim şeyi tükürüyor mu?
OpenCoderX

1

Bellek kullanımı: bkz. Http://mysql.rjweb.org/doc.php/memory (Çoğu ayarlanabilir cihaz önemli bir fark yaratmaz.)

max_heap_table_size = 4000M Tehlikeli derecede yüksek! 4 kullanıcının buna ihtiyacı varsa, RAM'iniz ve takasınız kalmaz. Değiştirmek, performansı neredeyse her şeyden çok daha fazla incitir.

Birkaç saniyeden uzun süren sorgular: İyileştirme için araştırılmalıdır; lütfen GÖSTER TABLO OLUŞTUR; TABLO DURUMUNU GÖSTER; AÇIK SEÇİN


0

Otger seçeneklerini de düşünebilirsiniz. FreeBSD'de PostgreSQL gibi. Ancak Windows'tan Linux'a geçmek performansı artıracaktır.

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.