Php 拥有600多个连接的MySQL

Php 拥有600多个连接的MySQL,php,mysql,sql,query-optimization,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-querie

我有数据库服务器和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 

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

一个解决方案是为所有读取操作设置额外的从属数据库服务器,并且只向主服务器写入数据

但听上去,对于所有导致查询速度慢的表,您可能会从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

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

一个解决方案是为所有读取操作设置额外的从属数据库服务器,而只向主数据库写入

但听上去,对于所有导致查询速度慢的表,您可能会从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

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

如果没有看到查询、结构和索引,我也相信@SliveBacknet关于查询/表设计的功能会让你丧命。如果您有一些内容有点静态的查询,我会尝试每天预先聚合一些表,以简化其他表获得某些结果的过程,然后调整并优化一些更关键的查询。找出哪些查询可能是造成最大瓶颈问题的原因。

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

ini文件对您没有帮助,是您的查询和可能的表设计让您感到痛苦,而不是数据库本身。日志表查询更像是7/10查询。每秒平均查询数超过70次。ini文件对您没有帮助,是您的查询和可能的表设计让您感到痛苦,而不是DB本身。日志表查询更像是7/10查询。每秒平均查询数高于70。与MyISAM相比,InnoDB搜索(选择查询)速度较慢,对吗?这将是多么有效。我还使用适当的索引优化了查询。这是一个很好的建议。MyISAM在写入表时会锁定该表,从而阻止其他查询。在设置主/从之前,请尝试将MyISAM表转换为InnoDBAnd,mysqltuner.pl将帮助您调整服务器当前我使用的是非持久连接,持久连接是否可以提高性能?持久连接不太可能提高性能。更有可能用未关闭的连接填满连接池。在大多数情况下,InnoDB的选择与MyISAM的一样快(或更快)。与MyISAM相比,InnoDB搜索(选择查询)是慢的,对吗?这将是多么有效。我还使用适当的索引优化了查询。这是一个很好的建议。MyISAM在写入表时会锁定该表,从而阻止其他查询。在设置主/从之前,请尝试将MyISAM表转换为InnoDBAnd,mysqltuner.pl将帮助您调整服务器当前我使用的是非持久连接,持久连接是否可以提高性能?持久连接不太可能提高性能。更有可能用未关闭的连接填满连接池。在大多数情况下,InnoDB的选择与MyISAM的一样快(或更快)。