MySQL拥有超过600个连接

时间:2011-01-08 05:42:29

标签: php mysql sql query-optimization

我有数据库服务器和其他4个客户端服务器 客户端服务器一次连接数不超过600 它有很多慢查询,这是由于表锁定造成的 我已经将其中一个表更改为InnoDB,它可以获得更多更新和插入查询。

请帮我优化数据库。我有一个专用的数据库服务器。

以下是my.cnf设置。

[mysqld]  
tmpdir=/tmp  
open_files_limit=33628   
log-slow-queries=/slow-query.txt  
long_query_time=1  
log-queries-not-using-indexes=1  
concurrent_insert=2  


old_passwords=1  
datadir=/var/lib/mysql  

safe-show-database  
tmp_table_size = 128M  
max_heap_table_size = 128M  
query_cache_limit=8M  
query_cache_size=128M ## 32MB for every 1GB of RAM  
query_cache_type=1  
max_user_connections=800  
max_connections=800  
collation_server=utf8_unicode_ci  
character_set_server=utf8  


delayed_insert_timeout=40  

interactive_timeout=10  
wait_timeout=3600  
connect_timeout=20  
thread_cache_size=128  
key_buffer=128M ## 32MB for every 1GB of RAM  
join_buffer=1M  
max_connect_errors=20  
max_allowed_packet=16M  
table_cache=400  
record_buffer=1M  
sort_buffer_size=4M ## 1MB for every 1GB of RAM  
read_buffer_size=4M ## 1MB for every 1GB of RAM  
read_rnd_buffer_size=4M  ## 1MB for every 1GB of RAM  
thread_concurrency=8 ## Number of CPUs x 2  
myisam_sort_buffer_size=32M  
server-id=1  

[mysql.server]  
user=mysql  


[safe_mysqld]  
open_files_limit=33628  
err-log=/var/log/mysqld.log  
pid-file=/var/lib/mysql/mysql.pid 

目前我使用非持久连接,是否持续连接可以提高我的性能?

2 个答案:

答案 0 :(得分:1)

一种解决方案是为所有读取操作设置其他从属数据库服务器,并仅写入主服务器。

但是从它的声音来看,你可能会从myisam移动到innodb,从而导致所有表格导致查询速度慢,并构建正确的索引,以便你的查询不会花费这么长时间,从而获益最多。

就innodb而言, 为缓冲池提供大量内存可以显着提高性能:

# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 6144M

但是真正优化配置并不会在查询级别神奇地解决问题。

答案 1 :(得分:0)

在没有看到查询,结构和索引的情况下,我也相信@SliverbackNet关于查询/表设计会让你失望。如果你有一些内容有点静态的查询,我会尝试每天预先聚合一些表,以简化其他人获得一些结果,然后调入并优化一些更关键的查询。找出可能导致最大瓶颈问题的查询。