前言

最近系统(基于SpringCloud+K8s)上线,运维团队早上8点左右在群里反馈,系统登录无反应!我的第一反应是Mysql数据库扛不住了。

排查问题也是一波三折,有网络问题,也有mysql读写分离后数据库参数优化问题。

问题回顾

1、运维团队早上8点左右在群里反馈,系统登录无反应。

2、DevOps团队通过查看Kibana日志,发现ELK、k8s集群、Redis、Mongodb、Nigix、文件服务器全部报:”Connect Unknown Error“,惊出一身冷汗。。。

心里嘀咕难道K8s容器也挂了?那还怎么玩?

3、查看监控短信,连续收到数据库读写分离Master-Slave警告信息

问题定位

1、Connect Unknown Error

经过从k8s团队确认,在早上8点左右出现了网络中断,持续了大概1分钟左右,导致k8s平台剔除响应超时的微服务节点,同时不断的启动新的容器。通过日志分析,8点半左右容器平台恢复正常,但是前台页面查询数据很慢(后来定位是Mysql数据库服务器CPU占用92%,导致数据库服务器处理应用请求很慢)。

2、Mysql读写分离Master-Slave警告信息

MHA架构

Mysql读写分离是采用MHA架构,一主两从(Master-Slave)。

Master负责数据的写操作,同时通过binlog日志同步到两个Slave从库,从库负责应用程序的查询操作。

在报Connect Unknown Error异常后,我们检查了Mysql服务器,发现Master节点CPU占用92%(应用层读写请求全部路由到了Master节点原因导致),而两个Slave节点全部处于空闲状态,并且主从数据不同步了。

3、数据库DBA通过查看mysql的show processlist命令,发现有大量的“create sort index(排序索引)”Sql语句(约36个)

经排查发现有个cms_article表有几百万的数据,客户端分页查询请求,虽然只取10条数据行,但是实际查询了几百万行数据,而且要在数据库内存中进行了几百万数据内存排序。所以出现了大量的create sort index排序索引。而且频繁执行Create Sort Index 会造成Mysql占满服务器CPU,导致服务器请求无响应,甚至假死状态!

解决办法

1、Connect Unknown Error

k8s平台自动剔除响应超时的微服务节点,同时启动新的容器,直至恢复到故障前的容器节点水平,依靠k8s平台自我修复。

2、Mysql读写分离Master-Slave警告信息

恢复步骤

1、重启Master-Slave节点,应用层读写请求正常,但是主从数据还是不同步,经定位是mysql同步线程Slave_IO_Running和Slave_SQL_Running都为No。

2、晚上重启Slave_IO_Running和Slave_SQL_Running线程

只有Slave_IO_Running和Slave_SQL_Running都为yes,则表示同步成功。

3、数据库DBA通过查看mysql的show processlist命令,发现有大量的“create sort index(排序索引)”Sql语句(约36个)

innodb_buffer_pool_size从500M调整为300G(服务器共500G内存)

innodb_buffer_pool_size

用于缓存索引和数据的内存大小, 这个当然是越多越好, 数据读写在内存中非常快, 减少了对磁盘的读写。

当数据提交或满足检查点条件后才一次性将内存数据刷新到磁盘中。然而内存还有操作系统或数据库其他进程使用, 一般设置 buffer pool 大小为总内存的 1/5 至 1/4。若设置不当, 内存使用可能浪费或者使用过多。

对于繁忙的服务器, buffer pool 将划分为多个实例以提高系统并发性, 减少线程间读写缓存的争用。

buffer pool 的大小首先受 innodb_buffer_pool_instances 影响, 当然影响较小。

Mysql性能调优总结

预计44W用户 峰值在线人数 5万左右。

1、innodb_buffer_pool_size=500M

太小,严重影响数据库性能。服务器共500G内存,但只给mysql缓冲池分配了500M,非常影响数据库性能,且造成资源浪费。建议设置为服务器内存的60%。

2、expire_logs_days=7

太短,只能保留7天的binlog,只能恢复7天内的任意数据。建议设置为参数文件里被覆盖的90天的设置。

3、long_query_time=10

太长,建议设置为2秒,让慢查询日志记录更多的慢查询。

4、transaction-isolation = read-committed

建议注释掉,使用数据库默认的事务隔离级别

5、innodb_lock_wait_timeout = 5

设置得太小,会导致事务因锁等待超过5秒,就被回滚。建议和云门户设置得保持一致,云门户大小为120。

6、autocommit = 0

#建议改为mysql默认的自动提交(autocommit=1),提升性能,方便日常操作。

