MySQL ayarlarını optimize etme - mysqld belleği yetersiz


15

Sunucum için optimize etmek için my.conf dosyamdaki hangi ayarların değiştirileceği konusunda biraz kafam karıştı (mysql sunucusu yüksek trafiğimiz nedeniyle kilitleniyor).

İşte my.cnf dosyası:

[mysqld]

user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking

key_buffer              = 16M
max_allowed_packet      = 16M
myisam-recover         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10

query_cache_limit       = 1M
query_cache_size        = 16M

Ve sunucu özellikleri:

CPU Cores   2 cores
RAM (Memory)    1GB
SSD (Disk Space)    20GB

Koşu Ubuntu 12.04 LTS

İşte bölümlerim:

NAME   FSTYPE   SIZE MOUNTPOINT LABEL
vda              20G            
├─vda1 ext4     476M /boot      
├─vda2 swap     477M [SWAP]     
└─vda3 ext4    19.1G / 

Herhangi bir yardım çok takdir edilecektir.

Hata günlüklerine bakarak, mysqld bellek yetersiz olduğunu görebilirsiniz:

Feb 17 11:02:06 111488 kernel: [8276839.559141] Out of memory: Kill process 20719 (mysqld) score 75 or sacrifice child
Feb 17 11:02:06 111488 kernel: [8276839.559209] Killed process 20719 (mysqld) total-vm:1347424kB, anon-rss:30524kB, file-rss:0kB

Yanıtlar:


10

Serverguide wiki'den genel cevap :

MySQL Alıcısı Mysqltuner yükleyin

MySQL Tuner, çalışan bir MySQL örneğine bağlanacak ve iş yükünüz için en iyi nasıl yapılandırılabileceğine dair öneriler sunan kullanışlı bir araçtır. Sunucu ne kadar uzun süre çalışıyorsa, mysqltuner'ın önerisi o kadar iyi olur. Üretim ortamında, aleti çalıştırmadan önce en az 24 saat beklemeyi düşünün. Ubuntu depolarından mysqltuner kurulumunu alabilirsiniz:

sudo apt-get install mysqltuner

Sonra yüklendikten sonra çalıştırın:

 mysqltuner

ve son raporunu bekleyin. Üst bölüm veritabanı sunucusu hakkında genel bilgi sağlar ve alt bölüm my.cnf dosyasında değiştirmek için ayar önerileri sunar. Bunların çoğu yeniden başlatmadan sunucuda canlı olarak değiştirilebilir, ilgili değişkenlerin üretimde değişmesi için resmi MySQL belgelerine (Kaynaklar bölümündeki bağlantı) bakın. Aşağıda, bir üretim veritabanındaki sorgu önbelleği miktarını artırmanın bazı yararları olabileceğini gösteren örnek bir raporun bir parçası verilmiştir:

-------- Öneriler ----------------------------------------- ------------
Genel öneriler:
    Daha iyi performans için tabloları birleştirmek üzere OPTIMIZE TABLOSU'nu çalıştırın
    Dosya tanıtıcı sınırlarını önlemek için table_cache öğesini kademeli olarak artırın
Ayarlanacak değişkenler:
    key_buffer_size (> 1.4G)
    query_cache_size (> 32 milyondan fazla)
    table_cache (> 64)
    innodb_buffer_pool_size (> = 22G)

Veritabanlarının ayarlanması hakkında son bir yorum: Belirli ayarların en iyi olduğunu geniş olarak söyleyebiliriz, ancak performans uygulamadan uygulamaya değişebilir. Örneğin, Wordpress için en iyi olan şey Drupal, Joomla veya tescilli uygulamalar için en iyi olmayabilir. Performans, sorgu türlerine, dizinlerin kullanımına, veritabanı tasarımının ne kadar verimli olduğuna vb. Bağlıdır. Hangi uygulamaları kullandığınıza bağlı olarak veritabanı ayarlama ipuçlarını aramak için biraz zaman harcamak yararlı olabilir. Belirli bir noktayı geçtikten sonra yaptığınız tüm değişiklikler yalnızca küçük iyileştirmelerle sonuçlanır ve uygulamayı daha iyi hale getirebilir veya daha güçlü bir donanım kullanarak veya bağımlı sunucular ekleyerek veritabanı ortamınızı büyütmeye daha iyi bakabilirsiniz.


  • Mysqltuner raporunun performans metrikleri bölümünü izleyin. Mümkün olan maksimum belleği% 50'nin altında tutun.
  • tmp_table_size, max_heap_table_size variable: bunları eşit ve yüksek tut.
  • join_buffer_size, küçük miktarlarda artış; ile çarpılacaktır max_connections.
  • innodb_buffer_pool_size. Yüksek yap.


0

Liman oluşturma işlemi için çözünürlük

mysql:
    volumes:
        - ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf

İçeriği yapılandır ./config/mysql/my.cnf

[mysqld]
performance_schema = off
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.