<![CDATA[Latest posts for the topic "Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục"]]> /hvaonline/posts/list/24.html JForum - http://www.jforum.net Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục /hvaonline/posts/list/42924.html#267071 /hvaonline/posts/list/42924.html#267071 GMT Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục

mr.tee wrote:
Em ( mình ) mới được sếp giao nhiệm vụ quản lý một con server linux, chạy apache + php + mysql, có cài thêm memcached. Do source code của website là tự code, nên có thể có nhiều slow query mà không xử lý hết được, dẫn đến có một vài table của database thường xuyên bị overhead, dẫn đến treo luôn cả sql server. Mỗi khi sql server bị treo thì ssh đến server cũng bị treo luôn ở step "Starting first key Exchange" nên không thể ssh đến để repair table hay stop service. Giải pháp duy nhất mỗi lần bị thế này là gọi sang Data Center bảo họ restart server, rồi lại vào start lại các service và repair Database. Xin mọi người hướng dẫn cho em ( mình ) cách khắc phục hoặc hướng giải quyết khác ( nếu có ).  
---> đã tìm ra nguyên nhân thì cứ theo đó mà giải quyết chớ cách khắc phục là gì nữa?]]>
/hvaonline/posts/list/42924.html#267072 /hvaonline/posts/list/42924.html#267072 GMT
Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục /hvaonline/posts/list/42924.html#267073 /hvaonline/posts/list/42924.html#267073 GMT Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục /hvaonline/posts/list/42924.html#267074 /hvaonline/posts/list/42924.html#267074 GMT Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục

mr.tee wrote:
Anh ơi, những slow query đấy chính ông coder bên em cũng không xử lý hết được. Khi hỏi đến thì chỉ bảo là định kỳ repair table, nhưng nó thường chết bất đắc kỳ tử, tối qua vừa repair xong sáng nay lại lăn ra treo. Ý em muốn hỏi là có giải pháp nào để cấu hình server, sao cho khi mysql chết thì ssh vẫn hoạt động, dạng như giới hạn resource của mysql, không để ảnh hưởng đến các service khác. 
Làm sao mà không xử lý hết được? Một ứng dụng có bao nhiêu SQL statement, câu SQL statement nào phi lý, không hiệu suất thì liệt kê ra mà fix chớ làm sao mà "không xử lý hết" là sao? Tạm thời coi lại cấu hình my.cnf, điều chỉnh lại phần cache size, buffer size và nhét: nice = -5 vô trong [mysqld_safe]. Phải tính cho thật kỹ máy chủ có được bao nhiêu ram rồi mới tính ra số lượng memory sử dụng cho mysql một cách khoa học và hợp lý chớ đừng có nhét bậy, nhét bạ các giá tri trong đó. Tình trạng treo luôn, không ssh vô được là vì mysql nuốt hết memory và nhảy sang dùng swap mà ra. Có làm gì đi chăng nữa thì cũng tạm bợ đối phó mà thôi. Muốn fix tận cùng thì cứ lôi cái ông coder ra mà bắt ông ấy fix cái đống mysql gây sự cố.]]>
/hvaonline/posts/list/42924.html#267075 /hvaonline/posts/list/42924.html#267075 GMT
Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục /hvaonline/posts/list/42924.html#267085 /hvaonline/posts/list/42924.html#267085 GMT Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục

.lht. wrote:
Giải pháp tạm thời là viết 1 đoạn script tự động restart mysql theo định kì (sử dụng cron job). Sau đó bảo ông Coder kia xem và sửa lại source cho tốt. @Bạn có thể đưa thêm thông tin về cấu hình máy chủ và lượng truy cập vào website của bạn được không ? Có thể do máy chủ cấu hình hạn chế hoặc không đủ đáp ứng chăng ? 
Code:
Server model name : Intel (R) Xeon (R) CPU X3210 @2.13Ghz
CPU cores : 4 

Memory : 
Total : 4149456
Used : 1806328
Free : 2343128
Traffic vào website 1 ngày khoảng 28-30k visit, có 1 site phụ khoảng 2-3k visit. ]]>
/hvaonline/posts/list/42924.html#267098 /hvaonline/posts/list/42924.html#267098 GMT
Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục

