2011-01-08 74 views
1

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

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

以下是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

该ini文件不会帮助你,这是你的查询和可能的表设计,这是杀了你,而不是数据库本身。 – SilverbackNet 2011-01-08 05:47:05

+0

日志表查询更像7/10查询。 平均每秒查询次数高于70次/秒。 – itsoft3g 2011-01-08 06:52:35

回答

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 

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

0

没有看到查询,结构和索引,我也相信@SliverbackNet关于查询/表设计会导致你的问题。如果您的某些查询在内容方面有点静态,我会尝试每日对某些表进行预先汇总,以简化获取某些结果的其他表,然后调整并优化一些更关键的查询。查找哪些查询可能导致最大的瓶颈问题。