จูน mysql ยังไงดี

เครื่องแรม 2 gb ครับเป็น website เพลง online,ฝากไฟล์ คนเข้า 15000 ip
มันไม่ปกติคือจะมี สถานะ w เยอะมาก จน mysql เดี้ยง เหมือนมันจะเดี้ยงหน้า ฟังเพลง

คำถาม
พอมีทาง ปรับลดพวกอะไรได้บ้างไหมครับ

query อะไรเนี่ยครับ? เยอะอยู่นา ลองดู query ก่อน แล้วก็ทำ index ด้วยนะครับ

wget http://day32.com/MySQL/tuning-primer.sh
chmod +x tuning-primer.sh
./tuning-primer.sh

แล้วก็ลองทำตามมันดูก่อน

ผมทำตามคุณ test แนะนำแล้วครับ มันจะช่วยให้ db ดีขึ้นไช่ไหมครับ

-------- General Statistics --------------------------------------------------
[–] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.22-log
[OK] Operating on 32-bit architecture with less than 2GB RAM

-------- Storage Engine Statistics -------------------------------------------
[–] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[–] Data in MyISAM tables: 503M (Tables: 198)
[!!] InnoDB is enabled but isn’t being used
[!!] Total fragmented tables: 43

-------- Performance Metrics -------------------------------------------------
[–] Up for: 1h 31m 42s (240K q [43.736 qps], 20K conn, TX: 1B, RX: 19M)
[–] Reads / Writes: 65% / 35%
[–] Total buffers: 666.0M global + 3.3M per thread (400 max threads)
[!!] Maximum possible memory usage: 1.9G (98% of installed RAM)
[OK] Slow queries: 0% (5/240K)
[OK] Highest usage of available connections: 10% (42/400)
[OK] Key buffer size / total MyISAM indexes: 512.0M/33.6M
[OK] Key buffer hit rate: 99.9% (11M cached / 14K reads)
[!!] Query cache efficiency: 16.0% (10K cached / 67K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 9K sorts)
[!!] Joins performed without indexes: 611
[OK] Temporary tables created on disk: 9% (295 on disk / 2K total)
[!!] Thread cache is disabled
[OK] Table cache hit rate: 45% (130 open / 285 opened)
[OK] Open file limit used: 7% (196/2K)
[OK] Table locks acquired immediately: 99% (92K immediate / 93K locks)

ให้ดูตรงที่มันขึ้นหัวว่า [!!] เช่น

Thread cache is disabled

ก็ให้ไป enable ใน my.cnf ซะ

ว่าแต่เครื่อง spec ไหนครับ?

ดูๆ แล้ว query ค่อนข้างจะเอาเรื่องทีเดียว

ผมว่า hdd มันอ่านไม่ทันอยู่แล้ว เพราะว่ามีเว็บฝากไฟล์ด้วยมากกว่าครับ
จูนยังไงก็ไม่หายหรอกครับ

ใช้ default ยังได้ประสิทธิภาพมากกว่าปรับเลยครับ

แนะนำให้แยก harddisk สำหรับฐานข้อมูลโดยเฉพาะ หรือแยกเครื่องโดยเฉพาะเลย
จะเห็นผลทันตาครับ

ถามนิดครับ พอดีมือใหม่ สังเกตุตรงไหนเหรอครับ ว่า ดูๆ query ค่อนข้างหนัก

หลงทางเสียเวลา หลงติดยาเสียอนาคต

สถานะ W คือใน apache ใช่มั้ย ?
แล้วจะไปจูน mysql จะช่วยอะไรได้ล่ะครับ
เว็บโหลดไฟล์โหลดเพลงมันก็ต้อง w เยอะเป็นธรรมดา

W คือกำลังส่งข้อมูลไปให้ user ก็เมื่อไฟล์มันใหญ่หรือต้องโหลดต่อเนื่องจนจบเพลงมันก็ต้องค้างอยู่อย่างนั้นจนกว่า client จะโหลดเสร็จ

สิ่งที่ทำได้คือเพิ่ม maxclients เพื่อให้เพียงพอกับจำนวน W ที่จะค้าง
แต่สิ่งที่ต้องคำนึงตามมาก็คือ RAM พอหรือเปล่า
แต่ละ client ก็ใช้ RAM ทั้งนั้นประมาณ 10-30MB คุณมี RAM 2G ก็หารออกมาว่าจะได้ประมาณกี่ clients
แล้วก็อย่าลืมเผื่อส่วนหนึ่งไว้ให้ OS กับ mysql กับ app อื่นๆใช้ด้วย

เว็บ upload จริงๆส่วนมากจะหนีไปใช้ lighttpd หรือ nginx เพราะมันใช้ memory ของแต่ละ clients ที่โหลดไฟล์น้อยกว่า apache มากครับ

ผมลบไฟล์ที่ upload ทิ้งไป ระบบกลับมาดีขึ้นหน่อย

CPU Usage: u33.01 s36.73 cu0 cs0 - .253% CPU load
24.8 requests/sec - 0.6 MB/second - 24.9 kB/request
14 requests currently being processed, 34 idle workers

RAM 2G ค่า mysql เดิมๆยังไม่ต้อง tune…

เท่าที่ฟังดู… ไปแก้ปัญหาเรื่อง Wait ของ apache/httpd ก่อนครับ

ปรับยังไงดีครับ ตอนนี้ก็เต็ม max

Timeout 30

MaxKeepAliveRequests 1024

KeepAliveTimeout 10

<IfModule prefork.c>
StartServers 10
MinSpareServers 20
MaxSpareServers 40
ServerLimit 1024
MaxClients 1024
MaxRequestsPerChild 0
</IfModule>

<IfModule worker.c>
StartServers

StartServers 10
MinSpareServers 20
MaxSpareServers 40

ลองลดดู 50% แล้วดูผล…

หากมี W ลดลง แสดงว่า I/O เราไม่ไหว

เค้าปรับให้ใช้งานพอดีๆกับ HW Resource ที่มีอยู่นะครับ
ไม่ใช่ปรับให้แรง แรงไปกว่าเครื่องจะให้กำลังได้

เข้าใจเสียใหม่… ว่าให้ปรับให้ Peak ไม่เกินกำลังเครื่อง

ถ้างั้นผมลองเป็นแบบนี้น่ะครับ พอดีไหมครับ ของ prefork.c หรืออีกตัว
<IfModule prefork.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 20
ServerLimit 1024
MaxClients 1024
MaxRequestsPerChild 0
</IfModule>

ปรับไปใช้ mpm worker + php zts ดู