00:00
好,同学们,关于索引和数据库调优啊,咱们就进入最后一个小的章节了啊,我们看一下这个第12章叫数据库调优的,呃,其他策略,那我们在前面的话呢,其实已经讲到过,关于这个表设计方面的,比如范式啊,ER模型啊,也讲到了,关于SQ的优化啊,关于查询的优化,关于索引优化,对吧?那么除此之外的话呢,我们还有哪些其他的可以调的位置呢?诶,我们在这一章当中呢,整体做一个补充啊,或者说呢,这一章呢,也算是一个统领性的,我们整体上呢,做一个梳理和总结,然后呢,欠缺的呢,我们给它加上。好来我们看一看,那首先呢,提到这个调的话呢,我们要明确一下调的目标是什么,对吧?那么简单来讲的话呢,其实就两个方向,第一个呢,叫吞吐量更大,哎,我们呢,通过节省系统的资源,然后呢,使得我们系统呢可以容纳更多的服务啊,使得这个吞吐量呢更大,然后再者的话呢,叫做响应速度更快。我们呢,通过合理的这个结构设计和这个参数的调整,使得呢,我们这个响应的速度呢,可以加快啊,这是这两个,然后另外的话呢,就提到了说减少系统的瓶颈啊,提高MYSQL数据库的整体的性能,那也涉及到了我们其他通过一些调参数啊,通过增加一些服务器的硬件的配置啊,我们去提升整体MYSQL服务器的性能,OK,主体上来讲的话呢,就是这样两个方向啊,大家这块呢关注一下,然后第二问题的话呢,就是我们该如何呢去定位咱们要调的问题,对吧?诶那我们提到呢,就是现在啊,咱们很难用说更快这个词儿去定义说数据库调优的目标,为什么呢?因为我们实际的场景啊是非常复杂的啊,你比如说我们在这个双11啊,618呀,这样的活动当中,我们更多啊,需要关注的就是大规模的并发访问是吧,带来的我们这个访问延迟的问题,对吧?那还有的用户呢,在不同的业务操作的时候呢,他需要面对的就是事误处理啊,次后查询呀等等,随着他业务的不同呢,诶他这块呢,遇到的问题呢也不一样。
01:54
啊,那为了我们更加精准的去定位问题,那首先呢,我们得明确一下从哪些方向呢去找问题,对吧?诶,你要调优,你怎么去发现你的问题,然后去调优啊,哎,这儿呢,我们罗列了几个,呃思路啊,第一个也是最直接的一个方式就是用户的反馈。
02:11
因为用户的话呢,是我们要服务的对象是吧,他们直接反馈给我们说遇到什么问题,通常呢,他不会是造假的对吧?诶而且他这个问题呢,也是最直接的,那虽然说他提不出技术的建议,但是他对这个呃问题这种场景描述呢,应该还是比较呃真切的啊OK,那这儿呢,我们是要接收的诶或者说最看重的一个方向之一,那么第二的话呢,就是关于日志的分析,那我们去查看数据库日志啊,操作系统日志等等,通过日志呢去找到异常的呃问题出现在哪儿,然后我们呢去呃进一步的去调优啊,然后接下来的话呢,还有相关的一些这个监控工具了啊,通过服务器的,比如说监控CPU啊,内存IO啊使用情况的啊等等这样一些工具,我们去做一个分析查看,还有呢,就是数据库内部的状况的监控啊,针对于活动会话的监控啊等等。啊,还有其他的关于事物啊,所等待啊,这样的一些监控行为,OK,诶下边呢,属于一些辅助的,那主要的话呢,我们是发现问题的话呢,是通过前面这两个呃,这个措施啊来发现。
03:09
好,那么具体的话呢,我们涉及到调优,调优的这个维度和步骤,诶应该是什么样子呢?呃,这儿呢,就是我们整体呢,相较于前面几个章节来讲,我们做一个整体上的一个梳理啊,然后大家呢,来看一看,有一个宏观的一个认识啊,也是我们所谓的调优的话呢,前面我们讲过啊,说这个索引上的一些调优,然后呢,色Q这个语句上的一些调优等等,那就是我们具体一些调优的措施,那现在呢,我们要把整个的高度的拉升啊,然后调优的话呢,从宏观上来讲,我们遵循什么样的一个步骤呢?诶这块呢,首先我们提到了啊,我们呢,要选择一个合适的叫数据库管理系统。因为我们具体呢,你说调优针对的比如说是表,那你得先看你表到底是放在哪一个数据管理系统当中,对吧,因为不同的数据管理系统啊,它的调优啊,其实还是有一些区别的啊,所以这块呢,首先第一个我们要定位的就是合适的啊数据管理系统。
04:02
啊,那如果说呢,对事务性要求处理,诶对事务性的处理和安全性要求比较高的话呢,那推荐呢,你去选择这种商用的这个数据库啊,就需要花钱的了,比如server啊,比如Oracle啊等等,对吧,像单表呢,存储上一条数据呢,都是没有问题的。当然了,并不是说我们MYSO呢存储不了上一条数据,只不过呢,就是存储上一条数据以后呢,它的这个优化呀,等等,它可能不如Oracle呢,要更好一些啊OK,这是我们提到这个点。然后的话呢,说如果呢,我们选择这个开源的MYL进行存储的话呢,那这时候我们在存储表的时候呢,你也要具体用的是什么样的存储引擎啊,因为呢,我们说像in DB啊,哎,它是支持这个事物的是吧,它是支持航锁的哎,它是支持外建的啊等等,它跟我们这个MYS呢,它是有区别的啊OK,然后再者的话呢,我们还可以呢去选择这种啊no circle型的这个数据库啊,咱们在讲上篇的第一章的时候呢,就提到过啊,像这种简值型的呀,文档型的呀,搜索引擎型的呀,列势存储啊,图形数据库啊等等啊具体这块展开的有哪些数据库我就不说了,咱们上边呢都提到过,对吧,根据适呃适合的这种场景,我们去选择呢,诶,最适合的数据库管理系统。
05:12
啊,这个呢,是咱们整个设计的是不是第一步啊,啊,你没有这一步的话呢,后边的优化呢,其实都谈不上对吧?诶这是我们的第一个环节啊,那么第二个环节的话呢,就是优化我们表的一个设计。那么优化表的设计呢,其实我们在上一章当中,实际上重点讲的是不是它呀啊,一般情况下呢,我们说要求表结构在设计的时候呢,要遵循第三范式啊,或者呢,再好一点呢,遵循这个八四范式啊,一般呢第四范式,第五范式我们就不用考虑了啊,这个面试的时候呢,一般也没有人去问你第四范式和第五范式啊,如果呢,面试官问你了,那你可以直接回答他,你说我不是很清楚。啊,就完事是吧,这个比较无聊啊,一个问题行,那么呃,下边呢,又提到了说我们这个反范式化对吧,那反范式化的话呢,我们相当于在表当中加入了一些冗余的字段啊,实现了就是拿空间呢去换时间,对吧,提高我们查询的一个效率啊主要呢,是避免了是不是进行这个多表查询是吧?OK,那这是一个,然后在下边的话呢,就是进行我们这个表字段的一个数据类型的一个选择,这个呢,咱们在讲到这个上篇啊,咱们在讲这个上篇提到这个数据类型精讲的时候呢,其实在我们讲完具体的这个数据类型之后。
06:20
啊,我这块呢,是不是也做了一个总结啊,总结一下我们到底应该选择哪些,呃,这个呃,常见的数据类型啊,从这个优化的角度呢,去提了提,那我们这块呢,相当于还会给大家再去讲一讲啊,我们关于数据类型的一个优化的问题,OK啊,这是这个事儿行,那这个表结构的设计的话呢,其实是呃,基于我们这个数据库管理系统选择好以后啊,这块呢,也算是比较重要的一个项啊,一个比较重要的项,尤其呢,是当我们这个表中的数据量比较大的时候呢,啊,你想想你要是选择这个数据类型不合适的话呢,占用的存储空间可能就会比较大一些。啊,这个大家要注意一下好,然后在下边的话呢,就是优化我们整个的叫逻辑的查询啊,前面呢,我们提到说这个查询的话呢,可以分成叫逻辑查询的优化,还有我们叫物理查询的优化,对吧?那么逻辑查询优化呢,呃,主要呢,就是指的我们对这个circle呢进行一个重写啊,比如说你原来是一个子查询的一个方式,我们呢,优化以后呢,改写成是一个多表查询的方式了,对吧?啊还有呢,像等价位词重写,试图的重写,条件的简化,连接的消除,嵌套连接消除等等这样的一些措施呢,我们目的呢,就是对这个circle呢进行重写。
07:28
啊,类似于呢,大家呢,就写这种算法问题的时候呢,诶好的算法跟不好的算法,诶这个作用是一样的,但是性能呢差别很大啊这个呢,就类似于这个算法层面的一个优化是一样的啊前面呢,我们提到这个exist跟那个in的时候呢,是不是也提到过这个小表驱动代表这样一个问题,对吧?诶OK,诶这块呢,又提到了一个,就是我们这个where呢,是这样写的啊这个呢,WHERE2是这样写的啊很显然的话呢,我们上边这种写法呢,是不是就使用不上索引啊,因为呢,你出现函数了对吧?呃,下边这个就能使用上索引。啊,那这个呢,就是我们属于这个呃,语法上的这样的一个优化啊,然后下一步优化的话,就提到我们这叫物理的一个查询的优化了啊这个优化呢,主要的就是我们正确的去使用索引,对吧?诶正确的是使用这个索引。
08:11
啊,这个部分呢,也是我们需要掌握的一个重点啊,咱们前面呢,是不是花了挺多的篇幅呢,其实都在讲关于索引的一个正确使用上。没问题是吧,OK啊行,那具体这个细节的话呢,我们就不用多在这儿去给大家这个啰嗦了,这是我们考虑的是叫诶第三个步骤和第四个步骤啊,前面呢234咱们在前面呢,花了挺多的篇幅呢去讲的,然后呢,第五个步骤呢,我们说考虑啊,从这个业务层面上去讲,我们可以考虑呢,是用啊我慢慢catch的来作为我们这个缓存呢去出现。啊,作为缓存使用,那如果呢,大家在实际开发当中啊,你做过相关的业务的话呢,那么red member catch的多少呢,应该都使用过啊,对吧?那比如说在我们这个电商的这个项目当中,咱们可以考虑是不是在购物车当中啊,使用red加这种分布式集合的方式啊去体现啊包括呢,我们还可以呢,在这个呃,商品详情页面当中,我们在使用这个red做这个缓存没问题是吧?那么这个red跟这个memory它们的区别是什么呢?啊区别呢,就是提到了像red呢,首先呢,它是支持这个持久化的。
09:13
啊,就我们可以考虑把这个数据呢,诶存储在这硬盘上啊,也可以考虑,诶我们放在这个内存层面,而这memory catch的话呢,它只是呃能够放在这个内存层面的,其次的话呢,关于这个数据类型的一个支持啊的话呢,就是k value类型的话呢,除此之外还可以去支持像list呀呀哈西呀是吧等等这样的这种数据结构。啊,这样的数据结构啊,OK,行,那这里面提到了,对于说响应呃,速度要求比较高的这种场景,那我们就要考虑呢,内存级别的数据库了,啊就是这样个意思。好,然后再往下的话呢,我们就提到了一个叫库级的一个优化啊,说我们针对针对这种单机上的SQ优化呀,表的这个,呃,设计啊已经是做到极限了啊,那对于我们这种高并化的场景过来以后怎么办呢?诶我们就从库级呢进行一个优化,我们可以考虑呢,是不是单一的库搞搞不定了啊,我们可以考虑是不是多个服务器的方式,对吧?诶这呢就提到这种主层架构的这种方式,诶后边呢,我们专门呢也会去展开来讲一下我们整个这个数据库的这种,诶在这儿啊呃在后边啊,数据库的这种架构的这种方式,OK啊,就先做一个泛泛的一个讲解啊啊这里边呢,就提到了这种叫读写分离啊,读写分离呢,首先呢,我们先是主从先做一个复制对吧,主从复制啊,主机的话呢,主要来负责写请求,这个这个从机的话呢,主要来负责这个读请求,然后呢这个诶主机上呢,这块我们通过相应的这个并logg日志,然后呢同步给我们的这个S类五这个从击,然后呢实现这个主从复制以后呢,然后读写呢实现一个分离啊相当呢就是分散我们。
10:46
这个主机的这个压力了啊,这样啊,然后呢,我们还可以呢,开启这个双主双存的模式啊,就会考虑到说万一我们这个主机挂掉怎么办呢?啊,这时候我们还可以有一个备份机,一个备机是吧?哎,这样的一个方式啊OK。啊,后边呢,我们还会展开来讲,还有呢,我们提到了叫数据分片的一种方式,那我们可以针对于数据库当中的这表啊,如果这个表特别多的话呢,我们是不是还可以叫分库分表,对吧?然后呢,把这个库呢,我们分成啊,有些库呢放在这台主机上,有些库呢放在这台主机上。
11:15
啊啊不,有些库有些表是吧?放在这台主机上,有些表呢,放在这台主机上啊,这个呢,我们最好呢,是不是按照这个诶功能模块来进行划分最好一些,对吧?OK,那划分完以后呢,呃,这个呢,你访问不同的功能模块呢,我们就使用不同的这个主机就可以了,分散这个主机的压力,那另外的话呢,针对这个表,如果呢,这个数据量达到千万级别的话呢,我们还可以呢,对这个表呢进行一个分,这个分离是吧?这个分的话呢,也有这种垂直分表,还有水平分表之说。啊,垂直分表的话呢,你可以把这个数据呢,分成热数据和冷数据对吧?诶常用的呢,我们叫热数据呢,诶分到一块,诶不常用的叫冷数据分到另外一个表当中啊这个呢,其实也能提升我们查询包括呢这个加载数据的一个速度,对吧?诶节省这个内存空间啊,然后呢,针对这种水平的这种分表的话呢,诶我们可以按照这种比如说取模的方式啊,按照这种范围的约定的方式啊,按照这种日期的方式啊,我们进行水平的分表,哎,把它们放在,哎首先呢,你不是放分完以后呢,是不能放在一台主机上啊。
12:12
你放在一台主机没有意义了,那你还是这一台主机压力很大,我们是不是就可以分散到不同的主机上了,对吧?诶分散我们这个主机的压力,OK,这个呢,整体上体现呢,都是我们叫库级的一个优化。好,那么整体上来讲的话呢,咱们关于这个优化的一个步骤和策略呢,就是刚才我讲的这样的123456啊,那么大家呢,应该有一个宏观上的一个认识啊,那么针对于咱们前面讲解的话呢,应该是不是234这块啊,都提到了对吧?那么后边的话呢,我们就针对于啊,咱们没有讲的这个234这个步骤之外的一些优化,咱们进行一个讲解。好,那么接下来的话呢,我们看一看关于MYSQL服务器的一个优化啊,这儿呢,实际上就对应着咱们讲的这个调的步骤里边的第一步啊第一步,那么关于MYSQL服务器的优化的话呢,我们从两个方面来讲,第一个呢,就是对硬件呢进行优化啊,第二点的话呢,就是对MYSQL服务的这个参数呢来进行这个优化。
13:05
啊,那么我们举举前几天的一个例子啊,像这个呃,雷军这个前两天刚发布的这个小米12是吧,在发布小米12之前呢,本身呢,这个呃雷军都已经说了啊说这个小米12呢,是全球这个最先使用高通最先进的CPU啊现在叫首发了,结果呢,刚说完这个首发呢,这个猫呢就抢先了,诶猫to给先发了啊先用了,那这时候呢,就没办法说首发了,那怎么办呢?那就相当于你没有办法去凸显第一个优势了,那这时候就开始凸显第二优势,说小米呢,12是对这个,诶高通呢,这个最先进的这个CPU呢,诶最先进调教的是吧,调教的是最好的,哎主要呢,就想突出这个第二个这个特征啊,就这样子的啊,那么不管呢,是这个硬件的优化来讲,还是这个,呃,关于服务这个参数的条来讲啊,都需要这个专业的数据库管理员呢,才能进行这个优化啊,你如果呢,只是看到我们这里边几个参数,知道它的功能,没有一些相应的经验在里边的话呢,这个不要随意的进行这个调优啊,这个大家要注意一下。
14:01
好,那么首先的话呢,我们来看一下关于这个硬件层面的一个调优啊,这块提到说服务器的硬件的性能直接决定了MYSQL数据库服务器的性能,这个是不是毫无疑问啊啊,我们讲叫巧妇难为无米之炊啊,你再会做饭,那食材呢,不足,食材不够,那你也很难做出一道这个丰盛的是吧,美味的这个美食来。啊,这个呢,就是这样个影响啊,或者再换句话说呢,啊,比如说这呢是一个这个啊,咱说叫一个富二代家的家庭嘛,是吧?呃,这个呢,是一个特别普通的一个工薪家庭啊,这个相当于家底呢,是不是就不一样啊,那对应的就相当于我们这个硬件水平就不一样,对吧?那么呢,诶我们追求的叫什么呀,生活质量啊这个呃,家里边有钱,这个生活质量就一定高吗?那其实也不一定,但是呢,至少说呢,他要有钱的话呢,是不是?呃,应该是有可能这个生活质量是会更高一些的,你要普通的这个工薪家族的话呢,你是不是要这个精打细算啊,才能够让你这个生活质量会更高一些,该买的买,不该买的是不要买,是吧?啊那这个呢,不该买的该买的都买了啊,生活质量看着就高一点似的啊啊就硬件的话呢,哎,就就类似于是这样一个家庭一样啊。
15:06
啊啊,那么硬件呢,当然你要是上面这个服务器参数呢,你给他一顿啊乱配,那也也会这个性能会差一些,这呢相当于是个底儿对吧?诶这样的情况啊,那我们从几个维度上呢,去对这个硬件呢,进行这个调优呢?啊,提高这个性能呢,首先第一个叫配置较大的内存啊,毫无疑问啊,这个一说大家都应该能明白啊,那么内存大的话呢,我们可以设置系统的这个缓冲区的容量呢,是不是就会更大一些,那缓冲区的容量大的话呢,我们是不是就能够让这个数据在内存中呢,停留,停留更多的时间,对吧,那这时候呢,我们就能够减少磁盘的一个IO嘛。对吧,那这个呢,就能明显的提升我们的这个数据查询的性能啊,那么第二点的话呢,叫配置高速的磁盘系统啊,这呢就提到我们这个磁盘呢,使用的这种格式啊,如果呢,你是用的啊,咱们对于服务器来讲呢,常见的一种格式呢,就SESI这种格式,这种格式的话呢,它支持的是7200转每分钟。啊,那一旦我们这个网站呢,如果说这个PV上去了啊,在150万的话呢,这时候一般的配置呢,就很难满足要求了。
16:06
那怎么办呢?诶如果呢,你要是考虑使用这个ssid啊,这种固态的方式,它呢实现这个随机访问和我们这个顺序访问呢,几乎性能是一样的啊能够诶很这个这个相当于大大的能够减少我们这叫随机IO了,对吧?哎这样的一种情况啊,那其实包括我们这个用户的普通用户的这个电脑也是一样啊,像以前呢,我就不太懂啊,我想呢,大部分很多这个同学呢,在最初的时候呢,也是一个这个小白是吧,买电脑的时候呢,比如说第一台电脑啊,特别爱惜,用了好几年,结果最后发现呢,这个性能实在是太差了。啊,这个时候呢,你会想说,诶就会我们有个直观啊,就觉得自己电脑差的主要就是CPU不行了啊,从这个角度上来讲的话呢,这个呃,英特尔的这个广告做的确实很到位啊,结果呢,发现什么呢,就是我换了一台笔记本之后呢,我开机速度并没有明显的得到提升啊,原来呢需要三分钟,以为呢,买了个新电脑之后呢,就变成一分钟了,结果发现呢,还是两分多钟啊,总觉得这个钱呢花冤枉了。
17:00
然后后来呢,懂了以后呢,才发现啊,如果大家电脑慢的时候呢,其实你优先的配一块固态硬盘,它对于你开机和运行相关软件的这个速度的提升,它是要远高于你只换一块CPU的。对吧,哎,这个大家应该懂的人呢,自然懂啊,然后下边呢,就是说合理的去分布磁盘的IO。那我把这个磁盘呢,分配到多个设备上呢啊,减少这个资源的竞争啊,提高这种并发的能力啊,这一个再呢就是配备啊这个多处理器啊,那这时候呢,我们可以多线程的方式啊,你多处理器的话呢,是不是更好的去执行我们多个线程是吧?诶这个呢,就我们对这个硬件层面的这样的一个分析啊,比较简单,然后接下来的话呢,我们重点呢,想看一看优化MYSQL这个参数,这个参数的话呢,我下边罗列出来了很多啊,我们呢一个一个来看一看,主要呢,把这个参数呢,我们都配置在叫me.CF和me.ii这个文件中啊,这个大家应该都清楚啊啊配置好以后的话呢,我们再重写MYL服务啊,这个时候我们再重新加载,呃,主要呢,我们就放在这个MYSD啊,这个服务的这个组当中了啊。
18:01
好,下面呢,我们罗列了一些常见的这些可以配置的一些参数啊,首当其冲的叫d buff啊,这个我们必须要先讲它这个呢,就是我们所谓的缓冲的这个大小对吧?诶,那我们这个表数据啊,还有这个所有的这个数据啊,咱们都是可以放在这个缓冲区当中的,这个值越大的话呢,那显然啊,是不是我们就能够降低这个IO的这个哎频率了,对吧?哎,我们这个数据呢,就可以在缓冲区中待的时间就会长一些。当然了,我们下边讲的这个参数啊,肯定都是呃,有一定的限度的啊,你一定不是说越大越好,因为你越大的话呢,是不是就挤占其他资源占用的这个空间对吧?诶所以这种呢,像这种话呢,我们就不用多去讲了啊,然后下边的呢,叫keep size叫所引呢缓冲区的大小,哎,所以缓冲区呢,是被我们所有的线程呢所共享的啊,那这个只要大一点的话呢,诶相当于我们这块呢,是不是就可以得到更好的一个呃处理的这个索引了啊所以呢,就可以在这里边多放一些是吧,OK啊。嗯,然后的话呢,对于4GB啊大小的这个内存来讲,我们设置成256呢,或者384呢,哎就较好一些。
19:06
下面呢叫做tablecache啊,Tablecache呢表示同时可以打开这个表的一个个数啊,那这个值越大的话呢,表示我们同时打开的这个表的个数呢就越多啊,那物理内存越大啊,设置呢就会越大一些啊默认的情况怎么怎么样的是吧?OK啊这种话呢,我就不用多说了啊好,下面呢叫query catch size啊查询缓存的大小啊这个参数呢,我们前面是不是讲过了。啊,它配合呢是query cash tap呢,是不是综合来使用,它其实对应的就是我们前面讲的这个,诶查询缓存啊,是不是我们提到这个逻辑架构的时候呢,提到的啊来我们打开课件讲这个逻辑架构的时候呢,我们提到了这个,诶执行过程当中呢,有这个查询缓存啊说的就是它,那么这个查询缓存当中呢,我们首先呢,你要设置这个query是吧?哎,保证了你能使用,然后能使用的前提下呢,我们再去设置这个RY size的这个大小。啊,然后里边呢,我们还能有相关的这个参数啊,还记得这个参数我们当时怎么讲的吗。
20:02
啊,你比如说呢,我们要看到啊,这个参数呢,如果比较大的话呢,相对于呢,就是我们占用的这个缓存呢,就比较多了啊,如果这个参数呢,值比较大,你就适当的需要去调整我们快车开size这个大小啊,如果说我们这个case呢,这个值呢比较大,那相当于就是我们每次呢查询的时候呢,命中这个查询缓存呢,就是比较频繁一些啊这是一个好事,对吧,这是个好事,那如果我们看到这个blocks啊,这种比较大的话呢,相当于我们这个碎片呢,就会比较多一些,对吧?诶这个大家注意一下啊,这个前面呢我们都提到过了,行,我们这块呢再拉回来。那么这个呢,就是主要呢,就是设置咱们这个查询缓冲区的这个大小的啊,这个大小的行,那么在这个ma58.0的时候呢,是不是就失效了,诶我们在5.7啊及之前才会去使用啊,然后这里边要注意一个就是我们首先呢,你要确定我们这qua catch type呢,是不是你得开启啊,那么在开启的时候呢,你才能够去,诶从这里边去查是吧,你没开启诶没开启的话呢,大家要注意啊,如果我们这个值设置是零的话呢,注意我们仍然会啊,比如你在5.7当中,虽然你这个值是零,但是仍然会去占用我们这个缓插用缓冲区,比如你这块设置的一个大小,它仍然会去占用这个空间的大小。
21:10
啊,虽然说你不用是吧,他这个意思。好,那关于这个,呃,色空中catch啊,So catch啊,这个咱们前面也都讲过了啊,在circle中去使用的,我们就不多说了。下边这个呢叫t buffer size就是对啊,需要啊进行排序的线程分配的这个缓冲区的一个大小。啊,它呢是针对我们叫auTo By和group by呢啊起作用的啊,如果说我们这样的这个操作的话呢,比较多啊,这个你可以去调整我们这样的一个参数的一个大小空间,OK啊,然后下边这叫join buff size,一看呢,就是针对这个join来测来这个设置的是吧?来起这个作用的啊OK,下面呢叫read buffer size,说每一个线程连续扫描时,为扫描的每个表分配的这个缓冲圈的大小啊如果呢,我们要从表中连续的去读取距率的时候呢,我们就要用到这样一个呃大小了。哎,可以去设置它啊,然后在下边这个啊,这个呢,其实倒是挺重要的一个参数,咱们在后边讲到事物的日志的时候呢,还会再去讲它啊叫in b flash transaction commit啊这个值的话呢,可以设置成零,一和二啊。
22:10
嗯,简单的先说一下啊,它影响的就是我们这个将缓冲机的数据呢,写入日志的文件的这种,呃,时机吧。如果呢,值日零的时候呢,就每秒呢,把这个数据呢写到日志文件一次叭,如这个read log是吧?然后呢,这个诶将日志文件呢,再同样的给它写入到这个磁盘中,这是刷盘的一个操作啊,职位一的时候呢,说每次提交事务的时候呢,我们再去写到文件里边,然后呢,同时把这个文件呢再同步到我们这个磁盘当中啊,这是每秒,这是每次提交事务,然后职位二的时候呢,是每次提交事务的时候呢,写到日文件,然后每秒钟呢去刷盘。啊,这个情况呢,就不太一样啊,不太一样行啊,这是我们先说这啊一会儿呢,有一个案例,咱们案例的时候呢,还会提到他。呃,下面呢,提到叫DB log buffer size啊,这个呢,我们叫日的一个buffer size啊,其实就我们日志文件所用的这个缓冲区啊,因为这块呢,提到了我们这个日志文件了,是用这个缓冲区啊。
23:02
这呢就涉及到这个缓冲器的一个大小的啊,然后下边这个呢,叫max connection啊,就是连接到MYSQL数据库的最大的一个数量。啊,那我们如果看到另外的一个变量啊,叫error,如果这个值呢,不为零,而且一直在增,那就意味着就我们这个最大已经了,哎,你有有必要呢,去增加我们这样的一个变量的一个值啊,在这个Linux平台下呢,性能比较好的服务器呢,我们支持500~1000个呢,其实是正常的没有问题的。OK啊。啊,连接数呢,也不是越大越好,那很自然的是吧,那越多的话呢,这个就有可能会导致我们MYSQ服务器呢僵死啊,因为资源呢是有限的啊下边这个呢叫backlog,它呢是用来控制监听TP口时啊的这个请求占的大小,那比如说我们这个呢,最大的我们设置成1000了啊,而且现在同时确实有1000,然后呢,如果你多来了一个啊,这个时候呢,你是不是得等待,那么等待的这个请求呢,我们就放在这个backlog这样的一个呃,对战当中了啊,你要来了十个呢,就都放在这儿,然后等待着你看哪些连接不用了,然后这时候呢,你再诶从这里边呢取出来一个,然后呢去分配这个连接资源。
24:07
啊,就这样子的啊,那如果说呢,我们要是有这种短期大量的这种连接呢,去访问,那适当呢,是不是就要调整这样的一个呃,值的大小,对吧?OK,然后下边呢,叫TH的catch size啊,就是缓冲池当中缓冲线程数量的大小啊这个大家一看就明白啊,讲过线程池啊,这个大家呢都清楚它的一个主要作用是什么啊,这个我就不用在这多啰嗦了,对吧?啊那我们说呢,如果呢,我们通过这样一个参数啊,你不断的去查看,发现什么呢?发现我们这个threads啊,这个catch的这个这样的话呢,越来越少了,就可用的越来越少,然后这个现在使用的这个呢,又持续下不来。然后呢,这个创建的这个个数呢,它又持续的升高啊,那就意味着我们现在这个线程池中的线程啊,就不够了。就不够了啊,怎么办呢?你就适当的提高它的这个大小啊就可以了啊,然后再下边这个叫wait timeout,哎,就是一个请求的最大的连接的时间啊,我们可以来进行一个设置。
25:01
啊,连接设置,然后下边呢,还有个interactive out,就是服务器呢,在关闭前呢,需要等待行动的一个述,OK啊像这些呢,都是还算这个小的参数啊,然后下边呢,给出了一个建议的一个呃,参数的一个列表,但是这块呢,注意也只是一个建议啊,因为呢,我们更多的情况呢,还是要具体问题啊,具体来分析的。那么讲了这么多参数,咱们下边的话呢,给大家举一个具体的案例啊,比如我们还是以这个电商平台为例啊,那么这个电商平台的话呢,我们涉及到有商家有这个客户对吧?商家呢,把这个呃商品的话呢,呃,这个放在这个平台上,然后客户的话呢,可以通过手机啊或者APP啊呃,然后进行这个下单购买对吧?然后呢,在刚刚上线的时候呢,发现整个系统的运行呢是比较良好的,那随着呢,入驻的商家的不断增多,用户量呢也不断增多,然后这个订单呢,呃,很快的就达到了这个,诶每天5万条以上。那这个时候呢,这个系统呢,就出现问题了啊,CPU呢使用率不断飙升啊,终于呢,在这个双11或者六八这样的一个活动的期间,CPU呢,呃,达到这个峰值了啊怎么办?我们需要来进行调优,那么从这个数据库层面呢,哎,这时候我们提到了三个参数的一个使用,第一的话呢,叫inno DB啊,Flash lock at transaction啊这样个参数,这个参数的话呢,它的值上面我们也提到了啊,有012是吧,默认呢,它这个值呢是一。
26:16
啊,默认这个值是一,然后呢,这个一的场景是什么意思,还有印象吗?就是我们每次呢,把这个呃事物在提交的时候呢,写入到日志,然后呢,呃紧接着就把个日志呢,就写到磁盘中了,啊你想这个呢,我们相当于这个提交的这个刷盘的频率呢,是很高的啊刷刷盘频率是很高的,那这个我们把它改成谁呢?我们改成是二。就是每次呢,我们提交事务的时候呢,把它写入日志文件,这个没问题,然后每隔一秒呢,我们把它呢,写入到这个磁盘中,呃,相当于降低呢刷盘的这个次数,那此时的话呢,是不是就降低我们CPU呢,这个执行的一个压力啊。对吧?哎,通过这个方式呢,我们去降低这个CPU的这个使用率啊,这个注意一下,然后呢,我们去调整这个系统参数叫DB buffer process,然后呢,把我们这个缓冲池,缓冲区呢,这个诶空间呢加大啊,这个值加大以后呢,我们就更容易的是不是使用这个缓冲区的这个索引和数据了啊,降低呢,我们这个磁盘的IO对吧?啊也是降低我们这个服务器的,呃,这个CPU的一个压力啊。
27:11
又建议我们这个麦服务器呢,是数据库专属服务器,就专门给我们数据库服务器来使用的啊,那这时候呢,你可以分配较大的这个值呢,作为我们这个,哎,缓冲区的这个大小啊OK。然后再下一个的话呢,去调整这个参数,叫印度DB buff铺的一个instance啊,上面我们没有讲这个参数,这个呢,就相当于可以把我们这个B铺啊分成诶多个部分,比如说我们改成64,改成64个分区以后呢,相当于我们就可以有多个进程啊同时来访问我们这个buff b铺了,相当于提升了我们这个系统的一个并发处理的能力。对吧?诶使得我们这个CPU的这个利用率呢,就会更高了,将来你同时呢,可以处理的业务呢,就会更多一些啊总体上来讲啊,就好比是大家生活当中啊,你比如说你比如我我吧,啊原来我去这个上班的时候啊,去咱们商务北京小区的时候呢,这个经常过那个叫文华路啊,那个文华路那块呢,确实经常堵啊,因为那个路呢很窄是吧?啊那怎么办呢?那就是疏通一下这个路段啊,消除这个瓶颈,然后呢,让我这个呢就不堵了,那我等待的时间会更短,那另外的一个思路的话呢,就是你在这个文化路呢,是不是可不考以考虑呢,在间隔它这个一两公里的位置呢,我们再修一条路啊,拓展新的通路呢,增加这种并行的能力,对吧?哎,这就我们解决问题的思路,那我们的第一个参数和第二参数呢,就相当于是这个解决这个问题的,然后第三个参数呢,是不是解决的就是这个问题啊。
28:29
OK啊行,那么这样的话呢,我们关于这个,呃,服务器这个层面硬件啊,还有我们这个参数层面呢,啊,就给大家介绍到这儿,里边这个参数呢比较多啊,大家呢,真实开发中你去用一用了,你才能够体会到它真实的这个用处,OK啊,这里边儿我们就只能是进行一个泛泛的一个介绍了。
我来说两句