MySQL数据库性能优化之分区分表分库

MySQL数据库性能优化之分区分表分库,第1张

分表是分散数据压力的好方法。

分表,最直白的意思,就是将一个表结构分为多个表,然后,可以再同一个库里,也可以放到不同的库。

当然,首先要知道什么情况下,才需要分表。个人觉得单表记录条数达到百万到千万级别时就要使用分表了。

分表的分类

1、纵向分表

将本来可以在同一个表的内容,人为划分为多个表。(所谓的本来,是指按照关系型数据库的第三范式要求,是应该在同一个表的。)

分表理由:根据数据的活跃度进行分离,(因为不同活跃的数据,处理方式是不同的)

案例:

对于一个博客系统,文章标题,作者,分类,创建时间等,是变化频率慢,查询次数多,而且最好有很好的实时性的数据,我们把它叫做冷数据。而博客的浏览量,回复数等,类似的统计信息,或者别的变化频率比较高的数据,我们把它叫做活跃数据。所以,在进行数据库结构设计的时候,就应该考虑分表,首先是纵向分表的处理。

这样纵向分表后:

首先存储引擎的使用不同,冷数据使用MyIsam 可以有更好的查询数据。活跃数据,可以使用Innodb ,可以有更好的更新速度。

其次,对冷数据进行更多的从库配置,因为更多的 *** 作时查询,这样来加快查询速度。对热数据,可以相对有更多的主库的横向分表处理。

其实,对于一些特殊的活跃数据,也可以考虑使用memcache ,redis之类的缓存,等累计到一定量再去更新数据库。或者mongodb 一类的nosql 数据库,这里只是举例,就先不说这个。

2、横向分表

字面意思,就可以看出来,是把大的表结构,横向切割为同样结构的不同表,如,用户信息表,user_1,user_2等。表结构是完全一样,但是,根据某些特定的规则来划分的表,如根据用户ID来取模划分。

分表理由:根据数据量的规模来划分,保证单表的容量不会太大,从而来保证单表的查询等处理能力。

案例:同上面的例子,博客系统。当博客的量达到很大时候,就应该采取横向分割来降低每个单表的压力,来提升性能。例如博客的冷数据表,假如分为100个表,当同时有100万个用户在浏览时,如果是单表的话,会进行100万次请求,而现在分表后,就可能是每个表进行1万个数据的请求(因为,不可能绝对的平均,只是假设),这样压力就降低了很多很多。

延伸:为什么要分表和分区?

日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。

什么是分表?

分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,MYI索引文件,frm表结构文件。这些子表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的子表名,然后去 *** 作它。

什么是分区?

分区和分表相似,都是按照规则分解表。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,可以是同一块磁盘也可以在不同的机器。分区后,表面上还是一张表,但数据散列到多个位置了。app读写的时候 *** 作的还是大表名字,db自动去组织分区的数据。

MySQL分表和分区有什么联系呢?

1、都能提高mysql的性高,在高并发状态下都有一个良好的表现。

2、分表和分区不矛盾,可以相互配合的,对于那些大访问量,并且表数据比较多的表,我们可以采取分表和分区结合的方式(如果merge这种分表方式,不能和分区配合的话,可以用其他的分表试),访问量不大,但是表数据很多的表,我们可以采取分区的方式等。

3、分表技术是比较麻烦的,需要手动去创建子表,app服务端读写时候需要计算子表名。采用merge好一些,但也要创建子表和配置子表间的union关系。

4、表分区相对于分表, *** 作方便,不需要创建子表。

我们知道对于大型的互联网应用,数据库单表的数据量可能达到千万甚至上亿级别,同时面临这高并发的压力。Master-Slave结构只能对数据库的读能力进行扩展,写 *** 作还是集中在Master中,Master并不能无限制的挂接Slave库,如果需要对数据库的吞吐能力进行进一步的扩展,可以考虑采用分库分表的策略。

1、分表