mysql微服务查询问题_微服务架构下,Mysql读写分离后,数据库CPU飙升卡壳问题解析...相关推荐

  1. mysql一秒查询次数_单个select语句实现MySQL查询统计次数

    单个select语句实现MySQL查询统计次数 单个select语句实现MySQL查询统计次数的方法用处在哪里呢?用处太多了,比如一个成绩单,你要查询及格得人数与不及格的人数,怎么一次查询出来? My ...

  2. mysql 8.0 集群_集群架构03·MySQL初识,mysql8.0环境安装,mysql多实例

    官方网址 https://dev.mysql.com/downloads/mysql/ 社区版本分析 MySQL5.5:默认存储引擎改为InnoDB,提高性能和可扩展性,增加半同步复制 MySQL5. ...

  3. mysql查询并设置高亮_Thinkphp3.2.3设置MySql主从读写分离后,简单调用主数据库查询

    图/文:迷神 Thinkphp是一款不错的国产框架,使用范围广,应用也比较多.随着网站访问增大往往需要使用mysql主从同步功能,本身Thinkphp自带了主从读写分离的功能了. 但是我们经常有一个场 ...

  4. mysql proxy 多主_mysql多主多从架构与mysql-proxy读写分离

    mysql多主多从架构与mysql-proxy读写分离 最近心血来潮想要部署几台mysql的服务器,实现一个多主多从的服务器架构,并且要在这个架构上利用mysql-proxy实现读写分离操作,之前只是 ...

  5. MySQL数据库CPU飙升紧急处理方法

    MySQL数据库CPU飙升紧急处理方法 运行平稳的数据库,如果遇到CPU狂飙,到80%左右,那一定是开发写的烂SQL导致的,DBA首先要保证的是,数据库别跑挂了,所以我们要把那些运行慢的SQL杀死并记 ...

  6. mysql读写分离实现事务_Mysql读写分离后的事务ce

    1 .概述 很多人会有这样的疑问,mysql读写分离后,我的事务怎么处理呢. 不是说mysql不支持跨库事务吗? 那我引入mycat这个中间件后事务是否是安全的呢,它是怎么运作的呢. 今天我们就来实验 ...

  7. mysql微服务查询问题_【mysql】微服务架构下跨服务查询的聚合有什么好的方案?...

    微服务架构中,每个服务都有自己的独立数据库. 然而现在有个需求,需要生成一张实时的报表,该报表包含两个服务的数据. 如服务A,服务B.B中仅包含A的主键id作为关联. 而此报表的搜索条件包含A服务实体 ...

  8. golang微服务框架对比_微服务里程碑,Golang与Spring Cloud Alibaba完美结合

    目前微服务架构仍是软件架构中最新的热门话题,虽然Golang是一门新的语言,但Golang的性能比python和java高出不少.既能承受程序使用运行的服务构建的繁重负载,又容易与GitHub集成,管 ...

  9. 微服务认证模式_微服务之“网关模式”

    定义 API网关是一个服务器,它是系统中的单个入口点,用户对API网关进行单一呼叫,然后API网关调用每个相关的微服务器.它类似于面向对象设计的Facade模式.API网关封装内部系统架构,并提供针对 ...

最新文章

  1. struts1.2文件上传
  2. ASP.NET2.0通用数据访问类
  3. [TypeScript] Overload a Function with TypeScript’s Overload Signatures
  4. instancetype和id的区别
  5. HTTP简介,http是一个属于应用层的面向对象的协议
  6. 微型计算机引脚,微型计算机硬件基础8086引脚.doc
  7. P1972 [SDOI2009]HH的项链
  8. stl中copy()函数_std :: copy_if()函数以及C ++ STL中的示例
  9. 大工14秋《c/c++语言程序设计》在线作业三,大工《CC++语言程序设计》课程考试模拟试卷A...
  10. 【网络协议】openR调研
  11. pioneer软件VoLTE测试步骤,Pioneer操作说明.docx
  12. 专访邱锡鹏:人工智能开源社区的「先行者」
  13. 关于IP地址块聚合的一些问题
  14. 报错Error configuring application listener of class jdbc.ContextListener 解决办法之一
  15. java笔试常见填空题
  16. ios You app information could not be saved. Try again. If the problem persists, contact us
  17. python动画篮球大小_用Python把蔡徐坤打篮球视频转换成字符动画!
  18. Android+webService的连接
  19. javascript 应用
  20. LaTeX 控制表格的每行高度和单元格宽度

热门文章

  1. 腾讯计费全面开放,为你而来!
  2. rtmp 常用字段含义
  3. PyTorch GPU安装指南 (Ubuntu 16.04 anaconda cuda8.0 cuDNN6.0)
  4. redis的watch命令没有ABA的问题
  5. 复杂对象的组装与创建——建造者模式
  6. Hive 01_初学必知
  7. 基于分代的垃圾回收算法
  8. 【Java ORM】手写ORM框架:源代码、jar、生成JavaDoc文档
  9. C# int.Parse()与int.TryParse():将字符串转化为整数
  10. ES6中的新特性:Iterables和iterators