目录
一、场景
UUID%E7%9A%84%E7%89%88%E6%9C%AC-toc" style="margin-left:0px;">二、UUID的版本
UUID-toc" style="margin-left:40px;">2.1 基于时间的UUID
UUID-toc" style="margin-left:40px;">2.2 DCE安全的UUID
UUID%EF%BC%88MD5%E3%80%81SH1%EF%BC%89-toc" style="margin-left:40px;">2.3 基于命名空间的UUID(MD5、SH1)
UUID(%E6%9C%80%E5%B8%B8%E7%94%A8)-toc" style="margin-left:40px;">2.4 基于随机数的UUID(最常用)
UUID%20%E4%BC%9A%E5%BC%95%E8%B5%B7IO%E5%BC%82%E5%B8%B8-toc" style="margin-left:0px;"> 三、为什么 UUID 会引起IO异常
专栏链接:IT老齐架构300讲笔记专栏
一、场景
财政部金财工程平台在代理行日终结算时,经常出现磁盘的IO异常,导致经常出现高延迟。
这个问题一直困扰我们很长时间,对比发现在大量数据新增时磁盘IO居高不下,多次测试后发现是UUID主键在搞鬼。
UUID%E7%9A%84%E7%89%88%E6%9C%AC">二、UUID的版本
UUID">2.1 基于时间的UUID
UUID">2.2 DCE安全的UUID
- DCE(身份验证和安全服务)
- 涉及侵犯用户隐私
- 有损时间戳导致精度丢失
UUID%EF%BC%88MD5%E3%80%81SH1%EF%BC%89">2.3 基于命名空间的UUID(MD5、SH1)
- 在相同的命名空间下可能会出现UUID冲突
UUID(%E6%9C%80%E5%B8%B8%E7%94%A8)">2.4 基于随机数的UUID(最常用)
- 完全随机生成,会存在极小概率重复的情况
- 与外部环境无关,不涉及环境信息
- 生成内容无序无规律
- 目前的主流做法
UUID%20%E4%BC%9A%E5%BC%95%E8%B5%B7IO%E5%BC%82%E5%B8%B8"> 三、为什么 UUID 会引起IO异常
新增记录所在的数据页已满,数据库需要申请一个新的数据页存储数据
这种现象被称为"页分裂"
页分裂确保后一个数据页中的所有的 ID 值一定比数据页中的 ID 值大
在大并发环境环境下增加了磁盘IO的压力,无序ID才是罪魁祸首
解决办法:改为有序的数字主键生成策略就可以了
如美团Leaf / 推特Snowflake