当前位置:首页 > 每日看点

Mysql为什么只能支持2000w左右的数据量?

卡卷网2年前 (2025-01-02)每日看点286

MySQL为什么“只能”支持2000w左右的数据量?

首先,这个问题有点冤枉MySQL了。

MySQL根本没跟你说它只能撑到2000w,是你用得不对!这个2000w的“天花板”其实不是MySQL的硬性,而是硬件、数据库设计、以及配置调优没到位,自己给自己挖了坑。

要搞清楚这个问题,我们得从<>存储引擎原理、硬件、MySQL配置几个层面扒一扒。

1.<>+树、16k数据页,这锅不是它的

很多人喜欢拿+树和16K数据页出来背锅,说什么“一个数据页存不下多少条数据,+树层数多了就崩了”。这种说法听着有点意思,但问题是,+树从设计上就支持动态扩展,根本不怕你数据量大。数据多了,它就节点,保证树的层级增长在可控范围内。

<>+树能撑多少数据?

举个例子:

    假设一个数据页是16K,每个索引项占100字节,那一个节点能存大约160条索引。如果是3层+树(根节点-中间节点-叶子节点),第一层指向160个第二层节点,每个第二层节点又指向160个叶子节点。那整个树能存多少条数据?<>160×160×160=4096000条数据。但实际上,<>4层+树能轻松撑到几十亿条数据,根本不是问题。

所以,+树的设计可以随数据量增加自动扩展,性能只会随层级增加稍微有点延迟,但不会突然“”。问题不在它。

[AT大佬写的刷题笔记,让我offer拿到手软](这位AT大佬写的Leetcode刷题笔记,让我offer拿到手软)

2.<>内存才是问题的核心:InnoD的ufferPool

正让人觉得“2000w就顶不住了”的核心,是<>内存缓存不够。InnoD存储引擎通过<>ufferPool来数据的缓存,这个地方的大小直接决定了你查询的效率。

<>ufferPool到底干嘛的?

当你执行查询时:

    MySQL先看<>ufferPool(也就是内存)里有没有你需要的数据页。<>有:直接从内存返回,速度飞快。<>没有:只能从磁盘加载数据页到ufferPool,然后再返回数据。

问题来了:<>内存是有限的,假设你的内存只有8G,而数据总量是100G,ufferPool只能缓存一部分,剩下的查询每次都得访问磁盘。磁盘速度再快,频繁IO也顶不住啊!

<>缓存命中率低,性能自然差

    数据量越大,缓存的命中率就越低。一旦命中率低,你的查询就会频繁触发磁盘IO,读写速度直接掉到地板上。

这就好你脑袋里的短期记忆只能装10条信息,但老板一天给你1000条任务。你不可能每条任务都能记住,只能反复翻任务清单,效率能高才怪。

<>解决方法

    <>加内存!加ufferPool!ufferPool大小可以通过参数innod_uffer_pool_size设置。一般建议设置为总内存的50%-75%,如有32G内存,可以把ufferPool设成24G。<>分区分表,减少单表数据量(后面详细讲)。

3.<>磁盘性能:别再用机械硬盘了!

很多人用MySQL出问题,原因之一是磁盘性能拖后腿。如果你用的是传的机械硬盘(HDD),那随机读写速度慢得让人怀疑人生。在高并发场景下,机械硬盘根本扛不住频繁的IO作。

<>为什么磁盘性能这么重要?

MySQL的数据最终存储在磁盘上,查询的时候如果ufferPool缓存不命中,就得从磁盘加载数据页。如果你的磁盘太慢,那读取速度直接拖垮性能。尤其是+树的索引查找,涉及到多个数据页的加载,每次IO的延迟都会被放大。

<>解决方法

    换成<>SSD或者更高级别的企业级存储(如NVMeSSD)。如果是云,选择高IOPS的存储服务。

一句话,硬件别抠门,省下的预算会让你多加几倍班。

[AT大佬写的刷题笔记,让我offer拿到手软](这位AT大佬写的Leetcode刷题笔记,让我offer拿到手软)

4.<>单表设计问题:2000w的数据压死了一张表

有时候MySQL撑不住,不是数据库的锅,而是<>表设计得太随意。一张表直接存2000w条记录,再加上复杂的查询和写入,表锁、索引膨胀这些问题会一起扑向你。

<>单表的问题

    <>索引太大:MySQL的索引是跟数据一起存放的,2000w条记录的索引文件可能有几十G,索引查找的效率下降。<>写入冲突:高并发写入会导致频繁的锁等待,性能雪崩。

<>解决方法:分区分表

    <>分区表把一张表按照某种规则分成多个分区,如按时间分区。CREATETALEorders(idINTNOTNULL,order_dateDATENOTNULL,PRIMARYKEY(id,order_date))PARTITIONYRANGE(YEAR(order_date))(PARTITIONp2019VALUESLESSTHAN(2020),PARTITIONp2020VALUESLESSTHAN(2021),PARTITIONp2021VALUESLESSTHAN(2022));查询时,MySQL只扫描对应分区,性能大大提升。<>分库分表如果分区表还不够,那就直接把数据拆分到不同的数据库和表里。如把用户ID按哈希值取模拆分成10张表。

