วันอังคารที่ 8 ธันวาคม พ.ศ. 2563

ปรับ Mysql ให้ใช้ cache เพื่อเพิ่มความเร็ว ขนาดRam8-16GB

*** จูน Mysql ให้ทำงานเร็วขึ้น ***  cpu 4 core

เพื่อความรวดเร็วในการนำค่าไปใช้ ผมรวบรวมให้แล้วครับ ตามนี้

max_connections=1000

innodb_file_per_table
innodb_thread_concurrency = 0
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_flush_method=O_DIRECT
innodb_doublewrite=0
innodb_support_xa = 0
innodb_open_files = 2000
innodb_locks_unsafe_for_binlog=1
innodb_support_xa = 0
innodb_locks_unsafe_for_binlog = 1

อีก 2 ตัวที่ไม่ค่อยมีคนสนใจแต่ทำให้ MySQL ทำงานเร็วขึ้นครับ
ตัว1
innodb_flush_log_at_trx_commit=2

จะทำให้ MySQL เขียน Log ทุก 1 วินาที แทนที่จะทุก Transaction
ตัว2
max_heap_table_size = 128M

ช่วยให้บาง Query ทำงานได้เร็วขึ้นครับ

อีกตัวครับ
innodb_flush_method=O_DIRECT
จะปิดการทำงานของระบบ double buffering ของ MySQL ครับ (ทำให้ระบบโดยรวมเร็วขึ้น)

ตามด้วย

innodb_doublewrite=0

จะทำให้ innodb เขียนข้อมูลใน table space แค่ครั้งเดียว แทนที่จะเขียนสองครั้ง

***ถ้าเข้าจากเครื่องอื่นแล้วช้าอาจจะเกี่ยวกับการ resolve ชื่อและไอพี ให้ลองเพิ่ม skip-name-resolve ที่หัวข้อ[mysqld]
ปัญหามาซักพักกับการที่ MariaDB ดับไปเองบ้าง รีสตาร์ทบ่อยๆ บ้าง ปรับแก้ my.cnf ก็ไม่นิ่งซะทีจนไปเจอ Code แล้วเอามาปรับแก้ max_connections อีกทีจนนิ่งสนิท ตัวนี้จะเป็น

เมื่อใช้ไป1อาทิตย์ลองตรวจสอบ
**************************************************************************

มา config my.cnf กันเหอะ
[client]
#password    = [your_password]
port        = 3306
socket        = /var/lib/mysql/mysql.sock
default-character-set = tis620
 [mysqld]
