- เพิ่มค่า 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/