我有数据库服务器和其他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 目前我使用的是非持久连接,持久连接能提高我的性能吗?
发布于 2011-01-08 13:53:45
一种解决方案是为所有读操作设置额外的从属数据库服务器,并且只对主数据库进行写操作。
但是从声音上看,对于所有导致慢查询的表,从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但是,真正优化配置并不能神奇地解决查询级别的问题。
发布于 2011-01-10 20:28:49
在没有看到查询、结构和索引的情况下,我也相信@SliverbackNet关于查询/表设计会杀死你。如果你有一些带有静态内容的查询,我会尝试每天预先聚合一些表,以简化获得一些结果的其他查询,然后调整并优化一些更关键的查询。找出哪些查询可能导致最大的瓶颈问题。
https://stackoverflow.com/questions/4632567
复制相似问题