[Question] mysqld used 100% CPU |
31/12/2010 16:55:28 (+0700) | #1 | 228245 |
smile_sad
Member
|
0 |
|
|
Joined: 15/08/2006 19:15:08
Messages: 96
Offline
|
|
Hi mọi người, em có 1 server chạy direct admin nhưng mysql thường dao động ở mức 50-100% cpu.Ai có kinh nghiệm về vụ này thì tư vấn giúp em.
Dưới đây là 1 số thông tin:
-mysql version:
Server version: 5.0.91-community MySQL Community Edition (GPL)
-my.cnf config:
# The following options will be passed to all MySQL clients
[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock
# Here follows entries for some specific programs
# The MySQL server
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 384M
max_allowed_packet = 64M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 4
max_connections = 500
#log-slow-queries = /var/log/mysql-slow-queries.log
#log-error = /var/log/mysql-error.log
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[isamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
-top command:
-mytop command:
- Site em suy đoán truy vấn nhiều đến mysql là: http://nalueng.com
Nếu cần thêm thông tin gì khác mọi người cho em biết nhé. Cảm ơn mọi người đã quan tâm. |
|
|
|
|
[Question] mysqld used 100% CPU |
31/12/2010 20:19:12 (+0700) | #2 | 228266 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
- MySQL log có gì không bạn?
- show processlist; xem có gì?
- enable slow queries log rồi phân tích với mysqldumpslow xem
|
|
Let's build on a great foundation! |
|
|
|
[Question] mysqld used 100% CPU |
31/12/2010 20:36:31 (+0700) | #3 | 228270 |
smile_sad
Member
|
0 |
|
|
Joined: 15/08/2006 19:15:08
Messages: 96
Offline
|
|
Hi anh quanta, em đã thử edit my.cnf và enable mysqld log và slow queries log nhưng khi restart mysql thì log file không được tạo ra.
show processlist cũng chỉ là output tương tự như mytop utility ở trên anh à. |
|
|
|
|
[Question] mysqld used 100% CPU |
31/12/2010 22:44:21 (+0700) | #4 | 228285 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
smile_sad wrote:
em đã thử edit my.cnf và enable mysqld log và slow queries log nhưng khi restart mysql thì log file không được tạo ra.
Bạn sửa thế nào vậy? Đã có long_query_time chưa? |
|
Let's build on a great foundation! |
|
|
|
[Question] mysqld used 100% CPU |
31/12/2010 23:11:02 (+0700) | #5 | 228294 |
smile_sad
Member
|
0 |
|
|
Joined: 15/08/2006 19:15:08
Messages: 96
Offline
|
|
Em thêm vào my.cnf:
[mysqld]
.....
.....
.....
log-slow-queries = /var/log/mysql/mysql-slow.log
long_query_time = 1
Sau đó restart mysqld. |
|
|
|
|
[Question] mysqld used 100% CPU |
31/12/2010 23:25:45 (+0700) | #6 | 228299 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
Thư mục mysql đã tồn tại trong /var/log chưa và nó được owned bởi ai? Để đơn giản, chỉ cần chỉ định tên file thôi (không cần đường dẫn tuyệt đối), sau đó tìm trong datadir thì sẽ thấy. |
|
Let's build on a great foundation! |
|
|
|
[Question] mysqld used 100% CPU |
31/12/2010 23:31:31 (+0700) | #7 | 228302 |
smile_sad
Member
|
0 |
|
|
Joined: 15/08/2006 19:15:08
Messages: 96
Offline
|
|
ok anh. Đây là 1 vài slow log
tail -f /var/log/mysql/mysql-slow.log
# Query_time: 4 Lock_time: 0 Rows_sent: 81212 Rows_examined: 477199
SELECT DISTINCT p.* FROM esb2b_phone p, esb2b_phone_categories pc WHERE p.es_cid=pc.es_id AND p.es_active='1' AND (p.es_name_thai LIKE '%à¸%' OR p.es_name_eng LIKE '%à¸%' AND p.es_cid='3' );
# Time: 110101 0:24:03
# User@Host: nalueng_main[nalueng_main] @ localhost []
# Query_time: 10 Lock_time: 0 Rows_sent: 20 Rows_examined: 479659
SELECT DISTINCT p.* FROM esb2b_phone p, esb2b_phone_categories pc WHERE p.es_cid=pc.es_id AND p.es_active='1' AND (p.es_name_thai LIKE '%à¸%' OR p.es_name_eng LIKE '%à¸%' AND p.es_cid='3' ) ORDER BY es_update_on DESC LIMIT 2440, 20;
# Time: 110101 0:24:06
# User@Host: nalueng_main[nalueng_main] @ localhost []
# Query_time: 5 Lock_time: 0 Rows_sent: 45964 Rows_examined: 406703
SELECT DISTINCT p.* FROM esb2b_phone p, esb2b_phone_categories pc WHERE p.es_cid=pc.es_id AND p.es_active='1' AND (p.es_name_thai LIKE '%ห%' OR p.es_name_eng LIKE '%ห%' AND p.es_cid='8' );
# Time: 110101 0:24:13
# User@Host: nalueng_main[nalueng_main] @ localhost []
# Query_time: 7 Lock_time: 0 Rows_sent: 20 Rows_examined: 431243
SELECT DISTINCT p.* FROM esb2b_phone p, esb2b_phone_categories pc WHERE p.es_cid=pc.es_id AND p.es_active='1' AND (p.es_name_thai LIKE '%ห%' OR p.es_name_eng LIKE '%ห%' AND p.es_cid='8' ) ORDER BY es_update_on DESC LIMIT 24520, 20;
# Time: 110101 0:24:17
# User@Host: nalueng_main[nalueng_main] @ localhost []
# Query_time: 10 Lock_time: 0 Rows_sent: 61731 Rows_examined: 438237
SELECT DISTINCT p.* FROM esb2b_phone p, esb2b_phone_categories pc WHERE p.es_cid=pc.es_id AND p.es_active='1' AND (p.es_name_thai LIKE '%à¸%' OR p.es_name_eng LIKE '%à¸%' );
# Time: 110101 0:24:19
# User@Host: nalueng_main[nalueng_main] @ localhost []
# Query_time: 2 Lock_time: 0 Rows_sent: 20 Rows_examined: 482137
SELECT DISTINCT p.* FROM esb2b_phone p, esb2b_phone_categories pc WHERE p.es_cid=pc.es_id AND p.es_active='1' AND (p.es_name_thai LIKE '%à¸%' OR p.es_name_eng LIKE '%à¸%' ) ORDER BY es_update_on DESC LIMIT 43880, 20;
# Time: 110101 0:24:42
# User@Host: nalueng_main[nalueng_main] @ localhost []
# Query_time: 18 Lock_time: 0 Rows_sent: 172482 Rows_examined: 659739
SELECT DISTINCT p.* FROM esb2b_phone p, esb2b_phone_categories pc WHERE p.es_cid=pc.es_id AND p.es_active='1' AND (p.es_name_thai LIKE '%ส%' OR p.es_name_eng LIKE '%ส%' AND p.es_cid='3' );
# Time: 110101 0:24:55
# User@Host: nalueng_main[nalueng_main] @ localhost []
# Query_time: 14 Lock_time: 0 Rows_sent: 117465 Rows_examined: 549705
SELECT DISTINCT p.* FROM esb2b_phone p, esb2b_phone_categories pc WHERE p.es_cid=pc.es_id AND p.es_active='1' AND (p.es_name_thai LIKE '%à¸%' OR p.es_name_eng LIKE '%à¸%' AND p.es_cid='3' );
# Time: 110101 0:24:59
# User@Host: nalueng_main[nalueng_main] @ localhost []
# Query_time: 4 Lock_time: 0 Rows_sent: 20 Rows_examined: 558225
SELECT DISTINCT p.* FROM esb2b_phone p, esb2b_phone_categories pc WHERE p.es_cid=pc.es_id AND p.es_active='1' AND (p.es_name_thai LIKE '%à¸%' OR p.es_name_eng LIKE '%à¸%' AND p.es_cid='3' ) ORDER BY es_update_on DESC LIMIT 8500, 20;
# Time: 110101 0:25:09
# User@Host: nalueng_main[nalueng_main] @ localhost []
# Query_time: 27 Lock_time: 0 Rows_sent: 20 Rows_examined: 659759
SELECT DISTINCT p.* FROM esb2b_phone p, esb2b_phone_categories pc WHERE p.es_cid=pc.es_id AND p.es_active='1' AND (p.es_name_thai LIKE '%ส%' OR p.es_name_eng LIKE '%ส%' AND p.es_cid='3' ) ORDER BY es_update_on DESC LIMIT 0, 20;
|
|
|
|
|
[Question] mysqld used 100% CPU |
01/01/2011 00:26:38 (+0700) | #8 | 228305 |
|
quanta
Moderator
|
Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
|
|
Bạn có để ý thấy Rows_examined khá lớn và có những queries khá lâu không? Bạn thử dùng EXPLAIN để phân tích các queries đó và tìm hiểu một chút về Indexes xem.
PS: nên tăng query_time lên 10, 15s không log lại đầy ứ ự đấy. |
|
Let's build on a great foundation! |
|
|
|
[Question] mysqld used 100% CPU |
01/01/2011 07:39:55 (+0700) | #9 | 228307 |
smile_sad
Member
|
0 |
|
|
Joined: 15/08/2006 19:15:08
Messages: 96
Offline
|
|
ok các bước còn lại em sẽ làm và post kết quả lên sau. Cảm ơn anh quanta đã giúp đỡ. |
|
|
|
|
[Question] mysqld used 100% CPU |
01/01/2011 22:03:39 (+0700) | #10 | 228389 |
myquartz
Member
|
0 |
|
|
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
|
|
Query mà có mấy cái LIKE %xxx% kia và lại có cả OR thì tớ sợ lắm. Câu đó kiểu gì cũng tốn CPU hoặc IO vì nó phải lấy cả table ra so sánh.
Nên ép chủ cái trang có câu đó sửa lại, không được LIKE mà phải là = (hoặc hạn chế like), hoặc chí ít thì LIKE "prefix%" chứ ko được LIKE "%xx%". |
|
|
|
|
[Question] mysqld used 100% CPU |
02/01/2011 15:09:47 (+0700) | #11 | 228427 |
smile_sad
Member
|
0 |
|
|
Joined: 15/08/2006 19:15:08
Messages: 96
Offline
|
|
@myquartz: bạn nhận xét rất chính xác. Mình đã index lại dữ liệu của 2 bảng đó thì load average giảm đáng kể. mysql cũng khả quan hơn tuy nhiên cái statement phía trên với việc sử dụng phát biểu LIKE kiểu như vậy ngốn CPU rất cao.
Một link ref cho mọi người:
http://www.ovaistariq.net/479/mysql-query-optimization-tip-1-avoid-using-wildcard-character-at-the-start-of-a-like-pattern/
|
|
|
[Question] mysqld used 100% CPU |
05/01/2011 13:05:19 (+0700) | #12 | 228715 |
|
zeno
Elite Member
|
0 |
|
|
Joined: 20/07/2004 03:57:09
Messages: 124
Location: HVA
Offline
|
|
Việc bạn cung cấp hosting thì hơi khó vì mỗi ông code một kiểu rồi vứt lên server (query gì mà 13 giây còn chưa xong ) hành hạ tài nguyên server của bạn. Mình nghĩ nên tạo một số policy như 1 query quá lâu hoặc cpu quá cao thì hệ thống sẽ kill cái process đó nhằm đảm bảo tính ổn định của server.
|
|
|
|