数据库管理-第204期 数据库的IO掉速,也许是SSD的锅(20240615)

数据库管理204期 2024-06-15

  • 数据库管理-第204期 数据库的IO掉速,也许是SSD的锅(20240615)
    • 1 SSD物理结构
    • 2 SSD颗粒类型
    • 3 DRAM & SLC Cache
      • 3.1 DRAM
      • 3.2 SLC Cache
      • 3.3 其他方式
    • 4 缓外降速
    • 总结

数据库管理-第204期 数据库的IO掉速,也许是SSD的锅(20240615)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、认证技术专家、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问、OceanBase观察团成员,青学会(青年数据库学习互助会)外部顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

近期在一些朋友的非专业存储的全闪存储环境中,出现了一个有趣的现象:

  • 当数据量急速上升的过程中,整个数据库的IO的性能反应会有一个较大规模的下降,需要一段时间才能恢复IO性能
  • 当全闪存储整体存储空间使用量达到一定百分比后,数据库反应出来的整体IO会有一定下降且不稳定,一般需要提前做横向扩展并平衡数据

出现上面情况,数据库本身排查一般不会发现问题,那么换个思路,从SSD的角度来看看,为什么会出现这个问题。

1 SSD物理结构

不同于机械磁盘(HDD),通过磁头在磁盘刻录/读取信息,这需要去物理寻址。SSD的的运行方式就有点不同,SSD的核心主要有两部分:主控和闪存颗粒:
image.png

  • 主控芯片:通过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个电子为1,4-7个电子为0
    image.png
  • MLC:一个浮栅晶体管可存储2bit数据,可存储4个内容:0-1个电子为11,2-3个电子为10,4-5个电子为01,6-7个电子为00
    image.png
  • TLC:一个浮栅晶体管可存储3bit数据,可存储8个内容:0个电子为111,1个电子为110,2个电子为101,3个电子为100,4个电子为011,5个电子为010,6个电子为001,7个电子为000
    image.png

从容量来看:SLC < MLC < TLC,越往右同样数量的浮栅晶体管可以存放更多数据,这也导致了越往左成本越高
从性能来看:SLC > MLC > TLC,越往左一个浮栅晶体管需要操作的次数更少,也不需要更加精确的电子控制;同时也需要更多的浮栅晶体管来存储相同大小的数据,多个浮栅晶体管可并行写入加速
从寿命来看:SLC > MLC > TLC,越往左单个浮栅晶体管擦写操作更少;越往右,浮栅晶体管出现需要融合数据的概率越大

3 DRAM & SLC Cache

首先,我们来算算,使用不同类型的闪存颗粒存放1TB数据大概需要多少个浮栅晶体管:

  • SLC:1024×1024×1024×1024
  • MLC:1024×1024×1024×1024/2
  • TLC:1024×1024×1024×1024/3

不需要计算结果,即便是TLC都是需要海量的浮栅晶体管来存放1TB数据。那么海量的浮栅晶体管存放数据,肯定不可能一个一个去检索,这里就需要FLT(FLash Translation Layer)表来记录逻辑数据和物理位置之间的关系。那么这个FLT放哪呢?怎么加速查询?这里一般来说主要有两种方案。

3.1 DRAM

这里可以在SSD中添加一个DRAM来存放FLT表:
image.png
众所周知,DRAM的IO性能是远高于闪存颗粒的,DRAM缓存FLT是可以极大提升检索数据物理位置映射的效率。另一方面,DRAM也可以作为写入缓存,以解决MLC、TLC的写放大问题(说白了就是排队累积对应量的数据再写入闪存颗粒,减少单个浮栅晶体管的空间浪费避免空间回收和融合出现)。

3.2 SLC Cache

尤其是使用TLC颗粒的SSD,可以通过将一部分TLC浮栅晶体管模拟成SLC模式,来缓存FLT表和写入缓存。
image.png
使用这种方式会增大主控的维护压力,而且会写入模拟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的一些内部的东西,希望给大家多一个视角。
老规矩,知道写了些啥。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/853647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为机考入门python3--(36)牛客36-字符串加密

分类&#xff1a;字符串 知识点&#xff1a; 判断一个元素是否在集合中 if char not in key_set 计算字母差 index ord(char) - ord(a) 题目来自【牛客】 # 生成加密表 def generate_cipher_table(key):key_set set()cipher_table ""# 去重for char in k…

知乎号开始运营了,宣传一波

知乎号开始发布一些小说、散文还有诗歌了&#xff0c;欢迎大家多来关注 知乎链接&#xff1a;姜亚轲 每篇小说都改编成网易云音乐&#xff0c;文章中也有链接&#xff0c;我做的词&#xff0c;Suno编曲和演唱&#xff0c;欢迎大家来听听

GoogleDeepMind联合发布医学领域大语言模型论文技术讲解

Towards Expert-Level Medical Question Answering with Large Language Mod 这是一篇由Google Research和DeepMind合作发表的论文,题为"Towards Expert-Level Medical Question Answering with Large Language Models"。 我先整体介绍下这篇论文的主要内容&#x…

C# Winform Datagridview查询项目实例

在项目中&#xff0c;我们经常要遇到查询和展示内容&#xff0c;常用的做法是通过文本框&#xff0c;时间控件&#xff0c;按键和datagridview查询和展示内容。下面是一个常见的综合实例&#xff0c;并支持Excel(csv)导入导出&#xff0c;表格列动态调整的功能。 实例代码链接&…

程序员的核心职业素养:专业、沟通与持续学习

✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点赞、关注、收藏、评论&#xff0c;是对我最大…

