掌握MySQL数据库这些优化技巧,事半功倍!

2023-06-04 0 512

掌握MySQL数据库这些优化技巧,事半功倍!

一个成形的资料库构架并并非一开始在结构上就具有高需用、高伸缩式等优点的,它是随着使用者数量的增加,基础构架才逐渐完善。这首诗主要就聊聊MySQL资料库在发展周期性中所面临的难题及强化方案,如若撇开后端应用不说,大致分成下列四个期:

期一:资料库表在结构上

工程项目初步设计后,合作开发职能部门根据商品职能部门需求合作开发工程项目。

合作开发技师在合作开发工程项目末期会对表结构在结构上。对于资料库来说,表结构在结构上很重要,假如在结构上失当,会直接影响到使用者出访中文网站速度,使用者新体验不好!这种情况具体内容影响因素有很多,例如慢查阅(低效率的查阅句子)、没有适度建立检索、资料库阻塞(锁)等。当然,有试验职能部门的项目组,会做商品试验,找Bug。

由于合作开发技师倚重点不同,末期不会考量太多资料库在结构上是否合理,而是尽早完成功能同时实现和交货。等工程项目上架有一定使用者数量后,暗藏的难题就会曝露,此时再去修正就并非这么容易的事了!

期二:资料库布署

是时候网络管理技师上场了,工程项目上架。

工程项目末期使用者数量一般是屈指可数,此期Web+资料库DF93布署不足以应付在1000以内的QPS(每秒钟查阅率)。考量到ECC,应努力做到可扩展性,可采用MySQL主从复制+Keepalived同时实现K817接口卡。非主流HA应用软件有:Keepalived(推荐)、Heartbeat。

期三:资料库操控性强化

假如将MySQL布署到普通的X86伺服器上,在不历经任何强化情况下,MySQL目标值正常可以处置1500以内QPS,历经强化后,有可能会提升到2000以内QPS。不然,使用者数量当达到1500以内mammalian相连时,资料库处置操控性可能积极响应就会慢,而且硬体资源还比较富足,此时就该考量操控性强化难题了。那么怎样能让资料库充分发挥最大操控性呢?主要就从硬体配置、资料库实用性、构架方面著手,具体内容分成下列:

3.1 硬体实用性

假如有条件一定要SSD固态硬盘代替SAS机械硬盘,将RAID级别调整为RAID1+0,相对于RAID1和RAID5有更好的读写操控性,毕竟数据库的压力主要就来自磁盘I/O方面。

Linux内核有一个优点,会从物理内存中划分出缓存区(系统缓存和数据缓存)来存放热数据,通过文件系统延迟写入机制,等满足条件时(如缓存区大小到达一定百分比或者执行sync命令)才会同步到磁盘。也就是说物理内存越大,分配缓存区越大,缓存数据越多。当然,伺服器故障会丢失一定的缓存数据。建议物理内存至少富足50%以上。

3.2 资料库实用性强化

MySQL应用最广泛的有两种存储引擎:一个是MyISAM,不支持事务处置,读操控性处置快,表级别锁。另一个是InnoDB,支持事务处置(ACID属性),在结构上目标是为大数据处置,行级别锁。

表锁:开销小,锁定粒度大,发生死锁概率高,相对并发也低。

行锁:开销大,锁定粒度小,发生死锁概率低,相对mammalian也高。

为什么会出现表锁和行锁呢?主要就为保证数据完整性。举个例子,一个使用者在操作一张表,其他使用者也想操作这张表,那么就要等第一个使用者操作完,其他使用者才能操作,表锁和行锁就是这个作用。不然多个使用者同时操作一张表,肯定会数据产生冲突或者异常。

根据这些方面看,使用InnoDB存储引擎是最好的选择,也是MySQL5.5+版本默认存储引擎。每个存储引擎相关运行参数比较多,下列列出可能影响资料库操控性的参数。

公共参数默认值:

掌握MySQL数据库这些优化技巧,事半功倍!

MyISAM参数默认值:

掌握MySQL数据库这些优化技巧,事半功倍!

InnoDB参数默认值:

掌握MySQL数据库这些优化技巧,事半功倍!

3.3 系统内核参数强化

大多数MySQL都布署在linux系统上,所以操作系统的一些参数也会影响到MySQL操控性,下列对Linux内核参数进行适度强化

掌握MySQL数据库这些优化技巧,事半功倍!

期四:资料库构架扩展

随着业务量越来越大,DF93资料库伺服器操控性已无法满足业务需求,该考量增加伺服器扩展构架了。主要就思想是分解DF93数据库负载,突破磁盘I/O操控性,热数据存放缓存中,降低磁盘I/O出访频率。

4.1 增加缓存

给资料库增加缓存系统,把热数据缓存到内存中,假如缓存中有请求的数据就不再去请求MySQL,减少资料库负载。缓存同时实现有本地缓存和分布式缓存,本地缓存是将数据缓存到本地伺服器内存中或者文件中。分布式缓存可以缓存海量数据,扩展性好,非主流的分布式缓存系统:memcached、redis,memcached操控性稳定,数据缓存在内存中,速度很快,QPS理论可达8w以内。假如想数据持久化就选择用redis,操控性不低于memcached。

工作过程:

掌握MySQL数据库这些优化技巧,事半功倍!

4.2 主从复制与读写分离

在生产环境中,业务系统通常读多写少,可布署一主多从架构,主资料库负责写操作,并做K817接口卡,多台从资料库做负载均衡,负责读操作。非主流的负载均衡器:LVS、HAProxy、Nginx。

怎么来同时实现读写分离呢?大多数企业是在代码层面同时实现读写分离,效率高。另一个种方式通过代理程序同时实现读写分离,企业中应用较少,会增加中间件消耗。非主流中间件代理系统有MyCat、Atlas等。