5.<>查询优化:索引别乱用

MySQL索引用得好是性能神器,用得不好就是灾难。很多人一上来就随便给表加索引,觉得“多加索引=高性能”,结果不仅没提升性能,反而查询更慢。

<>常见索引问题

    <>过多的单字段索引:每个查询都涉及多个字段,但每个字段的索引是的,MySQL无法充分利用这些索引。<>大字段加索引:如TEXT或LO字段,加了索引反而拖累性能。

<>优化方法

    <>复合索引:将多个查询条件组合成一个索引。CREATEINDEXidx_user_orderONorders(user_id,order_date);<>覆盖索引:查询只返回索引列,避免访问数据页。SELECTuser_id,order_dateFROMordersWHEREuser_id=123;

6.<>MySQL配置调优:用对工具很重要

MySQL默认配置较保守,很多参数需要根据业务场景调整。如:

    <>innod_uffer_pool_size:前面说了,内存大了性能才快。<>innod_log_file_size:增大redolog文件,减少写入时的性能瓶颈。<>query_cache_size:可以缓存少量高频查询结果,减少重复计算。

总结:问题到底在哪?

所谓“2000w数据的”,并不是MySQL自己的硬性,而是以下几个问题的叠加效应:

    <>内存缓存不够,ufferPool装不下那么多数据。<>磁盘性能太差,频繁的磁盘IO成了瓶颈。<>表设计不合理,单表数据量过大导致索引膨胀和写入冲突。<>查询没优化,索引用得乱七八糟。

<>解决方案总结

问题解决方法缓存不足增大ufferPool,提升内存容量磁盘性能差换成SSD,或者使用高IOPS的云存储表数据量过大使用分区表或分库分表查询慢优化索引,使用复合索引和覆盖索引配置不合理调整innod_uffer_pool_size等参数

所以别再吐槽MySQL不行了,只要用对方法,别说2000w数据,2亿都能稳稳扛住!

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。

链接:s://pan.aidu/s/1UECE5yuaoTTRpJfi5LU5TQ密码:he

不会有人刷到这里还想白嫖吧?点赞对我的非常重要!在线求赞。加个关注我会非常感激!

@苏三说技术

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/6179.html

分享给朋友:

相关文章

为什么程序员不自己开发微信小程序这类似的东西赚钱?

为什么程序员不自己开发微信小程序这类似的东西赚钱?

你如果有好的想法是可以挣钱的 首先大家说的个人资质限制确实多,也不建议直接拿个人资质去用小程序盈利,因为很麻烦 我说一下我的大体操作: 1.首先去申请个体户,这个可以用住宅来注册申请,而且速度很快就几天就下来了,经营类目主要是互联网销售这些…

如果我们没有自己的手机操作系统,会出现所谓的“卡脖子”“安全”问题吗?

如果我们没有自己的手机操作系统,会出现所谓的“卡脖子”“安全”问题吗?

前段时间某某高管在微博发文表示:“其实我觉得,中国人需要的不是一个自己的手机os,而是一个全国产的微信,再搭配一些辅助功能。”这算是“安卓开源”开源的代表了吧。然而打脸来的如此之快,10月30日消息,在Linux内核疑似大规模移除俄罗斯开发…

抖音和快手最大的区别是什么?

1、目标人群定位不同抖音:一二线城市,占比52%,大专学历以上,女性偏多。抖音以年轻群体居多。 快手:三四线城市,占比64%,高中学历以下,男女更均衡。快手所覆盖的年龄段范围更广。 2、内容创作的形式和深度不同抖音:偏深层,内容的装饰及表达…

腾讯文档回收站彻底删除文件真的找不回来了吗?

趁早打电话联系腾讯文档的人可能还有救,一般这种都是数据库里标记为删除,文件还没有实际删除,然后经过一段时间后程序统一进行真删除。这个“一段时间”可长可短,可能是一小时也可能是几天几个月甚至几年,要看腾讯服务器的程序是怎么写的。 不过你联系腾…

如何做电商行业?

如何做电商行业?

“如何做电商*开网店”跟“如何找老婆”一样,没概况条件、没明确标准,就是扯犊子。 我把话题具体一点说: 具备“两三万”启动资金、掌握“选品+上架优化”基础技能,小则月入三五千、多则上万。跟摆地摊一样,有进货的钱、也不怕苦不怕累、稍微有点生意…

有哪些让你目瞪口呆的 Bug ?

有哪些让你目瞪口呆的 Bug ?

成都有个监狱情况比较特殊,关押的基本全是重犯,而且还都是经济犯和政治犯, 他们以前都是一方大佬,在自己的一亩三分地翻手为云覆手为雨,无非是不小心中箭落马或帮老大顶锅才进监狱, 所以即使进来了,他们依然保持着体面和骄傲,依从性差,虽然不至于和…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。