在分表之前,首先要选中合适的分表策略(以哪个字典为分表字段,需要将数据分为多少张表),使数据能够均衡的分布在多张表中,并且不影响正常的查询。在企业级应用中,往往使用org_id(组织主键)做为分表字段,在互联网应用中往往是userid。在确定分表策略后,当数据进行存储及查询时,需要确定到哪张表里去查找数据,

数据存放的数据表 = 分表字段的内容 % 分表数量

2、分库

分表能够解决单表数据量过大带来的查询效率下降的问题,但是不能给数据库的并发访问带来质的提升,面对高并发的写访问,当Master无法承担高并发的写入请求时,不管如何扩展Slave服务器,都没有意义了。我们通过对数据库进行拆分,来提高数据库的写入能力,即所谓的分库。分库采用对关键字取模的方式,对数据库进行路由。

数据存放的数据库=分库字段的内容%数据库的数量

3、即分表又分库

数据库分表可以解决单表海量数据的查询性能问题,分库可以解决单台数据库的并发访问压力问题。

当数据库同时面临海量数据存储和高并发访问的时候,需要同时采取分表和分库策略。一般分表分库策略如下:

中间变量 = 关键字%(数据库数量单库数据表数量)

库 = 取整(中间变量/单库数据表数量)

表 = (中间变量%单库数据表数量)

实例:

1、分库分表

很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是这样子:

复制代码 代码如下:

<php

for($i=0;$i< 100; $i++ ){

//echo "CREATE TABLE db2members{$i} LIKE db1members

";

echo "INSERT INTO members{$i} SELECT FROM members WHERE mid%100={$i}

";

}

>

2、不停机修改mysql表结构

同样还是members表,前期设计的表结构不尽合理,随着数据库不断运行,其冗余数据也是增长巨大,同事使用了下面的方法来处理:

先创建一个临时表:

/创建临时表/

CREATE TABLE members_tmp LIKE members

然后修改members_tmp的表结构为新结构,接着使用上面那个for循环来导出数据,因为1000万的数据一次性导出是不对的,mid是主键,一个区间一个区间的导,基本是一次导出5万条吧,这里略去了

接着重命名将新表替换上去:

/这是个颇为经典的语句哈/

RENAME TABLE members TO members_bak,members_tmp TO members;

就是这样,基本可以做到无损失,无需停机更新表结构,但实际上RENAME期间表是被锁死的,所以选择在线少的时候 *** 作是一个技巧。经过这个 *** 作,使得原先8G多的表,一下子变成了2G多。

很有可能你用的数据库,不具备将删除后所留出的空间进行清理功能,而你用的数据库的数据收缩只是对C表这个数据进行整理压缩。就是说你用的数据库在删掉A,B表,并作数据收缩,是不能减少数据库的大小的。就像Email的例子一样,不知你观察过没有,你删掉需要的email后,你的eamil的总的大小不会减少。如果你想精确的减少的话,你需要把你的数据库里(假设名为A)的你实际要用的数据全部导出到(最好是命名一个新的)Access的数据库,然后删除A数据库,在重新建立A数据库,然后将导出的所有数据重新导入新建的A数据库里。不过这样麻烦的事,还是很少有人做的。除非数据库的容量不够了,需要整理。一般都不会在意的,因为你整理后的数据库在以后的使用中,删除表或表里的数据时还是有这个现象,只能增大,不会因为你的删除一条或一个表数据而缩小的。

最佳方案是用应用服务器和数据库服务器分离开。

应用服务器跑中间件程序,存储视频数据,中等性能,大容量

数据库服务器跑数据库软件,超强计算性能和磁盘性能

应用服务器

产品型号:I2476132S-E

产品类型:双路四核机架式服务器

处 理 器:Xeon E5506(活动升级)

内 存:2G DDR3 REG ECC

硬 盘:SATA2 500G

机 构:1U机架式

价 格:¥6999

银牌服务

