MySQL Tune max_connections & innodb-buffer-pool

  • เพิ่มค่า max_connections ในไฟล์ config แล้ว แต่ restart service แล้ว max_connections ไม่เพิ่มขึ้นมาเท่าค่าที่ตั้ง
  • ความเข้าใจเรื่อง innodb-buffer-pool

max_connections

ปัญหาที่เจอวันนี้เกิดจาก max_connections มันติดที่เพดาน ของค่า open_files_limit สามารถ Query เช็คค่าดูได้จากคำสั่งนี้

SHOW GLOBAL VARIABLES LIKE 'open_files_limit'

ซึ่งใน CentOS 7 เราสามารถไปปรับค่านี้ได้จากไฟล์ ใน systemd ประมาณนี้

/usr/lib/systemd/system/mariadb.service

แก้ที่บรรทัด

[Service]
LimitNOFILE=4096

หลังจากแก้แล้วรันคำสั่ง daemon-reload ก่อน restart ด้วย

systemctl daemon-reload
systemctl restart mysqld

อ้างอิง: https://support.plesk.com/hc/en-us/articles/213393029-MySQL-values-open-files-limit-and-max-connections-are-not-applied

innodb-buffer-pool

โน๊ตคร่าวๆ

  • innodb_buffer_pool_instances มาเพื่อช่วยให้ access ถึง cache ใน memory ได้ดียิ่งขึ้น concurrent เพื่อลดคอขวดไรงี้.  สมมติถ้ากำหนด innodb_buffer_pool_size = 48G แล้วตั้ง innodb_buffer_pool_instances = 16 ก็คือ MySQL จะแบ่ง buffer pool เป็น 16 ก้อน ก้อนละ 3G
  • innodb_buffer_pool_chunk_size เหมือนว่าจะได้ใช้เฉพาะเวลาจะเปลี่ยนค่า buffer_pool_size โดยที่จะไม่ restart service (buffer pool resize)  ไว้ค่อยสนใจ เวลาจำเป็นว่า restart service ไม่ได้แล้วกัน
  • MySQL memory
    • MySQL fixed usage: query cache, InnoDB buffer pool size, mysqld rss, etc.
    • MySQL workload based usage: connections, per-query buffers (join buffer, sort buffer, etc.)
    • MySQL replication usage: binary log cache, replication connections, Galera gcache and cert index, etc.

อ้างอ้ง

  • https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool.html
  • https://www.percona.com/blog/2015/06/02/80-ram-tune-innodb_buffer_pool_size/

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.