mysql 提升tps_MYSQL的TPS优化

mysql 提升tps_MYSQL的TPS优化1、摘要系统初期使用的是分布式微服务,但是所有业务模型都在同一个数据库实例上,数据库的压力会非常大,这时需要找出系统执行频率比较高的SQL,进行优化。这里重点描述定位问题的方法,使用的数据也都是测试环境数据。2、统计数据2.1、统计SQL执行次数showGLOBALstatuslike’Com_insert%’;showGLOBALstatuslike’Com_select%’…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1、摘要

系统初期使用的是分布式微服务,但是所有业务模型都在同一个数据库实例上,数据库的压力会非常大,这时需要找出系统执行频率比较高的SQL,进行优化。这里重点描述定位问题的方法,使用的数据也都是测试环境数据。

2、统计数据

2.1、统计SQL执行次数

show GLOBAL status like ‘Com_insert%’;

show GLOBAL status like ‘Com_select%’;

show GLOBAL status like ‘Com_update%’;

show GLOBAL status like ‘Com_delete%’;

选取至少两个时间段的数据

17:57分

Com_insert1609095

Com_select169588912

Com_update69325636

Com_delete980

17:58分

Com_insert1609124

Com_select169631946

Com_update69344475

Com_delete980

18:02分

Com_insert1609421

Com_select169769311

Com_update69403962

Com_delete980

17:57 到17:58 平均每秒的次数

Com_insert0.5次/秒

Com_select717次/秒

Com_update313次/秒

Com_delete0次/秒

17:58 到18:02 平均每秒的次数

Com_insert1.2次/秒

Com_select572次/秒

Com_update247次/秒

Com_delete0次/秒

计算mysql吞吐量

基于com_%计算tps ,qps

tps= Com_insert/s + Com_update/s + Com_delete/s

qps=Com_select/s + Com_insert/s + Com_update/s + Com_delete/s

根据公式将两次统计结果的值取平均值

Tps=280

Qps=924

2.2、general_log

模拟线上环境,系统没有开启 general_log,否则会影响性能,所以select 的执行日志暂时无法统计。

2.3、慢查询日志:

https://blog.csdn.net/weixin_41715077/article/details/83116520

2.4、binlog

通过命令获取上面第一个时间段的binlog日志

mysqlbinlog –no-defaults -s –start-datetime=’2018-11-07 17:57:00′ –stop-datetime=’2018-11-07 17:58:00′ mysql-bin.000564 -r 20181107-1757-1758

binglog中有 update delete 和insert 等事务型SQL,这也是我们重点需要优化的地方。

2.4.1、统计20181107-1757-1758文件中SQL执行次数

2.4.2、统计insert

共26次 ,可以先忽略。

80aa152374096ad8cc0a73337873daab.png

2.4.3、update

统计update次数。一分钟内共15885 次updat,平均每秒264。这个和上面统计数据基本一致。

f63fb76e5b04f43d08265e3448028800.png

2.4.4、分析哪些SQL执行频率比较高。

发现有两条SQL的执行频率最高,找到需要优化的地方。

989c7f73261d694b0420beea4269aa71.png

eca7b9d29e304e129f2d80dbd518b8c8.png

3、优化方式

先将需要Update 的数据放到redis 中,然后再定时或者根据设置数据条数的阈值来批量同步到mysql表中。比如当redis中数据超过1000时,按照上面的统计的TPS,大概是3秒钟同步一次。

但是要注意批量update的方式。使用mybatis 批量更新主要有两种方式。一种用for循环通过循环传过来的参数集合,循环出N条sql,另一种 用mysql的case when 条件判断变相的进行批量更新 。使用第一方式数据库连接必须配置:&allowMultiQueries=true

update t_customer set

user_top = #{cus.top},

user_co = #{cus.co},

user_cs = #{cus.cs},

user_cd = #{cus.cd},

user_ty = #{cus.ty}

where id = #{cus.id}

update t_customer

when id=#{us.id} then #{us.top}

when id=#{us.id} then #{us.co}

when id=#{us.id} then #{us.cs}

when id=#{us.id} then #{us.cd}

when id=#{us.id} then #{us.ty}

id in

(#{us.id})

两种方式对比,第一种方式根据主键或者唯一索引更新相对会快点,而且不容易产生死锁。第二种方式使用case when 且where条件中用in 无法利用索引,且容易产生死锁。

另外有使用spring batch 的效率可能会更高点,由于没有尝试过,这里无法判断。

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180009.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle 11g AMM与ASMM切换

    Oracle 11g AMM与ASMM切换现在的Oracle正在往智能化方向发展。如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题。但是进入10g之后,自动内存池调节成为一个重要Oracle特性。在10g时,Oracle推出了ASMM(AutomaticSharedMemoryManagement),实现了OracleSGA和PGA内部结构的自调节。进入11g之后,AMM(A…

    2022年5月3日
    47
  • 零基础学习JAVA其实并不难!不相信?进来看看你就知道了

    零基础学习JAVA其实并不难!不相信?进来看看你就知道了其实Java并没有想象中的那么难,首先想要入这个行,要做好一个心理准备,那就是你想走远点,就得不间断的去学习,去汲取知识,前期不能怕辛苦,不要闲下来就打LOL、吃鸡、王者农药,有空就得多看看各种开源项目的代码,API的设计方式,各大网站的设计架构,理解各个环节的作用。补齐自己的知识视野。  当然这个行业也并不是什么门槛都没有,不要再私信我初中生、高中生、中专生能不能学习Java了。反正我个人是认为不可行的,或许你可以去问问其他大神?或许他们会觉得可以的。  下图是我更新过的自学表,分别分为4个阶段。按

    2022年7月7日
    42
  • vc 识别移动硬盘 U盘,本地硬盘[通俗易懂]

    vc 识别移动硬盘 U盘,本地硬盘[通俗易懂]vc 识别移动硬盘 U盘,本地硬盘

    2022年4月20日
    42
  • 2019最新的手机号码正则表达式

    2019最新的手机号码正则表达式2019最新的手机号码正则表达式看着我的手机号码验证又被测试给踢了回来,没办法自己只能写一个备用了。参考博客:https://blog.csdn.net/u010085362/article/details/80347225直接贴出我的正则:((\+?86)|(\(\+86\)))?((((13[4]{1})|(14[5-9]{1})|147|(15[4]{1})|166|(17\…

    2022年6月6日
    40
  • 使用postman发送http请求

    使用postman发送http请求

    2021年9月17日
    64
  • maven环境变量配置详细步骤(win10)

    maven环境变量配置详细步骤(win10)一、前言最近更新了系统,maven也想了想也需要装个新版本了,去下载了新版本,记录下maven的安装配置,初学小伙伴可以看看。安装前确认已经安装好了JDK,没有安装或下载的小伙伴可以参考我另外一篇文章原创jdk1.8下载与安装教程(win10),其它版本类似。安文件大家可以自己去官网下载,也可以直接在下面到我的网盘下载,官网向来下载速度都比较慢。目前版本是3.6.3版本,有新版本我也…

    2022年7月24日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号