TVBOX 最新版下载+视频源教程

下载链接 wx 搜索 Geek 前端 发送电视资源进行获取 操作教程

51单片机STC89C52RC——2.2 独立按键控制LED亮灭Plus

目的 当独立K1按键按一下&#xff08;立即松开&#xff09;&#xff0c;LED D1点亮。再按一下K1&#xff08;立即松开&#xff09;LED D1熄灭。 与前一节《51单片机STC89C52RC——2.1 独立按键控制LED亮灭》当独立K1按键按下时LED D1 点亮&#xff0c;松开D1熄灭 效果不一…

文章MSM_metagenomics(五):共现分析

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 本教程是使用一个Python脚本来分析多种微生物&#xff08;即strains, species, genus等&…

持续集成jenkins+gitee

首先要完成gitee部署&#xff0c;详见自动化测试git的使用-CSDN博客 接下来讲如何从git上自动拉取代码&#xff0c;实现jenkins无人值守&#xff0c;定时执行测试&#xff0c;生成测试报告。 需要这三个安装包 由于目前的jenkins需要至少java11到java17的版本&#xff0c;所以…

JVM 性能分析案列——使用 JProfiler 工具分析 dump.hprof 堆内存快照文件排查内存溢出问题

在 windows 环境下实现。 参考文档 一、配置 JVM 参数 配置两个 JVM 参数&#xff1a; -XX:HeapDumpOnOutOfMemoryError&#xff0c;配置这个参数&#xff0c;会在发生内存溢出时 dump 生成内存快照文件&#xff08;xxx.hprof&#xff09;-XX:HeapDumpPathF:\logs&#xff…

力控算法每日一练:209. 长度最小的子数组(java)

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 class Solution {public int minSu…

代码随想录算法训练营第三十八天| 509. 斐波那契数 ,70. 爬楼梯,746. 使用最小花费爬楼梯

509. 斐波那契数 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int fib(int n) {if (n < 1) {return n;}int[] dp new int[n 1];dp[0] 0;dp[1] 1;for (int i 2; i < n; i) {dp[i] dp[i - 1] dp[i - 2];}return dp[n];} } 70. 爬楼梯 - 力扣&am…

十二星座女、具有哪些情感特质。

白羊座&#xff08;奋不顾身&#xff09;。金牛座&#xff08;爱财如命&#xff09;。双子座&#xff08;灵活多变&#xff09;。 巨蟹座&#xff08;似水柔情&#xff09;。狮子座&#xff08;光明磊落&#xff09;。处女座&#xff08;尽善尽美&#xff09;。 天秤座&#xf…

安装wsl

安装wsl 先决条件&#xff1a; 打开控制面板->选择程序与功能->选择启动或关闭windows功能&#xff0c;将以下框选的勾选上 二、到Mircosoft store下载Ubuntu 三、如果以上都勾选了还报以下错误 注册表错误 0x8007019e Error code: Wsl/CallMsi/REGDB_E_CLASSNOTREG…

【three.js】旋转、缩放、平移几何体

目录 一、缩放 二、平移 三、旋转 四、居中 附源码 BufferGeometry通过.scale()、.translate()、.rotateX()、.rotateY()等方法可以对几何体本身进行缩放、平移、旋转,这些方法本质上都是改变几何体的顶点数据。 我们先创建一个平面物体,样子是这样的。 一、缩放 // 几何…

重新安装 Windows 10 后如何恢复丢失的数据?

“嗨&#xff0c;我的 Windows 10 崩溃了&#xff0c;所以我不得不重新安装它。我使用 USB 可启动驱动器重新安装了操作系统。但是&#xff0c;重新安装后&#xff0c;C 盘上的所有先前文件都丢失了。有什么方法可以恢复丢失的文件吗&#xff1f;” - Jacky 在大多数情况下&am…

如何在两个不同的conda环境中实现jupyter notebook共同使用,避免重复下载

前提&#xff1a;有2个conda环境&#xff0c;yes和py38_pytorch 其中&#xff0c;yes已经安装了jupyter notebook;py38_pytorch没有jupyter notebook 现在&#xff0c;实现在py38_pytorch用jupyter notebook 步骤&#xff1a; 1、激活py38_pytorch conda activate py38_p…

中小学电子教材下载办法(202406最简单的)

官方版本 现在能阅读电子教材的官方网站挺多的&#xff0c;例如 人民教育出版社-电子教材&#xff0c;还有 国家中小学智慧教育平台 &#xff0c;其他还有很多可在阅读的网站。由于平台的原因不能直接贴链接&#xff0c;大家可以通过搜索关键词找到网站。 如何下载 据我所知…

基于CentOS Stream 9平台安装MySQL8.4.0 LTS

1. 安装之前 1.1 查看系统版本 [rootcoisini /]# cat /etc/redhat-release CentOS Stream release 9 1.2 查看cpu架构 [rootcoisini /]# lscpu 架构&#xff1a; x86_64 CPU 运行模式&#xff1a; 32-bit, 64-bit 2. MySQL官方下载https://dev.mysql.com/downloads/mysql/ 或…

相亲交友APP系统|婚恋交友社交软件|语音聊天平台定制开发

在现代社会&#xff0c;婚恋交友已经成为了人们日常生活中的一项重要任务。为了方便用户进行相亲交友活动&#xff0c;各种相亲交友APP系统和婚恋交友社交软件应运而生。本文将介绍相亲交友APP系统、婚恋交友社交软件的开发以及语音聊天平台的定制开发的相关知识和指导。 一、…