default-character-set=tis620  ###ทำให้ใช้งานภาษาไทยได้ ต้องเซ็ทตรงนี้ให้เสร็จก่อนที่จะ import ข้อมูลภาษาไทยเข้าไป
skip-charecter-set-client-handshark = ใช้เซ็ตภาษาให้กับโปรแกรมอื่น ช่น access
key_buffer=128M    ###ควรเซ็ทเป็น 40% ของ ram ที่มี
table_cache=256 ###ให้เท่ากับตารางทั้งหมดที่มีใน DB
sort_buffer_size=1M ###เป็นหน่วยความจำที่จองไว้ต่อจำนวน connection
read_buffer_size=1M  ###เป็นหน่วยความจำที่จองไว้ต่อจำนวน connection
read_rnd_buffer_size=1M  ###เป็นหน่วยความจำที่จองไว้ต่อจำนวน connection
myisam_sort_buffer_size=32M  ###ในการที่เรา create index จะใช้หน่วยความจำส่วนนี้ ควรเซ็ทไว้ 10-20%
max_allowed_packet=32M ###เป็นตัวกำหนดค่าการส่งข้อมูลใน 1 statement เช่น คำสั่ง insert ที่มีรูปมาด้วย หากคำสั่งนั้นมีขนาดใหญ่กว่าจำนวนที่กำหนดไว้ จะ error แนะนำให้กำหนดไว้ 128M
query_cache_size=128M ### ควรเซ็ทไว้ที่  10%
#interaction_timeout=300
#wait_timeout=180 ### เช่นกรณีที่รายงานนั้นใช้เวลาในการดึงรายงานออกมานานเกินเวลาที่กำหนดไว้จะทำงานตัด connection นั้นทิ้งไป
innodb_data_file_path=ibdata1:100M:autoextend ###กำหนดขนาดเริ่มต้นของ logfile
innodb_flush_log_at_trx_commit=1 ###ตัวกำหนดพฤติกรรมในการ commit ข้อมูล ถ้ามีค่าเป็น 1 คือมีการบันทึกข้อมูลลง HD ทันที ถ้าเป็น 0 จะบันทึกข้อมูลทุก 1 วินาที ถ้าไฟดับ ข้อมูลจะหายไป 1 วินาที
innodb_buffer_pool_size=64M ###อันนี้สำคัญ เป็นหน่วยความจำที่แชร์ ยิ่งเยอะยิ่งดีแต่ไม่ควรเกิน 40-60% ของหน่วยความจำที่มี
innodb_additional_mem_pool_size=8M
innodb_log_file_size=16M ### ถ้า mysql start แล้วตรงนี้ห้ามแก้ ถ้าจะแก้ต้องแก้ก่อนเริ่มใช้งาน เพราะถ้า ลบไฟล์ทิ้งข้อมูลแบบ innodbจะไม่สมบูรณ์
innodb_log_buffer_size=4M ###ระบบ Set ให้เอง
innodb_lock_wait_timeout=50
max_connections=1000 ###อันนี้สำคัญ จำนวนเครื่องที่จะ connect เข้ามาที่ mysql ได้
innodb_file_per_table ###อันนี้สำคัญ เนื่องจาก innodb เก็บทุกตารางไว้ในไฟล์เดียวกันหมด ถ้ามีคำสั่งบรรทัดนี้ จะเป็นการสั่งให้การเก็บข้อมูลเป็นแบบ 1 ตาราง เป็น 1 file
skip-character-set-client-handshake   ###ผู้ใช้สามารถใช้โปรแกรมอื่นมาดึงข้อมูลจาก mysql ได้ เช่น Access
skip-locking
skip-name-resolve ###ถ้าไม่เปิดอันนี้ mysql จะเสียเวลาแปลง ip ให้เป็น ชื่อเครื่อง
big-tables ###เปิดไว้สำหรับ myisam ให้เก็บข้อมูลได้ในระดับ tera

[mysql]
default-character-set=tis620

[mysqldump]
default-character-set=tis620
max_allowed_packet=16M
allow-keywords
๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒๒

join_buffer_size = 2M
concurrent_insert = 2

max_heap_table_size = 512M

qkey_buffer_size        = 128M

max_allowed_packet     = 1G

thread_cache_size      = 8

max_connections        = 100

 query_cache_type= 1

 query_cache_size=64M   #32M

 join_buffer_size = 128M

 read_buffer_size = 128M

read_rnd_buffer_size = 128M

thread_cache_size = 128M

 เราสามารถทำการเปิดการใช้ cache ได้โดยการแก้ไขค่าในไฟล์ ⁄etc⁄my.cnf

แต่ก่อนอื่นต้องเช็คดูก่อนว่า server ของเรามีไฟล์ ⁄etc⁄my.cnf อยู่หรือยัง ถ้

ายังให้ช้คำสั่งนี้เพื่อหาตัวอย่างไฟล์ my.cnf ในเครื่องของเรา

#find ⁄ -name *.cnf

จะใช้ไฟล์ไหนขึ้นอยู่กับ Ram ของเรา รายละเอียดดูในแต่ละไฟล์ได้เลย

จากนั้น copy file นั้นไปเป็น my.cnf โดยคำสั่ง

#cp (file) ⁄etc⁄my.cnf

จากนั้นทำการแก้ไข ⁄etc⁄my.cnf โดยเพิ่มบรรทัดนี้เข้าไป

query_cache_type= 1

แล้วอาจจะทำการ เพิ่มขนาดของ cache โดยแก้

query_cache_size= 64M

ในตัวอย่างเพิ่ม cache เป็น 64M

จากนั้น restart mysql ด้วยคำสั่ง  สำหรับ Ubuntu18.04  mariadb10

sudo service mysql restart


ไม่มีความคิดเห็น:

แสดงความคิดเห็น