我的MySQL服务器5.0.96版有问题。服务器上正在运行包含所有InnoDB表的数据库。有时,在繁重的工作负载期间,所有客户端都会同时遇到无响应的MySQL服务器。有时服务器会在几分钟后恢复,但有时仅重新启动MySQL服务会有所帮助。当没有太多客户端连接时,服务器可以完美地工作。连接的数量也不是问题,我检查了一下,在繁重的工作负载中,连接的数量是300-400,我们将最大连接数量设置为5000。机器上有32 be的RAM内存和四核处理器,所以这应该足够了。来自服务器的InnoDB参数包括
innodb_thread_concurrence = 200
innodb_open_files = 2048
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_log_files_in_group = 2
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_buffer_pool_size = 8192M
innodb_additional_mem_pool_size = 8M
innodb_concurrency_tickets = 500
innodb_commit_concurrency = 16
innodb_autoextend_increment = 8
innodb_adaptive_hash_index enabled 我在某处读到innodb_thread_concurrence不应该大于16。是不是这个参数的值太大导致服务器挂起?
发布于 2015-08-25 07:34:35
5.0 InnoDB在大约4-8个活动用户后停机。5000个空闲用户是没有问题的。
比方说,当你有超过8个用户时,他们就会互相绊倒,而且每个人都需要越来越长的时间才能完成。与此同时,更多的用户试图进入;这只会使情况变得更糟。这可能是您决定重新启动的时候。另一种解决方案是停止客户端启动任何其他连接。
您的客户端是什么?如果它们是在Apache中运行的,请保持较低的MaxClients,例如,10。这可以避免MySQL过载,并使您的代码更容易为用户提供比崩溃更优雅的东西。
5.6在这方面有很多修复。我建议你升级。(您落后了3个主要步骤,因此升级将是痛苦的。)
到目前为止,我忽略了你的设置,因为你“不能通过调优来解决性能问题”(通常)。现在我来看看。
当问题发生时,您是否知道自己是否受I/O限制?如果是这样,请考虑更改
innodb_flush_log_at_trx_commit from 1 to 2这将不太安全,但它将显著减少I/O。
您可以将语句批处理到BEGIN...COMMIT块中吗?这导致较少的I/O。
你有空闲的内存吗?您是否拥有超过8 8GB的数据和索引?(显然你有7.43 you的内存。)如果是这样,则增加
innodb_buffer_pool_size from 8192M to 70% of _available_ RAM无论如何,将其增加到9G。
哦,坏消息:
query_cache_size = 512M当对表进行任何写操作时,需要从查询缓存中清除对该表的所有提及。这可能是代价高昂的。对于这种设置,我建议不要超过50M。在写繁忙的系统中,我建议关闭QC。
你说"all InnoDB",但是你在MyISAM:key_buffer_size = 2048M上浪费了2 2GB。将其更改为20M。
您已打开slowlog,但可能处于默认阈值10秒。将其减少到2秒。但也许在10岁时,您已经捕获了一些导致崩溃的查询。查看slowlog (最好使用pt-query-digest对其进行总结)。让我们来讨论一下最糟糕的几个查询。清理其中一个可能是完整的解决方案。
https://stackoverflow.com/questions/32189474
复制相似问题