我们游戏采用了mysql作为数据库软件,几经优化,已经相对稳定,有连续几个月稳定运行的记录,不过最近发生了比较诡异的现象,数据库有100多个进程突然锁住,用show processlist命令查看,几分钟之内一直是这些进程在执行相同的sql,没有任何结束的迹象,导致tomcat应用服务器飙升到线程池的最大线程,500个线程,然后停止响应。
show processlist看到的lock现象很多都是memery engine的表或者myisam engine的表,偶尔会有innodb engine的表,这些lock都是死死的lock,没有一点缓解的现象,由于当时情况比较紧急,游戏内玩家都无法操作,因此运维一般都保留show processlist的记录,然后重启db,重启要花费20分钟左右。一般一个小时左右能恢复正常,玩家可以继续游戏。
这样的情况在某个服发生比较频繁,甚至一个礼拜发生一次,非常困扰,老大要求必须解决这个问题,因此用了不少工具去查询mysql的运行情况,包括 mysqlreport,mysql-turner等工具,这些在 <<high performance msyql 2ed>>中有推荐。这两个工具用下来,发现mysql-turner比较傻瓜式,会提供优化的建议,但是内容比较少,而mysqlreport提供了比较详细的mysql运行信息,大约有100行,而且对这些信息做了完善的注释。
在mysql运行正常的情况下,这两个工具看到的mysql状态都是正常的,只是一些小地方引起了我的注意: mysql query cache的配置,我们开启了mysql 的query cache,但是根据这篇文档, mysql query cache,query cache是一把双刃剑,用得不好反而对系统性能有影响,不少文章指出,innodb为主的数据库,不需要开启query cache,因为innodb有自己的buffer pool等机制,而且我们游戏中有大量的insert操作,会导致cache频繁失效。mysqlreport的报告显示,Qcache hit : insert = 0.4 :1 ,可见cache的命中率非常低,详细可见 http://hackmysql.com/mysqlreportguide#qc_report:ratios
后来主程又发了一个mysql query cache的bug过来,http://bugs.mysql.com/bug.php?id=43758 ,开启query cache可能导致thread驻留在'freeing items'状态,而我们采用的mysql版本正好在5.1.36版本之前,因此可能是这个问题导致的。因为每次死锁发生的时候,查看运维的系统负载日志发现,系统的load并不高。也有同事说是因为执行排行等比较耗时的存储过程导致的,我想如果是这个原因的话,最多是部分table被锁住,而且这个innodb的锁可以自行解锁,只是时间问题,从mysql的status看,一直有innodb-lock存在,之前战场的部分table发生锁的现象,也是会自行解锁,或者kill掉一些mysql进程之后可以解锁。
之后将mysql query cache关闭了,现在运行两天下来没有发现大的异常,一个明显改进的现象是,mysql的slow log数量减少了很多,从之前的几千降低到了几十,我们slow-log的最少时间是2s,另外inndodb-lock的平均时间减少到1/2,
Innodb_row_lock_time_avg |
13ms |
继续观察一下mysql的运行状态,希望能够在其他参数上做出优化,并且杜绝死锁的发生。
分享到:
相关推荐
本文将详细介绍如何针对Windows平台下的MySQL服务器进行合理的配置优化,帮助读者更好地理解每个参数的作用及其设置的最佳实践。 #### 一、MySQL配置文件简介 MySQL在Windows平台上的主要配置文件为`my.ini`,通常...
"MySQL性能优化和高可用架构实践" 本书《MySQL性能优化和高可用架构实践》是一本详细介绍MySQL性能优化和高可用架构实践的书籍,旨在帮助读者提升MySQL数据库的性能和可靠性。本书的内容涵盖了查询优化的基本原则和...
在进行MySQL配置优化时,必须考虑到服务器的硬件能力和预期的工作负载。不同的参数设置会直接影响到查询性能、内存使用和并发处理能力。因此,优化过程不仅需要理论知识,还需要实践经验,通过监控和调整找到最佳的...
MySQL数据库优化实践主要涵盖硬件配置、操作系统层面的调整以及文件系统的优化等方面,这些优化措施能够显著提高MySQL数据库的性能和响应速度。 首先,硬件优化是基础。开启BBWC(Battery Backed Write Cache)能...
### MySQL服务性能优化——my.cnf/my.ini配置详解 #### 背景介绍 本文档旨在详细介绍一套已在生产环境中经过验证、适用于16GB内存环境下的MySQL服务性能优化方案。通过对my.cnf/my.ini配置文件的各项关键参数进行...
【MySQL5优化实践文档】 1. 概述 在数据库管理中,MySQL5是一个广泛使用的开源关系型数据库管理系统。随着业务的增长,数据库性能优化成为关键的一环,以确保系统的高效运行。本文档由Xi'an App of Rayhov tech Co...
MySQL性能优化是指通过调整MySQL数据库的配置、优化数据库结构和查询语句等方式,提高MySQL数据库的性能和响应速度,以满足应用程序的需求。MySQL作为最流行的开源数据库之一,被广泛应用于各种规模的企业和应用程序...
MySQL的配置优化是提升数据库性能的关键步骤,尤其是在处理大规模数据或高并发访问的场景下。...总的来说,MySQL的配置优化是一门细致且需要实践经验的技术,需要根据实际情况和业务需求灵活调整。
MySQL性能优化实践主要涉及到多个方面,包括选择合适的存储引擎、索引优化、SQL查询优化以及系统配置等。本文将深入探讨这些关键知识点。 首先,MySQL适用于多种场景,如Web网站系统、日志记录系统、数据仓库系统和...
总之,MySQL性能优化是一个综合性的过程,需要结合理论知识和实践经验,通过对查询优化、索引设计、系统配置等方面的调整,以达到提升系统性能的目标。在高并发环境下,合理的优化策略可以显著提高系统的响应速度和...
总的来说,使用“MySQL参数优化辅助工具”能够帮助数据库管理员更高效、更准确地调整MySQL配置,提升系统的整体性能。对于没有足够经验的团队来说,这是一个非常有价值的资源,能够减少摸索的时间,快速达到理想的...
整个演讲的重点在于分享MySQL运维优化的实践经验,探讨MySQL的现状和未来的发展方向,以及如何通过运维优化实践来提高数据库系统的性能和稳定性。杨尚刚的分享不仅是对MySQL运维人员的一次知识普及,更是对其未来...
总的来说,MySQL性能优化是一个综合性的过程,涵盖了SQL语句设计、存储过程优化、函数使用、索引管理以及服务器配置等多个层面。通过深入学习和实践,你可以提升MySQL系统的响应速度,满足高并发、大数据量的业务...
【标题】:“百度mysql性能优化ppt”所涉及的知识点涵盖了MySQL数据库在性能调优方面的多个重要环节。在MySQL性能优化中,我们关注的核心是提升数据处理速度,减少资源消耗,从而提高系统的整体效率。 【描述】:...
- **参数调优**:针对特定应用场景调整MySQL配置参数。 - **硬件升级**:在必要时通过增加内存、使用更快的磁盘等方式提升性能。 ### 五、案例分析与实践 本部分将通过具体案例来展示如何运用所学知识解决实际工作...
### MySQL高级配置优化指导 #### MySQL配置操作与优化概述 MySQL作为一款广泛使用的开源关系型数据库管理系统,在实际应用中往往需要根据不同的业务场景来进行合理的配置调整以满足性能需求。本文档将详细介绍...
caoz会讲解主从复制的配置和优化,以及MySQL集群的实现方式。 八、硬件与服务器优化 硬件配置和操作系统设置也会影响MySQL的性能。教程会讨论如何选择适当的硬件、磁盘I/O优化、CPU和内存资源分配,以及网络配置对...