【问题标题】:MySQL with more than 600 connectionsMySQL 有超过 600 个连接
【发布时间】:2011-01-08 05:42:29
【问题描述】:

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

目前我正在使用非持久连接,持久连接可以提高我的性能吗?

【问题讨论】:

  • 那个 ini 文件对你没有帮助,杀死你的是你的查询和可能的表设计,而不是数据库本身。
  • 日志表查询更像是 7/10 查询。每秒平均查询次数超过 70 次。

标签: php mysql sql query-optimization


【解决方案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

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

【讨论】:

  • InnoDB 搜索(选择查询)与 MyISAM 相比很慢,对吧?效率会有多高。我还使用适当的索引优化了查询。
  • 这是一个很好的建议。 MyISAM 在写入表时锁定表,阻止其他查询。在设置主/从之前,尝试将 MyISAM 表转换为 InnoDB
  • 而 mysqltuner.pl 将帮助您调整服务器
  • 目前我使用的是非持久连接,持久连接可以提高我的性能吗?
  • 持久连接不太可能提高性能。更有可能用未关闭的连接填满您的连接池。在大多数情况下,InnoDB 选择目前与 MyISAM 一样快(或更快)。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2020-09-03
    • 2016-06-01
    • 1970-01-01
    • 2016-10-24
    • 2020-12-21
    相关资源
    最近更新 更多