Mengoptimalkan pengaturan MySQL - mysqld kehabisan memori


15

Saya agak bingung tentang pengaturan mana yang harus diubah dalam file my.conf saya untuk dioptimalkan untuk server saya (server mysql terus mogok karena lalu lintas tinggi kami).

Ini file my.cnf:

[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

Dan spesifikasi server adalah:

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

Menjalankan Ubuntu 12.04 LTS

Inilah partisi saya:

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

Bantuan apa pun akan sangat dihargai.

Melihat log kesalahan, saya dapat melihat bahwa mysqld kehabisan memori:

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

Jawaban:


10

Jawaban umum dari serverguide wiki :

MySQL Tuner Instal mysqltuner

MySQL Tuner adalah alat yang berguna yang akan terhubung ke instance MySQL yang sedang berjalan dan menawarkan saran untuk bagaimana hal itu dapat dikonfigurasi dengan baik untuk beban kerja Anda. Semakin lama server berjalan, semakin baik saran yang bisa diberikan mysqltuner. Dalam lingkungan produksi, pertimbangkan untuk menunggu setidaknya 24 jam sebelum menjalankan alat. Anda bisa menginstal mysqltuner dari repositori Ubuntu:

sudo apt-get install mysqltuner

Kemudian setelah diinstal, jalankan:

 mysqltuner

dan tunggu laporan akhirnya. Bagian atas memberikan informasi umum tentang server basis data, dan bagian bawah menyediakan saran penyetelan untuk mengubah di my.cnf Anda. Sebagian besar dapat diubah langsung di server tanpa memulai ulang, lihat dokumentasi resmi MySQL (tautan di bagian Sumberdaya) untuk variabel yang relevan untuk diubah dalam produksi. Berikut ini adalah bagian dari contoh laporan dari database produksi yang menunjukkan mungkin ada manfaat dari peningkatan jumlah cache kueri:

-------- Rekomendasi ----------------------------------------- ------------
Rekomendasi umum:
    Jalankan OPTIMIZE TABLE ke tabel defragment untuk kinerja yang lebih baik
    Tingkatkan table_cache secara bertahap untuk menghindari batasan deskriptor file
Variabel yang akan disesuaikan:
    key_buffer_size (> 1.4G)
    kueri_cache_size (> 32 jt)
    table_cache (> 64)
    innodb_buffer_pool_size (> = 22G)

Satu komentar terakhir tentang penyetelan basis data: Meskipun kami secara luas dapat mengatakan bahwa pengaturan tertentu adalah yang terbaik, kinerja dapat bervariasi dari satu aplikasi ke aplikasi lainnya. Sebagai contoh, apa yang paling cocok untuk Wordpress mungkin bukan yang terbaik untuk aplikasi Drupal, Joomla, atau berpemilik. Kinerja bergantung pada jenis kueri, penggunaan indeks, seberapa efisien desain database, dan sebagainya. Anda mungkin perlu menghabiskan waktu mencari tips penyetelan basis data berdasarkan aplikasi apa yang Anda gunakan. Setelah Anda melewati titik tertentu setiap penyesuaian yang Anda lakukan hanya akan menghasilkan perbaikan kecil, dan Anda akan lebih baik meningkatkan aplikasi, atau melihat meningkatkan lingkungan database Anda baik menggunakan perangkat keras yang lebih kuat atau dengan menambahkan server slave.


  • Tonton bagian metrik kinerja laporan mysqltuner. Simpan kemungkinan memori maksimum di bawah 50%.
  • tmp_table_size, max_heap_table_size variable: jaga agar ini sama dan tinggi.
  • join_buffer_size, peningkatan dalam jumlah kecil; itu akan dikalikan dengan max_connections.
  • innodb_buffer_pool_size. Jadikan tinggi.


0

Resolusi untuk menulis buruh pelabuhan

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

Konfigurasi konten ./config/mysql/my.cnf

[mysqld]
performance_schema = off
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.