重庆五年免费上门服务,全国三年免费上门服务,关键部件三年以上免费质保。

数据库服务器

标配一颗至强X5650六核12线程处理器,4G DDR3 REG ECC内存,SAS 300G 15000rpm硬盘,2U机架式设计,性能非常不错。如果是3万预算,建议你升级到2颗六核处理器,达成12颗物理核心,24条处理线程(在任务管理中可以看到24个cpu格子- -~),内存升级到12GB DDR3 REG ECC,总价也就在3万元不到。

产品型号:I2696286S-H

产品类型:双路六核机架式服务器

处 理 器:Xeon X5650

内 存:4G DDR3 REG ECC

硬 盘:SAS 300G

机 构:2U机架式

价 格:¥19800

银牌服务

重庆五年免费上门服务,全国三年免费上门服务,关键部件三年以上免费质保。

给你推荐的是国产品牌正睿的服务器产品,他们的产品性价比很高,售后也很完善,3年免费质保,3年免费上门服务,在业界口碑很不错

你最好买一本专门讲ORACLE性能优化的书,好好看看\x0d\1、调整数据库服务器的性能\x0d\Oracle数据库服务器是整个系统的核心,它的性能高低直接影响整个系统的性能,为了调整Oracle数据库服务器的性能,主要从以下几个方面考虑: \x0d\11、调整 *** 作系统以适合Oracle数据库服务器运行\x0d\Oracle数据库服务器很大程度上依赖于运行服务器的 *** 作系统,如果 *** 作系统不能提供最好性能,那么无论如何调整,Oracle数据库服务器也无法发挥其应有的性能。 \x0d\111、为Oracle数据库服务器规划系统资源 \x0d\据已有计算机可用资源, 规划分配给Oracle服务器资源原则是:尽可能使Oracle服务器使用资源最大化,特别在Client/Server中尽量让服务器上所有资源都来运行Oracle服务。 \x0d\112、调整计算机系统中的内存配置 \x0d\多数 *** 作系统都用虚存来模拟计算机上更大的内存,它实际上是硬盘上的一定的磁盘空间。当实际的内存空间不能满足应用软件的要求时, *** 作系统就将用这部分的磁盘空间对内存中的信息进行页面替换,这将引起大量的磁盘I/O *** 作,使整个服务器的性能下降。为了避免过多地使用虚存,应加大计算机的内存。 \x0d\113、为Oracle数据库服务器设置 *** 作系统进程优先级 \x0d\不要在 *** 作系统中调整Oracle进程的优先级,因为在Oracle数据库系统中,所有的后台和前台数据库服务器进程执行的是同等重要的工作,需要同等的优先级。所以在安装时,让所有的数据库服务器进程都使用缺省的优先级运行。 \x0d\12、调整内存分配\x0d\Oracle数据库服务器保留3个基本的内存高速缓存,分别对应3种不同类型的数据:库高速缓存,字典高速缓存和缓冲区高速缓存。库高速缓存和字典高速缓存一起构成共享池,共享池再加上缓冲区高速缓存便构成了系统全程区(SGA)。SGA是对数据库数据进行快速访问的一个系统全程区,若SGA本身需要频繁地进行释放、分配,则不能达到快速访问数据的目的,因此应把SGA放在主存中,不要放在虚拟内存中。内存的调整主要是指调整组成SGA的内存结构的大小来提高系统性能,由于Oracle数据库服务器的内存结构需求与应用密切相关,所以内存结构的调整应在磁盘I/O调整之前进行。 \x0d\121、库缓冲区的调整 \x0d\库缓冲区中包含私用和共享SQL和PL/SQL区,通过比较库缓冲区的命中率决定它的大小。要调整库缓冲区,必须首先了解该库缓冲区的活动情况,库缓冲区的活动统计信息保留在动态性能表v$librarycache数据字典中,可通过查询该表来了解其活动情况,以决定如何调整。 \x0d\ \x0d\Select sum(pins),sum(reloads) from v$librarycache; \x0d\ \x0d\Pins列给出SQL语句,PL/SQL块及被访问对象定义的总次数;Reloads列给出SQL 和PL/SQL块的隐式分析或对象定义重装载时在库程序缓冲区中发生的错误。如果sum(pins)/sum(reloads) ≈0,则库缓冲区的命中率合适;若sum(pins)/sum(reloads)>1, 则需调整初始化参数 shared_pool_size来重新调整分配给共享池的内存量。 \x0d\122、数据字典缓冲区的调整 \x0d\数据字典缓冲区包含了有关数据库的结构、用户、实体信息。数据字典的命中率,对系统性能影响极大。数据字典缓冲区的使用情况记录在动态性能表v$librarycache中,可通过查询该表来了解其活动情况,以决定如何调整。 \x0d\ \x0d\Select sum(gets),sum(getmisses) from v$rowcache; \x0d\ \x0d\Gets列是对相应项请求次数的统计;Getmisses 列是引起缓冲区出错的数据的请求次数。对于频繁访问的数据字典缓冲区,sum(getmisses)/sum(gets)<10%~15%。若大于此百分数,则应考虑增加数据字典缓冲区的容量,即需调整初始化参数shared_pool_size来重新调整分配给共享池的内存量。 \x0d\123、缓冲区高速缓存的调整 \x0d\用户进程所存取的所有数据都是经过缓冲区高速缓存来存取,所以该部分的命中率,对性能至关重要。缓冲区高速缓存的使用情况记录在动态性能表v$sysstat中,可通过查询该表来了解其活动情况,以决定如何调整。 \x0d\ \x0d\Select name,value from v$sysstat where name in ('dbblock gets','consistent gets','physical reads'); \x0d\ \x0d\dbblock gets和consistent gets的值是请求数据缓冲区中读的总次数。physical reads的值是请求数据时引起从盘中读文件的次数。从缓冲区高速缓存中读的可能性的高低称为缓冲区的命中率,计算公式: \x0d\ \x0d\Hit Ratio=1-(physical reds/(dbblock gets+consistent gets)) \x0d\ \x0d\如果Hit Ratio<60%~70%,则应增大db_block_buffers的参数值。db_block_buffers可以调整分配给缓冲区高速缓存的内存量,即db_block_buffers可设置分配缓冲区高速缓存的数据块的个数。缓冲区高速缓存的总字节数=db_block_buffers的值db_block_size的值。db_block_size 的值表示数据块大小的字节数,可查询 v$parameter 表: \x0d\ \x0d\select name,value from v$parameter where name='db_block_size'; \x0d\ \x0d\在修改了上述数据库的初始化参数以后,必须先关闭数据库,在重新启动数据库后才能使新的设置起作用。

