一、数据库调优的措施
1.1 调优的目标
- 尽可能节省系统资源 ,以便系统可以提供更大负荷的服务。(吞吐量更大)
- 合理的结构设计和参数调整,以提高用户操作响应的速度 。(响应速度更快)
- 减少系统的瓶颈,提高MySQL数据库整体的性能。
1.2 如何定位调优问题
随着用户量的不断增加,以及应用程序复杂度的提升,我们很难用 ‘更快’ 去定义数据库调优的目标,因为用户在不同时间段访问服务器的瓶颈不同。比如双十一促销的时候会带来大规模的并发访问,还有用户在进行不用业务操作的时候,数据库的 事务处理 和 sql查询 都会有所不同。因此我们还需要更加精细的定位,去确定调优的目标。
如何确定呢?一般情况下,有如下几种方式:
用户是我们的服务对象,因此他们的反馈是最直接的,虽然他们不会直接提出技术建议,但是有些问题往往是用户第一时间发现的,我们要重视用户的反馈,找到和数据相关的问题。
2、日志分析(主要)
3、服务器资源使用监控
4、数据库内部状况监控
5、其它
除了活动会话监控以外,我们也可以对 事务、锁等待等进行监控,这些都可以帮助我们对数据库的运行状态有更全面的认识。
1.3 调优的维度和步骤
我们需要调优的对象是整个数据库管理系统,它不仅包括 SQL 查询,还包括数据库的部署配置、架构 等。从这个角度来说,我们思考的维度就不仅仅局限在 SQL 优化上了。通过如下的步骤我们进行梳理:
第1步:选择适合的 DBMS
第2步:优化表设计
第3步:优化逻辑查询
第4步:优化物理查询
物理查询优化是在确定了逻辑查询优化之后,采用物理优化技术(比如索引等),通过计算代价模型对 各种可能的访问路径进行估算,从而找到执行方式中代价最小的作为执行计划。在这个部分中,我们需要掌握的重点是对索引的创建和使用。
第5步:使用 Redis 或 Memcached 作为缓存
除了可以对 SQL 本身进行优化以外,我们还可以请外援提升查询的效率。
因为数据都是存放到数据库中,我们需要从数据库层中取出数据放到内存中进行业务逻辑的操作,当用 户量增大的时候,如果频繁地进行数据查询,会消耗数据库的很多资源。如果我们将常用的数据直接放 到内存中,就会大幅提升查询的效率。
键值存储数据库可以帮我们解决这个问题。
常用的键值存储数据库有 Redis 和 Memcached,它们都可以将数据存放到内存中。
第6步:库级优化
二、优化Mysql服务器
2.1 优化服务器硬件
服务器的硬件性能直接决定着MySQL数据库的性能。硬件的性能瓶颈直接决定MySQL数据库的运行速度 和效率。针对性能瓶颈提高硬件配置,可以提高MySQL数据库查询、更新的速度。
(1) 配置较大的内存
。足够大的显存是提高MySQL数据库性能的方法之一。内存的速度比磁盘I/O快得多,可以通过增加系统的缓冲区容量
使数据在内存中停留的时间更长,以减少磁盘I/O
。
(2) 配置高速磁盘系统
,以减少读盘的等待时间,提高响应速度。磁盘的I/O能力,也就是它的寻道能力,目前的SCSI高速旋转的是7200转/分钟,这样的速度,一旦访问的用户量上去,磁盘的压力就会过大,如果是每天的网站pv (page view) 在150w,这样的一般的配置就无法满足这样的需求了。现在SSD盛行,在SSD上随机访问和顺序访问性能差不多,使用SSD可以减少随机IO带来的性能损耗。
(3) 合理分布磁盘I/O
,把磁盘I/O分散在多个设备,以减少资源竞争,提高冰箱操作能力。
(4) 配置多处理器
, MySQL是多线程的数据库,多处理器可同时执行多个线程。
2.2 优化MySQL的参数
-
innodb_buffer_pool_size :这个参数是Mysql数据库最重要的参数之一,表示InnoDB类型的 表 和索引的最大缓存 。它不仅仅缓存 索引