ถามเรื่องการปรับแต่ง Mysql ให้รองรับงานหนักหน่อยครับ

ถามเรื่องการปรับแต่ง Mysql ให้รองรับงานหนักหน่อยครับ

พอดีเครื่องนี้ใช้งานแต่ mysql ล้วนๆเลยครับ

Q9550 ram8gig ครับ

ต้องปรับ my.cnf ยังไงมั่งครับ

อันนี้เป็น database server แยกใช่ไหมครับ และรันกี่เว็บครับ

ตามนี้เลยนะครับ

64 bit system
8GB+ of memory
Dedicated DB Box
All MyISAM
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /mysql/
datadir = /data01/data
tmpdir = /tmp
thread_cache_size = 256
table_cache = 1024
key_buffer = 4000M
sort_buffer_size = 256K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
max_allowed_packet = 1M
tmp_table_size=64M
max_heap_table_size=64M
query_cache_size=128M
query_cache_type=1
log_output=FILE
slow_query_log_file=/mysql/slow1.log
slow_query_log=1
long_query_time=3
log-error=/mysql/error.log
myisam_recover = force,backup
myisam_sort_buffer_size=512M
skip-innodb

myisam_sort_buffer_size=256M ก็พอมั๊งครับ
tmp_table_size กับ tmp_table_size =32M ก็พอ ขึ้นกับปริมาณและความซับซ้อนของ database คุณ
table_cache ลองค่อยๆ เพิ่มแรมเยอะขนาดนี้และใช้งานแค่ db ลองเริ่มที่ 2048 ก็ได้ครับ
max_allowed_packet เป็น 8M ก็ได้ครับ ถ้าไม่พอ
พวก buffer ใช้แบบนี้ก็ได้ครับ ถ้ารันหลายเว็บ
join_buffer_size=512k
sort_buffer_size=768k
read_buffer_size=512k
read_rnd_buffer_size=768k
ถ้ารันเว็บเดียวอาจจะเพิ่มเป็นแบบนี้
join_buffer_size=2M
sort_buffer_size=4M
read_buffer_size=2M
read_rnd_buffer_size=4M
แต่ค่าพวกนี้ไม่ใช่มากๆ แล้วจะดีนะครับ
ถ้ามากไปมันจะเสียเวลา allocate buffer ครับ ยิ่งช้านะ
ต้องปรับให้เหมาะสม
ส่วน thread_concurrency ใช้ จำนวน cpu*2 ครับ
ที่มา http://planet.mysql.com/entry/?id=19744

จะเอาไปลองครับ

ขอบคุณครับ

ต้องปรับตามสถิติการใช้งานครับ ลองใช้ Script นี้ครับช่วยได้เยอะ
http://day32.com/MySQL/

ขอบคุณท่านอัต

ลองปรับตามที่ คุณ neverdie บอกมา

เหมือนจะทำงานได้เร็วขั้น ขอบคุณครับ สำหรับสิ่งดี ๆ

อย่าเชื่อมากครับ ไม่ได้เก่งอะไร ถ้าอยากปรับแบบมีหลักการหน่อยลองอ่าน doc ของ ibm ดูครับ
http://www.ibm.com/developerworks/linux/library/l-tune-lamp-3.html

Tuning ตามการใช้งานครับ แต่ละงานต่างกัน
อย่าลืมดูเรื่อง index ด้วยครับ มีผลมาก ๆ
ถ้าออกแบบ DB ไม่ดี ต่อให้ tuning ดี ก็ยังหนักครับ

พี่น้องตั้งแต่เมื่อวานที่ท่าน Icez บอกว่าเว็บของกระผมมีปัญหาเรื่อง index เพราะเห็น mysql ทำงาน 3xx% ไปโน่น
ข้าพเจ้าเลยประสาทหลอนไปทั้งคืนเลยขอรับ เพราะว่าไม่มีความรู้เลยเรื่องพวกนี้รู้แต่ดูแลเว็บเท่านั้น
ก็เลยไปรีบหาค้นคว้าข้อมูลเบื้องต้นเพิ่มเติม
ใจหนึ่งก็คิดว่า
1- หาเซียนมาทำแม่งเลยดีไหม หาเทพนี่ละขอคำปรึกษาคิดเป็น jobๆ หรือ
2- เดินทางสายหินคือเรียนรู้เลย เหมือนเรื่องอื่นๆ ทำเองเลย

ข้าพเจ้าตัดสินใจข่ายเงินค่า backup server ไปกะ host เลยแล้วคิดจะลองทำเองสักตั้งหนึ่ง
มีคำถามอย่างนี้ขอรับ

1-) ไปเอา mysqltuner มาแล้วอะครับคือมันก็รันได้แล้วมันบอกค่ามาให้กระผมแล้วว่าอะไรเท่าไหร่
แต่กระผมไม่รู้ว่าจะเอาไปโมที่ไหน vi…ตรงไหน มันคือ my.cnf อะป่าวก็ไม่รู้ ไม่กล้าไปแตะ
สารภาพบาปหน่อยนึงว่า vi. command นี่ก็มั่วเอา เอา vmware ลงเครื่องแล้วก็ซัดเล่น centos ในเครื่องตัวเองเลย
มั่วมันจนพอจะรู็ว่า vi มันก็คือ notepad ดีๆนี่ละหว้า

2-) ท่านพี่ทั้งหลาย optimize table เนี่ยกระผมก็ไม่รู้หรอกนะครับ คนทำเว็บกะ programmer เขาให้มาไงมันก็เป็นอย่างนั้น
คงเหมือน windows xp ไม่ได้ปรับแต่งไม่แรงก็ต้องมาทำเอาเองปิดโน่นปิดนี่
คำถามคือว่า optimize table เนี่ยกระผมกลัวครับว่าจะทำพังสะก่อนเพราะว่าไม่มีความรู้เลย 0% เลย
มันมี command อะไรที่แบบว่าเด็กอ่อนกดๆ เอาเลยได้ไหมครับจาก unix shell อะ