可以这么理解,因为数据库是将数据存储成文件到硬盘上面的,要求硬盘空间。竟数据量太,存储的文件也会大,成正比的,不加控制的无限量增大,一方面数据库处理性能会出现问题,另一方面,数据库的备份也会成为问题,毕竟但凡是存储起来的数据,都要考虑到丢失损坏等问题。以上。

优化“mysql数据库”来提高“mysql性能”的方法有:

1、选取最适用的字段属性。

MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。

2、使用连接(JOIN)来代替子查询(Sub-Queries)。

MySQL从41开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。

3、使用联合(UNION)来代替手动创建的临时表。

MySQL从40的版本开始支持UNION查询,它可以把需要使用临时表的两条或更多的SELECT查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。

4、事务。

要把某个数据同时插入两个相关联的表中,可能会出现这样的情况:第一个表中成功更新后,数据库突然出现意外状况,造成第二个表中的 *** 作没有完成,这样,就会造成数据的不完整,甚至会破坏数据库中的数据。要避免这种情况,就应该使用事务,它的作用是:要么语句块中每条语句都 *** 作成功,要么都失败。

5、锁定表。

尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。由于在事务执行的过程中,数据库将会被锁定,因此其它的用户请求只能暂时等待直到该事务结束。

6、使用外键。

锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键。

7、使用索引

索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(),MIN()和ORDERBY这些命令的时候,性能提高更为明显。

8、优化的查询语句

绝大多数情况下,使用索引可以提高查询的速度,但如果SQL语句使用不恰当的话,索引将无法发挥它应有的作用。

以MySQL为例:

影响数据库性能的主要因素总结如下:

1、sql查询速度

2、网卡流量

3、服务器硬件

4、磁盘IO

以上因素并不是时时刻刻都会影响数据库性能,而就像木桶效应一样。如果其中一个因素严重影响性能,那么整个数据库性能就会严重受阻。另外,这些影响因素都是相对的。

例如:当数据量并没有达到百万千万这样的级别,那么sql查询速度也许就不是个重要因素,换句话说,你的sql语句效率适当低下可能并不影响整个效率多少,反之,这种情况,无论如何怎么优化sql语句,可能都没有太明显的效果。

相关内容拓展:

1、SQL查询速度

风险:效率低下的SQL

2、网卡流量

风险:网卡IO被占满(100Mb/8=100MB)

方案:

①减少从服务器的数量。从服务器都要从主服务器上复制日志,所以,从服务器越多,网络流量越大。

②进行分级缓存。前方大量缓存突然失效会对数据库造成严重的冲击。

③避免使用“select ”进行查询

④分离业务网络和服务器网络

3、磁盘IO

风险:磁盘IO性能突然下降。

方案:使用更好的磁盘设备解决。

如何应对数据库CPU打满?最优解在这里

阿里云数据库

2020-04-26 16:48·字数:4996·阅读:129

如何用好数据库,调校数据库使其发挥最优的性能?

如何快速诊断和应对各种原因导致的突发数据库性能问题?

如何以最低资源成本满足业务需求?

这些复杂的运维难题最优解到底是什么?

今天(4月22日)15:00数据库自治服务DAS重磅发布会

现场为你揭晓答案!

数据库自动驾驶时代一触即发点击这里

即可预约直播

今天提前为大家揭秘数据库自治服务DAS的一个创新功能 —— AutoScale,基于数据库实例的实时性能数据作为输入,由DAS完成流量异常发现、合理数据库规格建议和合理磁盘容量建议,使数据库服务具备自动扩展存储和计算资源的能力。

01背 景

为业务应用选择一个合适的数据库规格,是每个数据库运维同学都会经常面临的一个问题。若规格选的过大,会产生资源浪费;若规格选的过小,计算性能不足会影响业务。

通常情况下,运维同学会采用业务平稳运行状态下,CPU可处于合理水位(例如50%以下)的一个规格(如4核CPU配8G内存)并配一个相对富余的磁盘规格(如200G)。

然而在数据库应用运维同学的日常生活里,线上应用流量突增导致数据库资源打满的情况时有发生,而引发这类问题的场景可能多种多样:

1、新业务上线,对业务流量预估不足,导致资源打满,如新上线的应用接入了大量的引流,或基础流量比较大的平台上线了一个新特性功能。

2、不可预知的流量,如突发的舆论热点带来的临时流量,或某个网红引发的限时抢购、即兴话题等。

3、一些平时运行频次不高,但又偶发集中式访问,如每日一次的上班打卡场景,或每周执行几次的财务核算业务。这类业务场景平时业务压力不高,虽已知会存在访问高峰,但为节省资源而通常不会分配较高的规格。

当上述业务场景突发计算资源不足状况时,通常会让运维同学措手不及,严重影响业务,如何应对“数据库资源打满”是运维同学常常被挑战的问题之一。

在数据库场景下,资源打满可分为计算资源和存储资源两大类,其主要表现:

1、计算资源打满,主要表现为CPU资源利用率达到100%,当前规格下的计算能力不足以应对;