conmale wrote:
Làm sao mà không xử lý hết được? Một ứng dụng có bao nhiêu SQL statement, câu SQL statement nào phi lý, không hiệu suất thì liệt kê ra mà fix chớ làm sao mà "không xử lý hết" là sao? Tạm thời coi lại cấu hình my.cnf, điều chỉnh lại phần cache size, buffer size và nhét: nice = -5 vô trong [mysqld_safe]. Phải tính cho thật kỹ máy chủ có được bao nhiêu ram rồi mới tính ra số lượng memory sử dụng cho mysql một cách khoa học và hợp lý chớ đừng có nhét bậy, nhét bạ các giá tri trong đó. Tình trạng treo luôn, không ssh vô được là vì mysql nuốt hết memory và nhảy sang dùng swap mà ra. Có làm gì đi chăng nữa thì cũng tạm bợ đối phó mà thôi. Muốn fix tận cùng thì cứ lôi cái ông coder ra mà bắt ông ấy fix cái đống mysql gây sự cố. 
Cũng khó anh ạ, toàn bộ nhân sự bên em chỉ có 1 coder, còn lại thì trình độ không tốt... Đã nhiều lần đè ông kia ra bắt fix, dùng đủ thể loại memcacher, tối ưu query, kết quả vẫn vậy, thi thoảng lại overhead, phải restart + repair mới chạy tiếp được. Em đang đọc một số hướng dẫn về hạn chế memory của mysql để khi treo vẫn ssh được vào, tạm thời thì vẫn phải sống chung với lũ.]]>
/hvaonline/posts/list/42924.html#267100 /hvaonline/posts/list/42924.html#267100 GMT
Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục /hvaonline/posts/list/42924.html#267101 /hvaonline/posts/list/42924.html#267101 GMT Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục /hvaonline/posts/list/42924.html#267587 /hvaonline/posts/list/42924.html#267587 GMT Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục /hvaonline/posts/list/42924.html#267680 /hvaonline/posts/list/42924.html#267680 GMT Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục

quanta wrote:
Bạn thảy lên một vài câu slow queries xem. Đã thử dùng EXPLAIN chưa? `my.cnf` đang cấu hình thế nào? 
Hiện tại thì phần trang chủ tự code bên mình đã tối ưu bằng cách sử dụng memcached, không còn bị tình trạng này, nhưng giải quyết xong thì lại lòi ra phần forum đang chạy SMF. Lần này thì không hiểu nguyên nhân gì mà SQL 2-3 ngày lại tự động treo một lần, cũng không thể ssh vào server luôn. Sau khi reboot server để vào ssh, truncate table smf_log_errors và optimizer một số table như smf_session ( overhead ~6-10mb ) thì lại chạy bình thường, nhưng chỉ duy trì được 1-2 ngày rồi lại tiếp tục bị như thế. đây là cấu hình mysql Code:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# skip-networking
skip-name-resolve
skip-external-locking
# Disabling symbolic-links is recommended to prevent assorted security risks
# symbolic-links=0

max_connections=1000
max_user_connections =0

log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2

query_cache_size = 16M
join_buffer_size = 8M
tmp_table_size = 512M
max_heap_table_size = 256M

query-cache-type = 1
key_buffer = 128M
key_buffer_size = 128M
max_allowed_packet = 32M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 128M
thread_cache = 16
query_cache_type = 1
query_cache_limit=32M 
thread_cache_size=143
table_cache = 4096
table_definition_cache=1024
thread_concurrency = 6

wait_timeout=30



[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
nice = -5
]]>
/hvaonline/posts/list/42924.html#268158 /hvaonline/posts/list/42924.html#268158 GMT
Mysql hay bị treo + overhead các table, xin hướng dẫn khắc phục

mr.tee wrote:
Em ( mình ) mới được sếp giao nhiệm vụ quản lý một con server linux, chạy apache + php + mysql, có cài thêm memcached.  
Lúc cao điểm, Apache dùng hết khoảng bao nhiêu RAM? memcached đang để max memory (-m) là bao nhiêu? Rồi còn RAM cho OS nữa. Server 4G thì chắc cũng chỉ dành được ~ 2G cho MySQL thôi.