在这种MySQL主从复制拓扑构架中,分散DF93负载,大大提高资料库mammalian能力。假如一台从服务器能处置1500 QPS,那么3台就能处置4500 QPS,而且容易横向扩展。

有时,面对大量写操作的应用时,DF93写操控性达不到业务需求。就可以做双向复制(双主),但有个难题得注意:两台主伺服器假如都对外提供读写操作,就可能遇到数据不一致现象,产生这个原因是程序有同时操作两台资料库几率,同时的更新操作会造成两台资料库数据发生冲突或者不一致。

可设置每个表ID字段自增唯一:auto_increment_increment和auto_increment_offset,也可以写算法生成随机唯一。

官方近两年推出的MGR(多主复制)集群也可以考量下。

4.3 分库

分库是根据业务将资料库中相关的表分离到不同的数据库中,例如web、bbs、blog等库。假如业务量很大,还可将分离后的资料库做主从复制构架,进一步避免单库压力过大。

4.4 分表

数据量的日剧增加,资料库中某个表有几百万条数据,导致查阅和插入耗时太长,怎么能解决单表压力呢?你应该考量把这个表拆分成多个小表,来减轻单个表的压力,提高处置效率,此方式称为分表。

分表技术比较麻烦,要修正程序代码里的SQL句子,还要手动去创建其他表,也可以用merge存储引擎同时实现分表,相对简单许多。分表后,程序是对一个总表进行操作,这个总表不存放数据,只有一些分表的关系,以及更新数据的方式,总表会根据不同的查阅,将压力分到不同的小表上,因此提高mammalian能力和磁盘I/O操控性。

分表分成垂直拆分和水平拆分:

垂直拆分:把原来的一个很多字段的表拆分多个表,解决表的宽度难题。你可以把不常用的字段单独放到一个表中,也可以把大字段独立放一个表中,或者把关联密切的字段放一个表中。

水平拆分:把原来一个表拆分成多个表,每个表的结构都一样,解决单表数据量大的难题。

4.5 分区

分区就是把一张表的数据根据表结构中的字段(如range、list、hash等)分成多个区块,这些区块可以在一个磁盘上,也可以在不同的磁盘上,分区后,表面上还是一张表,但数据散列在多个位置,这样一来,多块硬盘同时处置不同的请求,从而提高磁盘I/O读写操控性。

注:增加缓存、分库、分表和分区主要就由程序猿或DBA来同时实现。

期五:资料库维护

资料库维护是资料库技师或网络管理技师的工作,包括系统监控、操控性分析、操控性调优、资料库备份和恢复等主要就工作。

5.1 操控性状态关键指标

掌握MySQL数据库这些优化技巧,事半功倍!

5.2 开启慢查阅日志

MySQL开启慢查阅日志,分析出哪条SQL句子比较慢,支持动态开启:

掌握MySQL数据库这些优化技巧,事半功倍!

5.3 资料库备份

备份资料库是最基本的工作,也是最重要的,不然后果很严重,你懂得!高频率的备份策略,选用一个稳定快速的工具至关重要。资料库大小在2G以内,建议使用官方的逻辑备份工具mysqldump。超过2G以上,建议使用percona公司的物理备份工具xtrabackup,不然慢的跟蜗牛似得。这两个工具都支持InnoDB存储引擎下接口卡,不影响业务读写操作。

5.4 资料库修复

有时候MySQL伺服器突然断电、异常关闭,会导致表损坏,无法读取表数据。此时就可以用到MySQL自带的两个工具进行修复,myisamchk和mysqlcheck。前者只能修复MyISAM表,并且停止资料库,后者MyISAM和InnoDB都可以,在线修复。

注意:修复前最好先备份资料库。

掌握MySQL数据库这些优化技巧,事半功倍!

5.5 MySQL伺服器操控性分析

掌握MySQL数据库这些优化技巧,事半功倍!

id:CPU利用率百分比,平均小于60%正常,但已经比较繁忙了。

wa:CPU等待磁盘IO积极响应时间,一般大于5说明磁盘读写量大。

掌握MySQL数据库这些优化技巧,事半功倍!KB_read/s、KB_wrtn/s 每秒钟读写数据量,主要就根据磁盘每秒钟最高读写速度评估。

掌握MySQL数据库这些优化技巧,事半功倍!

r/s、w/s:每秒钟读写请求次数,可以理解为IOPS(每秒钟输入输出量),是衡量磁盘操控性的主要就指标之一。

await:IO平均每秒钟积极响应时间,一般大于5说明磁盘积极响应慢,超过自身操控性。

util:磁盘利用率百分比,平均小于60%正常,但已经比较繁忙了。

小结

由于关系型资料库初衷在结构上限制,在大数据处置时会显得力不从心。因此NoSQL(非关系型资料库)火起来了,天生励志,具有分布式、高操控性、高可靠等优点,弥补了关系型资料库某方面先天性不足,非常适合存储非结构化数据。非主流NoSQL资料库有:MongoDB、HBase、Cassandra等。

单纯资料库层面强化效果提升并不多明显,主要就还是要根据业务场景选择合适的资料库!

本文首发:http://blog.51cto.com/lizhenliang/2095526

往期精彩内容回顾

从网络管理角度看中大型中文网站构架的演变之路

启示录:如何打造网络管理自动化平台

IT构架师绝对不能错过的34张史上最全技术知识图谱

《网络管理三十六计》:网络管理生存必备宝典【珍藏版】

高级网络管理技师的打怪升级之路

Linux免交互登录远程伺服器并执行命令

网络管理角度浅谈MySQL资料库强化

学习Python的 14 张思维导图

30岁了!,还在迷茫,我们该怎么办?

掌握MySQL数据库这些优化技巧,事半功倍!

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务