2、存储资源打满,主要表现为磁盘空间使用率达到100%,数据库写入的数据量达到当前规格下的磁盘空间限制,导致业务无法写入新数据;

针对上述两类问题,数据库自治服务 DAS 进行了服务创新,使数据库服务具备自动扩展存储和计算资源的技术能力,应对上述的问题。

DAS AutoScale基于数据库实例的实时性能数据作为输入,由DAS完成流量异常发现、合理数据库规格建议和合理磁盘容量建议,使数据库服务具备自动扩展存储和计算资源的能力。

接下来,本文将对DAS AutoScale服务的架构进行详细的介绍,包括技术挑战、解决方案和关键技术。

02技术挑战

计算节点规格调整是数据库优化的一种常用手段,尽管计算资源规格只涉及到CPU和内存,但在生产环境进行规格变配的影响还是不容忽视,将涉及数据迁移、HA切换、Proxy切换等 *** 作,对业务也会产生影响。

业务有突发流量时,计算资源通常会变得紧张甚至出现CPU达到100%的情况。通常情况下,这种情况会通过扩容数据库规格的方式来解决问题,同时DBA在准备扩容方案时会至少思考如下三个问题:

1扩容是否能解决资源不足的问题?

2何时应该进行扩容?

3如何扩容,规格该如何选择?

解决这三个问题,DAS同样面临如下三个方面挑战:

21 挑战一:如何判别扩容是否能够解决问题?

在数据库场景下,CPU打满只是一个计算资源不足的表征,导致这个现象的根因多样,解法也同样各异。例如业务流量激增,当前规格的资源确实不能够满足计算需求,在合适的时机点,d性扩容是一个好的选择,再如出现了大量的慢SQL,慢SQL堵塞任务队列,且占用了大量的计算资源等,此时资深的数据库管理员首先想到的是紧急SQL限流,而不是扩容。在感知到实例资源不足时,DAS同样需要从错综复杂的问题中抽丝剥茧定位根因,基于根因做出明智的决策,是限流,是扩容,还是其它。

22 挑战二:如何选择合适的扩容时机和扩容方式?

对于应急扩容时机,选择的好坏与紧急情况的判断准确与否密切相关。“紧急”告警发出过于频繁,会导致实例频繁的高规格扩容,产生不必要的费用支出;“紧急”告警发出稍晚,业务受到突发情况影响的时间就会相对较长,对业务会产生影响,甚至引发业务故障。在实时监控的场景下,当我们面临一个突发的异常点时,很难预判下一时刻是否还会异常。因此,是否需要应急告警变得比较难以决断。

对于扩容方式,通常有两种方式,分别是通过增加只读节点的水平扩容,以及通过改变实例自身规格的垂直扩容。

其中,水平扩容适用于读流量较多,而写流量较少的场景,但传统数据库需要搬迁数据来搭建只读节点,而搬迁过程中主节点新产生的数据还存在增量同步更新的问题,会导致创建新节点比较慢。

垂直扩容则是在现有规格基础上进行升级,其一般流程为先对备库做升级,然后主备切换,再对新备库做规格升级,通过这样的流程来降低对业务的影响,但是备库升级后切换主库时依然存在数据同步和数据延迟的问题。因此,在什么条件下选择哪种扩容方式也需要依据当前实例的具体流量来进行确定。

23 挑战三:如何选择合适的计算规格?

在数据库场景下,实例变更一次规格涉及多项管控运维 *** 作。以物理机部署的数据库变更规格为例,一次规格变更 *** 作通常会涉及数据文件搬迁、cgroup隔离重新分配、流量代理节点切换、主备节点切换等 *** 作步骤;而基于Docker部署的数据库规格变更则更为复杂,会额外增加Docker镜像生成、Ecs机器选择、规格库存等微服务相关的流程。因此,选择合适的规格可有效地避免规格变更的次数,为业务节省宝贵的时间。