3-) พี่ท่านชี้แนะด้วยว่า mysql นี่มันเก็บเป็น file อะไรอะ อย่าง word --> .doc excel --> .xls
ไม่รู้เรื่องเลยว่ามันเป็น file หน้าตาอย่างไรรู้แต่ว่า อยากจะทำให้เว็บตัวเองเร็วไม่กิน cpu อะครับ
หากว่าไม่รู้เรื่องบ้าอะไรเลย idiot เลยการ backup mysql เนี่ย copy มันทั้ง file เลยได้ป่าว???
เครื่อง centos ของกระผมมีเว็บเดียวเองไม่มีของคนอื่นเราคนเดียวอยู๋คนเดียว

4-) ส่วนอันนี้เคยถามไปแล้ว --> the path to the dark side หากว่าเลือกให้ท่านพี่คนใดคนหนึ่งช่วยข้าน้อย
พวกติดโน่นติดนี่ จะคิดค่าเหนื่อยเท่าไหร่ เพราะว่าม่ายมีงบแล้วอะ ทำเองทุกอย่างเลย ขอบคุณครับ

วันก่อนเสธ. icez เอาความรู้มายัดไว้เพียบเลย ตามไม่ทันแล้ว

  1. vi /etc/my.cnf ครับ ไม่ต้องกลัวครับ ถ้าปรับไม่ผิดผลาดร้ายแรงเกินไปก็ไม่มีอะไรครับ
    อย่างผมใส่ syntax ผิดมันก็แค่ start mysql ไม่ขึ้นก็เท่านั้นเอง ถ้าอาการอย่างคุณพี่ปรับแค่นี้อาจจะไม่พอด้วยนะครับ
    ต้องไปดูเรื่อง index อย่างที่คุณ icez ว่า ว่าแต่ว่าอันนี้เป็นเว็บใหญ่ๆ เว็บเดียวรันบน delicated server ใช่ไหมครับ

  2. backup database ก่อนสิครับจะได้ไม่พัง อย่าลืม stop service apache ก่อนนะครับ

To optimize a mysql database table via command line you will need to ssh into your server as the root user and enter into the mySQL command line interface by typing "mysql". This will give you the following prompt.

mysql>

Once you are at a mySQL command prompt you will need to type the following. The first selects the database you wish to use and the second optimizes the table(s).

mysql> USE your_database;
Database changed


mysql> OPTIMIZE TABLE `table1` , `table2` , `table3` , `table4`; 
  1. เก็บเป็น table ครับ backup export เป็น sql จาก phpmyadmin ก็ได้ครับ
    แต่ถ้าไฟล์ใหญ่ไปใช้ ssh backup แล้วใช้ ftp ดูดมาครับ

How do I backup a database via SSH?

ขอขอบพระคุณอย่างสูงสำหรับคำแนะนำครับ
นี่ overloaded :slight_smile: ห่าห่าห่า มันไม่ได้ใช้ ram เลยแม้แต่น้อย
อยากให้มันใช้ ram เยอะๆ cpu จะได้สบายห่าห่าห่า

งั้นปรับ buffer และ cache ให้เหมาะสมตามคำแนะนำของ mysqltuner เลยครับ
จะได้ใช้ RAM เยอะขึ้น cpu จะได้สบายขึ้น แต่อย่าปรับ buffer มากไปนะครับ
ไม่มีอะไรเลวร้ายเท่าการ swap memory แล้วครับ ถ้าไม่พอจริงๆ เพิ่มเป็น 4GB เลยก็ได้ครับ RAM อ่ะ

เลิกวุ่นวายกับเรื่องปรับ my.cnf แล้วไปดู table index ครับ
เข้า phpmyadmin แล้วไปดู process list ดูว่า query อะไรที่มันใช้เวลานานหรือมีขึ้นมาเหมือนๆกันหลายบรรทัด ดูว่ามัน query อะไร where อะไร ก็ไปดู table structure ว่าทำ index ไว้หรือเปล่า ถ้าไม่เราก็ไปสร้าง index ให้กับ field นั้นๆ

และถ้า programmer ส่งงานมาให้โดยไม่ทำ index แบบนี้ อนาคตถ้าปรับแต่งแก้ไขเพิ่มเติมมี table ใหม่ๆ ก็น่าจะมีปัญหาอีก เพราะ programmer ไม่รู้เรื่อง index

ถัดจากเรื่อง index ก็ยังมีเรื่อง low performance query อีก ซึ่งเรื่องพวกนี้ไม่เกี่ยวกับการปรับแต่ง server เลย เป็นเรื่องของ application & database structure

ตามพี่แมนเลยครับ สงสัยจะไม่ได้ทำ index เลยนะเนี่ย query

ม่ะ ติดต่อมาเลย เดี๋ยวจัดการให้ น่าสงสารจริงๆ

อาการนี้คาดว่า ปรับ index บาง field ก็น่าจะหายแล้ว

ปรับตามนนี้แล้วเดี้ยงอะครับ

[mysqld]
skip-locking
key_buffer = 512M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 128M
thread_cache_size = 128
query_cache_size = 64M
thread_concurrency = 8

default-character-set=tis620
skip-character-set-client-handshake
max_connections = 1500
connect_timeout = 10
wait_timeout = 60
interactive_timeout = 60

[mysqldump]
quick
max_allowed_packet = 32M

[mysql]
no-auto-rehash
default-character-set = tis620

[isamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 4M
write_buffer = 4M

[myisamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 4M
write_buffer = 4M

[mysqlhotcopy]
interactive-timeout