<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>UUIDv7 on Zampo Blog</title><link>https://blog.cpdd.fyi/tags/uuidv7/</link><description>Recent content in UUIDv7 on Zampo Blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 08 Jul 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://blog.cpdd.fyi/tags/uuidv7/index.xml" rel="self" type="application/rss+xml"/><item><title>PostgreSQL 18：异步 I/O 不光是快 3 倍</title><link>https://blog.cpdd.fyi/posts/postgresql-18-new-features/</link><pubDate>Wed, 08 Jul 2026 10:00:00 +0800</pubDate><guid>https://blog.cpdd.fyi/posts/postgresql-18-new-features/</guid><description>&lt;p&gt;PG 大版本升级，过去一直有两件烦心事：&lt;/p&gt;
&lt;p&gt;一是升完了统计信息丢光，优化器两眼一抹黑，ANALYZE 跑完之前查询崩好几天。二是折腾半天，性能提升不明显，不值得冒这个险。&lt;/p&gt;
&lt;p&gt;PG 18 把这两件事都动了。&lt;/p&gt;
&lt;p&gt;而且这次不是小步迭代——几个改动直接改了 PG 用了二十年的工作方式。&lt;/p&gt;
&lt;h2 id="最大的改法异步-io"&gt;最大的改法：异步 I/O&lt;/h2&gt;
&lt;p&gt;PG 以前读数据是这样的：发一个 I/O 请求，进程挂起等数据回来，再发下一个。这在机械硬盘时代是自然的——磁盘自己就是串行的。但在 NVMe SSD 面前，CPU 等磁盘的时间越来越不值。&lt;/p&gt;
&lt;p&gt;PG 18 引入了异步 I/O 子系统。一次发一堆请求，谁先回来谁先处理，CPU 不再空等。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.cpdd.fyi/images/postgresql-18-new-features/inline-01.png" alt="异步 I/O 原理对比"&gt;&lt;/p&gt;
&lt;p&gt;官方数据：顺序扫描在某些场景下能到 &lt;strong&gt;3 倍&lt;/strong&gt;。不是 30%，是 3 倍。&lt;/p&gt;
&lt;p&gt;怎么开？一行配置：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;io_method = &amp;#39;io_uring&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;io_uring&lt;/code&gt; 是 Linux 5.1+ 的高性能异步接口。内核版本不够也可以用 &lt;code&gt;worker&lt;/code&gt; 模式——走工作线程模拟异步，差一点但比老模式强。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这个改动最值钱的地方：&lt;/strong&gt; 不是跑测试快 3 倍，而是你那些吃顺序扫描的场景——数仓 ETL、全表报表、大表 vacuum、bitmap 扫描——都能吃上。如果业务 IO 密集，升了立竿见影。&lt;/p&gt;
&lt;h2 id="uuidv7b-tree-不再怕随机-id"&gt;UUIDv7：B-tree 不再怕随机 ID&lt;/h2&gt;
&lt;p&gt;UUID 做分布式主键的好处不用多说：全局唯一、不依赖自增。但 UUIDv4 是纯随机的，往 B-tree 里写的时候，每个新值可能落在任何位置。结果是什么？索引页频繁分裂，写入性能崩得比不用 UUID 还惨。&lt;/p&gt;
&lt;p&gt;好多团队因为这个原因又退回自增了。&lt;/p&gt;
&lt;p&gt;PG 18 原生支持 UUIDv7——时间戳在前，保证新生成的 UUID 大致有序。B-tree 写入不再分裂。&lt;/p&gt;</description></item></channel></rss>