当CPU已经是100%的时候,升配一个规格将会面临两种情况:第一种是升配之后,计算资源负载下降并且业务流量平稳;第二种是升配之后,CPU依然是100%,并且流量因为规格提升后计算能力增强而提升。

第一种情况,是比较理想的情况,也是预期扩容后应该出现的效果,但是第二种情况也是非常常见的情形,由于升配之后的规格依然不能承载当前的业务流量容量,而导致资源依然不足,并且仍在影响业务。如何利用数据库运行时的信息选择一个合适的高配规格是将直接影响升配的有效性。

03解决方案

针对上述提到的三项技术挑战,下面从DAS AutoScale服务的产品能力、解决方案、核心技术这三个方面进行解读,其中涉及RDS和PolarDB两种数据库服务,以及存储自动扩容和规格自动变更两个功能,最后以一个案例进一步具体说明。

31 能力介绍

在产品能力上,目前DAS AutoScale服务针对阿里云RDS数据库和PolarDB数据提供存储自动扩容服务和规格自动变配服务。

其中,针对即将达到用户已购买规格上限的实例,DAS存储自动扩容服务可以进行磁盘空间预扩容,避免出现因数据库磁盘满而影响用户业务的发生。在该服务中,用户可自主配置扩容的阈值比例,也可以采用DAS服务预先提供的90%规格上界的阈值配置,当触发磁盘空间自动扩容事件后,DAS会对该实例的磁盘进行扩容;

针对需要变更实例规格的数据库实例,DAS规格自动变配服务可进行计算资源的调整,用更符合用户业务负载的计算资源来处理应用请求,在该服务中,用户可自主配置业务负载流量的突发程度和持续时间,并可以指定规格变配的最大配置以及变配之后是否回缩到原始规格。

在用户交互层面,DAS AutoScale主要采用消息通知的方式展示具体的进度以及任务状态,其中主要包括异常触发事件、规格建议和管控任务状态三部分。异常触发事件用于通知用户触发变配任务,规格建议将针对存储扩容和规格变配的原始规格和目标值进行说明,而管控任务状态则将反馈AutoScale任务的具体进展和执行状态。

32 方案介绍

为了实现上面介绍的具体能力,DAS AutoScale实现了一套完整的数据闭环,如图1:

图1 DAS AutoScale数据闭环

在该闭环中,包含性能采集模块、决策中心、算法模型、规格建议模块、管控执行模块和任务跟踪模块,各模块的具体功能如下:

性能采集模块负责对实例进行实时性能数据采集,涉及数据库的多项性能指标信息、规格配置信息、实例运行会话信息等;

决策中心模块则会根据当前性能数据、实例会话列表数据等信息进行全局判断,以解决挑战一的问题。例如可通过SQL限流来解决当前计算资源不足的问题则会采取限流处理;若确实为突增的业务流量,则会继续进行AutoScale服务流程;

算法模型是整个DAS AutoScale服务的核心模块,负责对数据库实例的业务负载异常检测和容量规格模型推荐进行计算,进而解决挑战二和挑战三的具体问题;

规格建议校验模块将产出具体建议,并针对数据库实例的部署类型和实际运行环境进行适配,并与当前区域的可售卖规格进行二次校验,确保的建议能够顺利在管控侧进行执行;

管控模块负责按照产出的规格建议进行分发执行;

状态跟踪模块则用于衡量和跟踪规格变更前后数据库实例上的性能变化情况;

接下来,将分别针对DAS AutoScale支持的存储扩容和规格变配两个业务场景进行展开介绍。

!图2 存储扩容方案](>

以上就是关于MySQL数据库性能优化之分区分表分库全部的内容,包括:MySQL数据库性能优化之分区分表分库、SQL SERVER 2000里有两表 A,B,表结构是一样的,按些结构我生成C表,再通过“导入数据”把A,B表导入C。、这样的数据库要求,要多大服务器支撑,要多少的硬件配置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10204403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存