ปรับการตั้งค่า MySQL ให้เหมาะสม mysqld หน่วยความจำไม่เพียงพอ


15

ฉันสับสนเล็กน้อยเกี่ยวกับการตั้งค่าที่จะเปลี่ยนแปลงในไฟล์ my.conf ของฉันเพื่อปรับให้เหมาะสมสำหรับเซิร์ฟเวอร์ของฉัน (เซิร์ฟเวอร์ mysql ยังคงพังเนื่องจากการรับส่งข้อมูลที่สูงของเรา)

นี่คือไฟล์ 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

และรายละเอียดเซิร์ฟเวอร์คือ:

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

ใช้งาน Ubuntu 12.04 LTS

นี่คือพาร์ติชันของฉัน:

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

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก

เมื่อดูที่บันทึกข้อผิดพลาดฉันจะเห็นว่า mysqld มีหน่วยความจำไม่เพียงพอ:

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

คำตอบ:


10

คำตอบทั่วไปจาก wiki ของเซิร์ฟเวอร์แนะนำ :

MySQL Tuner ติดตั้ง mysqltuner

MySQL Tuner เป็นเครื่องมือที่มีประโยชน์ที่จะเชื่อมต่อกับอินสแตนซ์ MySQL ที่กำลังทำงานอยู่และให้คำแนะนำเกี่ยวกับวิธีการกำหนดค่าที่ดีที่สุดสำหรับปริมาณงานของคุณ ยิ่งเซิร์ฟเวอร์ทำงานนานเท่าไหร่คำแนะนำที่ดีกว่าก็คือ mysqltuner ในสภาพแวดล้อมการใช้งานจริงให้ลองรออย่างน้อย 24 ชั่วโมงก่อนเรียกใช้เครื่องมือ คุณสามารถติดตั้ง mysqltuner ได้จากที่เก็บ Ubuntu:

sudo apt-get install mysqltuner

จากนั้นเมื่อติดตั้งแล้วให้รัน:

 mysqltuner

และรอรายงานขั้นสุดท้าย ส่วนด้านบนให้ข้อมูลทั่วไปเกี่ยวกับเซิร์ฟเวอร์ฐานข้อมูลและส่วนด้านล่างให้คำแนะนำในการปรับแต่งเพื่อแก้ไขใน my.cnf ของคุณ สิ่งเหล่านี้ส่วนใหญ่สามารถแก้ไขได้บนเซิร์ฟเวอร์โดยไม่ต้องรีสตาร์ทตรวจดูเอกสาร MySQL อย่างเป็นทางการ (ลิงก์ในส่วนทรัพยากร) เพื่อหาตัวแปรที่เกี่ยวข้องเพื่อเปลี่ยนแปลงการผลิต ต่อไปนี้เป็นส่วนหนึ่งของรายงานตัวอย่างจากฐานข้อมูลการผลิตซึ่งแสดงว่าอาจมีประโยชน์บางอย่างจากการเพิ่มจำนวนแคชแบบสอบถาม:

-------- ข้อเสนอแนะ ----------------------------------------- ------------
คำแนะนำทั่วไป:
    เรียกใช้ OPTIMIZE TABLE เพื่อจัดเรียงตารางเพื่อประสิทธิภาพที่ดีขึ้น
    เพิ่ม table_cache ทีละน้อยเพื่อหลีกเลี่ยงข้อ จำกัด ของตัวให้คำอธิบายไฟล์
ตัวแปรที่จะปรับ:
    key_buffer_size (> 1.4G)
    query_cache_size (> 32M)
    table_cache (> 64)
    innodb_buffer_pool_size (> = 22G)

หนึ่งความคิดเห็นสุดท้ายเกี่ยวกับการปรับฐานข้อมูล: ในขณะที่เราสามารถพูดได้อย่างกว้าง ๆ ว่าการตั้งค่าบางอย่างดีที่สุดประสิทธิภาพอาจแตกต่างกันไปตามแอปพลิเคชัน ตัวอย่างเช่นสิ่งที่ดีที่สุดสำหรับ Wordpress อาจไม่ใช่สิ่งที่ดีที่สุดสำหรับ Drupal, Joomla หรือแอพพลิเคชั่นที่เป็นกรรมสิทธิ์ ประสิทธิภาพขึ้นอยู่กับชนิดของแบบสอบถามการใช้ดัชนีประสิทธิภาพของการออกแบบฐานข้อมูลเป็นต้น คุณอาจพบว่ามีประโยชน์ในการใช้เวลาในการค้นหาเคล็ดลับการปรับฐานข้อมูลตามแอปพลิเคชันที่คุณใช้ เมื่อคุณถึงจุดหนึ่งการปรับเปลี่ยนใด ๆ ที่คุณทำจะส่งผลให้มีการปรับปรุงเล็กน้อยและคุณจะดีขึ้นไม่ว่าจะเป็นการปรับปรุงแอพพลิเคชั่นหรือดูการปรับขนาดสภาพแวดล้อมฐานข้อมูลของคุณผ่านการใช้ฮาร์ดแวร์ที่มีประสิทธิภาพมากขึ้น


  • ดูส่วนการวัดประสิทธิภาพของรายงาน mysqltuner เก็บหน่วยความจำที่เป็นไปได้สูงสุดไว้ต่ำกว่า 50%
  • tmp_table_size, max_heap_table_size variable: ให้เท่ากันและสูง
  • join_buffer_sizeเพิ่มขึ้นเล็กน้อย max_connectionsมันจะถูกคูณด้วย
  • innodb_buffer_pool_size. ทำให้สูง


0

ความละเอียดสำหรับนักเทียบท่าเขียน

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

กำหนดค่าเนื้อหา. /config/mysql/my.cnf

[mysqld]
performance_schema = off
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.