网站改版对seo的影响,网站建设注册密码咋弄,烟台网站排名,定州哪里可以做网站数据库管理204期 2024-06-15 数据库管理-第204期 数据库的IO掉速#xff0c;也许是SSD的锅#xff08;20240615#xff09;1 SSD物理结构2 SSD颗粒类型3 DRAM SLC Cache3.1 DRAM3.2 SLC Cache3.3 其他方式 4 缓外降速总结 数据库管理-第204期 数据库的IO掉速#xff… 数据库管理204期 2024-06-15 数据库管理-第204期 数据库的IO掉速也许是SSD的锅202406151 SSD物理结构2 SSD颗粒类型3 DRAM SLC Cache3.1 DRAM3.2 SLC Cache3.3 其他方式 4 缓外降速总结 数据库管理-第204期 数据库的IO掉速也许是SSD的锅20240615 作者胖头鱼的鱼缸尹海文 Oracle ACE Pro: DatabaseOracle与MySQL PostgreSQL ACE Partner 10年数据库行业经验现主要从事数据库服务工作 拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证 墨天轮MVP、认证技术专家、年度墨力之星ITPUB认证专家、专家百人团成员OCM讲师PolarDB开源社区技术顾问HaloDB外聘技术顾问、OceanBase观察团成员青学会青年数据库学习互助会外部顾问 圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号非著名社恐社交恐怖分子 公众号胖头鱼的鱼缸CSDN胖头鱼的鱼缸尹海文墨天轮胖头鱼的鱼缸ITPUByhw1809。 除授权转载并标明出处外均为“非法”抄袭 近期在一些朋友的非专业存储的全闪存储环境中出现了一个有趣的现象
当数据量急速上升的过程中整个数据库的IO的性能反应会有一个较大规模的下降需要一段时间才能恢复IO性能当全闪存储整体存储空间使用量达到一定百分比后数据库反应出来的整体IO会有一定下降且不稳定一般需要提前做横向扩展并平衡数据
出现上面情况数据库本身排查一般不会发现问题那么换个思路从SSD的角度来看看为什么会出现这个问题。
1 SSD物理结构
不同于机械磁盘HDD通过磁头在磁盘刻录/读取信息这需要去物理寻址。SSD的的运行方式就有点不同SSD的核心主要有两部分主控和闪存颗粒:
主控芯片通过M.2、U.2或PCIe接口使用PCIe总线与CPU直连或通过主板芯片组从CPU“继承”的PCIe总线与CPU相连并将数据写入SSD的闪存颗粒中从闪存颗粒中读取数据融合数据存储、清理垃圾等工作闪存颗粒实际存储数据的地方
这里说明一下一般来说服务器CPU可用的直连CPU的PCIe使可以支撑足够多的PCIe NVMe SSD的通过主板芯片组扩展的PCIe通道一般为桌面级CPU因存在共享通道性能略低于直连CPU
2 SSD颗粒类型
说起闪存颗粒类型之前得先说一下闪存颗粒的最小存储单元其实就是一个非常古老的硬件结构浮栅晶体管简单来说就是通过存储不同数量的电子一般最多可存储7个电子来判断存储的数据内容。然后通过海量的浮栅晶体管来存储数据关于其他的组件就暂时放下不说了。 目前主流的存储颗粒有MLC、TLC、SLC
SLC一个浮栅晶体管可存储1bit数据可存储两个内容0-3个电子为14-7个电子为0 MLC一个浮栅晶体管可存储2bit数据可存储4个内容0-1个电子为112-3个电子为104-5个电子为016-7个电子为00 TLC一个浮栅晶体管可存储3bit数据可存储8个内容0个电子为1111个电子为1102个电子为1013个电子为1004个电子为0115个电子为0106个电子为0017个电子为000
从容量来看SLC MLC TLC越往右同样数量的浮栅晶体管可以存放更多数据这也导致了越往左成本越高 从性能来看SLC MLC TLC越往左一个浮栅晶体管需要操作的次数更少也不需要更加精确的电子控制同时也需要更多的浮栅晶体管来存储相同大小的数据多个浮栅晶体管可并行写入加速 从寿命来看SLC MLC TLC越往左单个浮栅晶体管擦写操作更少越往右浮栅晶体管出现需要融合数据的概率越大
3 DRAM SLC Cache
首先我们来算算使用不同类型的闪存颗粒存放1TB数据大概需要多少个浮栅晶体管
SLC1024×1024×1024×1024MLC1024×1024×1024×1024/2TLC1024×1024×1024×1024/3
不需要计算结果即便是TLC都是需要海量的浮栅晶体管来存放1TB数据。那么海量的浮栅晶体管存放数据肯定不可能一个一个去检索这里就需要FLT(FLash Translation Layer)表来记录逻辑数据和物理位置之间的关系。那么这个FLT放哪呢怎么加速查询这里一般来说主要有两种方案。
3.1 DRAM
这里可以在SSD中添加一个DRAM来存放FLT表 众所周知DRAM的IO性能是远高于闪存颗粒的DRAM缓存FLT是可以极大提升检索数据物理位置映射的效率。另一方面DRAM也可以作为写入缓存以解决MLC、TLC的写放大问题(说白了就是排队累积对应量的数据再写入闪存颗粒减少单个浮栅晶体管的空间浪费避免空间回收和融合出现)。
3.2 SLC Cache
尤其是使用TLC颗粒的SSD可以通过将一部分TLC浮栅晶体管模拟成SLC模式来缓存FLT表和写入缓存。 使用这种方式会增大主控的维护压力而且会写入模拟SLC的数据最终会转换至TLC中且数据量的整体提升会压缩模拟SLC的数量这样一是会降低维护FLT和写入缓存的性能另一方面会放大模拟SLC转换TLC操作量。最终当没有模拟SLC剩余时SSD的性能会下降的十分明显。同时这种方式性能肯定比不过SSD内置DRAM。
3.3 其他方式
在主控芯片中添加一块不大的区域缓存常用的FLT表信息闪存颗粒中划分固定区域模拟SLC模式来缓存部分常用的FLT表信息和写缓存向机器主内存借用一块区域来存放部分常用的FLT表信息等
4 缓外降速
一般来说企业级SSD都会使用SLC闪存颗粒较大的DRAM来兼顾寿命与性能但是这样往往价格会高不少。经过观察发现文章一开始出现问题的环境为了兼顾成本往往使用的是SSD是较小DRAM或者是模拟SLC缓存的民用级SSD。那么当数据暴增超过缓存容量时会出现降速的现象甚至会处罚浮栅晶体管的类型转换当整体容量足够大时SSD也会因为失去缓存而出现性能问题。
总结
本期稍微深入探讨了一下SSD的一些内部的东西希望给大家多一个视角。 老规矩知道写了些啥。