mr.tee wrote:
Do source code của website là tự code, nên có thể có nhiều slow query mà không xử lý hết được, dẫn đến có một vài table của database thường xuyên bị overhead, dẫn đến treo luôn cả sql server.  
Percona có 2 công cụ rất hữu hiệu để phân tích slow query: pt-query-digest và pt-query-advisor.

mr.tee wrote:
Mỗi khi sql server bị treo thì ssh đến server cũng bị treo luôn ở step "Starting first key Exchange" nên không thể ssh đến để repair table hay stop service. Giải pháp duy nhất mỗi lần bị thế này là gọi sang Data Center bảo họ restart server, rồi lại vào start lại các service và repair Database.  
Việc đầu tiên cần làm là thiết lập một hệ thống giám sát. Khi memory usage vượt ngưỡng nào đó là phải alert ngay.

mr.tee wrote:
Anh ơi, những slow query đấy chính ông coder bên em cũng không xử lý hết được. Khi hỏi đến thì chỉ bảo là định kỳ repair table, nhưng nó thường chết bất đắc kỳ tử, tối qua vừa repair xong sáng nay lại lăn ra treo.  
Những slow query này gây crash table (MyISAM?) à hay sao mà phải repair? Mỗi khi MySQL chết, trong `/var/log/mysqld.log` có gì?

mr.tee wrote:
Ý em muốn hỏi là có giải pháp nào để cấu hình server, sao cho khi mysql chết thì ssh vẫn hoạt động, dạng như giới hạn resource của mysql, không để ảnh hưởng đến các service khác. 
Giảm lượng memory mà MySQL có thể dùng xuống. Có một công thức thế này: Code:
memory = global buffers + per-thread buffers * max_connections

global buffers = key_buffer_size 
               + innodb_buffer_pool_size 
               + innodb_additional_memory_pool_size
               + innodb_log_buffer_size
               + max_tmp_tables * min(tmp_table_size, max_heap_table_size)
               + query_cache_size
               + 3 * myisam_sort_buffer_size

per-thread buffers = read_buffer_size 
                   + join_buffer_size 
                   + read_rnd_buffer_size 
                   + thread_stack 
                   + (2 * max_packet_size)
Tham khảo: - http://www.mysqlperformanceblog.com/2006/05/17/mysql-server-memory-usage/ - http://www.pythian.com/news/1455/mysql-memory-consumption/ Với config. của bạn: Code:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# skip-networking
skip-name-resolve
skip-external-locking
# Disabling symbolic-links is recommended to prevent assorted security risks
# symbolic-links=0

max_connections=1000
max_user_connections =0

log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2

query_cache_size = 16M
join_buffer_size = 8M
tmp_table_size = 512M
max_heap_table_size = 256M

query-cache-type = 1
key_buffer = 128M
key_buffer_size = 128M
max_allowed_packet = 32M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 128M
thread_cache = 16
query_cache_type = 1
query_cache_limit=32M 
thread_cache_size=143
table_cache = 4096
table_definition_cache=1024
thread_concurrency = 6

wait_timeout=30



[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
nice = -5
thì: Code:
global buffers = 128M + 256M (tạm tính chỉ có 1 temp table) + 16M + 3 * 128M = 784M
per-thread buffers = 2M + 8M + 8M = 18M
memory = 784M + 18M * 1000 ~ 19G
Giải pháp trước mắt: - giảm read_rnd_buffer_size, join_buffer_size xuống (2M chẳng hạn) - giảm max_connections xuống - bảng nào convert được thì nên chuyển sang InnoDB 4G ~ 784M + 6M *500 (cũng phải dành một lượng RAM cho hệ điều hành và các thứ khác nữa chứ) Giải pháp lâu dài: - Đọc: http://www.amazon.com/gp/product/1449314287/]]>
/hvaonline/posts/list/42924.html#270920 /hvaonline/posts/list/42924.html#270920 GMT