环境:
现象
从应用服务上看,在同一时间,4个查询与更新的服务副本,更新操作的线程一直卡在IO读上,也就是没有Mysql应答,导致其中部分服务的2-6个jdbc连接被卡死,直到540xxx毫秒(9分钟)后统一给了应答,服务才解除卡死。
线程栈大致如下:
java.net.SocketInputStream.socketRead0
com.mysql.jdbc.util.ReadAheadInputStream.fill
com.mysql.jdbc.MysqlIO.readFully
jdbc.pool.ProxyConnection.invoke
xxxxx.业务代码模块的updateDao
分析
目前怀疑跟数据库刷脏页导致一瞬间Mysql暂停服务了,且这部分查询处于一直执行的卡死状态,后来发现Mysql配置基本原始,需要很多参数的优化。
记录一些目前状态可能有问题的指标。
- innodb_io_capacity
- innodb redolog
- 慢查询日志未开启
- buffer池
- 脏页刷新策略
- 缓存利用率
innodb_buffer_pool_reads:表示InnoDB缓冲池无法满足的请求数。需要从磁盘中读取。
innodb_buffer_pool_read_requests:表示从内存中读取逻辑的请求数。 - 大概有3%的数据需要读磁盘。应该降低到1%以下。
- 缓存池中数据表明缓存池太小,这个pool_wait_free严重,如何调节:





- innodb_flush_neighbors=1 临近数据脏页刷新策略 默认是
- skip-external-locking #如果是单服务器环境,则将其禁用即可

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/142099.html