一、数据访问概述
一个互联网应用,访问数据库的流程大致如下:
根据此流程,进行各个节点的优化
1 选用分布式缓存
如:redis、memcache
2 选用ORM框架
选用ORM框架,如mybatis、hibernate,开启ORM层缓存
3 分库分表中间件
合理配置分库分表中间件,比如合理设置分库分表键,比如对同一个用户的数据,最好落到同一个库里。尽量避免跨库跨表操作数据。
4 数据库连接池
使用数据库连接池,避免大量的创建连接、销毁连接的开销。如Druid
5 选用合适的存储引擎
6 SQL优化
2、MySQL性能调优
2.1 关键性指标
在数据库性能评测中,有几项指标很重要,用它来评估数据库的能力,不是他们能起着多么关键的作用,而是他们能够较为明确的代表数据库在某些方面的能力。
1.IOPS
IOPS:Input/Output operation Per Second, 每秒处理的IO请求次数。
我们知道I/O就是磁盘的读写能力,比如每秒读 300M,写 200M,这个即数据的吞吐量(I/O能力的另一个关键指标),但是 IOPS 指的可不是读写的数据吞吐量,IOPS 指的是每秒能够处理的 I/O 请求次数。
如果想I/O 系统响应够快,那么 IOPS 越高越好,因为IOPS 和硬件有关,所以,要提高IOPS,就目前来看基本只能拼硬件,传统方案是使用多块磁盘通过 RAID 条带后,使 I/O 读写能力获得提升,我们也可以使用固态硬盘SSD来提升IOPS,不过固态硬盘成本可能比较大。
2.QPS
QPS:Query Per Second,每秒请求(查询)次数。
这个参数非常重要,可以直观的反映系统的性能,这就像IOPS衡量磁盘每秒钟能接收多少次请求。
我们可以在MySQL命令行模式下执行 status 命令,返回的最后一行输出信息中就包含 QPS 指标。
3.TPS
TPS:Transaction Per Second,每秒事务数。
TPS参数MySQL原生没有提供,如果需要我们自己算,可以利用计算的公式:
TPS = (Com_commit + Com_rollback) / Seconds
这个公式有两个状态变量,分别代表提交次数和回滚次数,Seconds 就是我们定义的时间间隔。
2.2 数据库参数配置优化
如果数据库参数配置合理,则可以大大的提高运行效率,即最大化利用系统资源。
可以使用该命令查看MySQL的默认配置:
show global variables
show global variables like '%max_connections%'
2.2.1 连接相关参数
1.1 max_connections
max_connections:指定 MySQL 服务端最大并发连接数,值得范围从 1~10 万,默认值为151.
这个参数非常重要,因为它决定了同时最多能有多少个会话连接到 MySQL 服务。设定该参数时,根据数据库服务器的配置和性能,一般将参数值设置在 500~2000 都没太大的问题。
1.2 max_connect_errors
max_connect_errors:指定允许连接不成功的最大尝试次数,值得范围从 1~2^64 之间,在 5.6.6 版本默认值是 100。