作为一个后端开发程序员,少不了和数据库打交道!!!
毕竟大部分的业务需求,无非就是查数据,然后在前端展示,例如:table表格展示,echarts图表展示等。
echarts图表,一般来说,大部分都是些统计业务,那就涉及到统计的SQL语句了。
统计的sql语句,很多时候,查询的效率就尤其的重要了。毕竟你等几十秒,才能展示出来。
估计客户,提着40米大刀在赶来的路上!!!
一个资深的数据库工程师,就尤为重要了。但是大部分小型开发公司,一般不具备这样的人才。
很多时候,这些数据库的优化,都得自己干了。
干成了,升职加薪迎娶白富美走上人生巅峰!!!
别闹,醒醒!
废话不多说了,今天我们就来谈谈数据库调优的一些思路,将会从下面几个方向展开描述!!!
- 调优原理和JMeter案例分享
- 连接池优化
- SQL语句优化
- 数据库优化
那我们今天先来谈谈调优原理和jmeter案例分享
开干!!!
2. 数据库调优原理
思考这样一个问题:
# 请问这两条SQL语句有什么区别呢?你来猜一猜那条SQL语句执行查询效果更好! select id from sys_goods where goods_name='华为 HUAWEI 麦芒7 魅海蓝 6G 64G 全网通'; select id from sys_goods where goods_id=1496732598527979521; 复制代码
系统瓶颈图:
灵魂三问:
1.1 为什么要进行MySQL数据库调优?
- 提升网站整体通吐量,优化用户体验数据库是关键之一
- 流畅页面的访问速度
- 良好的网站功能体验
- 避免网站页面出现访问错误
- 由于数据库连接timeout产生页面5xx错误
- 由于慢查询造成页面无法加载
- 由于阻塞造成数据无法提交
- 增加数据库的稳定性
- 很多数据库问题都是由于低效的查询引起的
总结:不要让数据库成为系统的瓶颈!数据库的TPS,1w以上轻轻松松!
1.2 什么影响数据库性能?1.3 数据库调优到底调什么?
- 服务器:OS,CPU,Memory,network【大错特错!】
- MySQL本身
- 数据库表结构【对性能影响巨大】
- SQL语句,低效率的
- 超大的表
- 大事务
- 数据库配置
- 数据库整体架构
- ....
2. JMeter数据库压力测试案例2.1 驱动下载
- 优化SQL语句:根据需求编写结构良好的SQL语句【一个需求实现的SQL是很多】
- 数据库表结构:建立索引,冗余字段,分表....
- MySQL数据库的配置:配置最大连接数,加缓存,加链接等待超时时间...
- 加缓存:排序缓存,查询缓存,join缓存....
- OS操作系统底层优化:tcp连接数,打开文件的数量,线程栈...
- 服务器硬件优化:多核CPU,更大内存,SSD【固态硬盘】
在测试计划中我们要及时的添加JDBC驱动链接。这里我用的mysql数据库是5.7版本,那么我相对应的jdbc驱动选择了5.x版本。
这里,我们直接使用项目中maven仓库中对应的依赖即可,例如:
这里以8.0.25为例。
2.2 测试过程压力测试数据库执行的SQL的TPS,0.72k
1) 配置数据库驱动jmeter下载地址:官网地址
下载,直接解压即可使用。这里以5.2.1版本为例。
2) 配置线程组
3) 配置JDBC 连接池
添加JDBC Connection Configuration(JDBC连接池也有人叫连接组)
需要设置jdbc线程池名称,这个变量在JDBC request中要使用的;还有要设置Database URL,格式为:
jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC&characterEncoding=utf-8
注意:
?后面的serverTimezone=UTC&characterEncoding=utf-8不能缺少,否则会报时区错误。 在配置的时候,jmeter如果报1045-Access denied for user 'root'@'localhost'(using password: YES)这类错误,请重置访问用户的密码,以及给与该用户权限。
注意:
4) 添加JDBC 请求
- 一个测试计划,每个线程组中,可以配置多个连接池。不同连接池使用名称唯一标识符区分。
右键点击“线程组[Mysql]”,再添加一个采样器:JDBC request,在jmeter中request可以编辑select和insert等不同的采样器类别。即通过不同的类别添加配置我们需要的对mysql不同的操作。比如
5) 添加结果监听器
- prepared select statement 带参数拼接查询
- select statement 查询
6) 查看测试结果
- 聚合报告
- 查看结果树
- 活动线程数Active Threads Over Time
- 每秒事务数TPS
- 平均响应时间RT
- 服务端:内存、网络、CPU、磁盘io、网络io【单位mb】
测试结论:连接数为 1 ,数据库7.2k 的TPS
好了,以上就是我个人的实操了。
个人理解,可能也不够全面,班门弄斧了。
好了,今天就先到这里了!!!^_^
后面的分享,就留在下次了,掰掰。
作者:llsydn链接:https://juejin.cn/post/7125034745389383687
,