3 min read

Readyset ICP优化:冷路径跨越式连接性能飞跃超450倍

Readyset通过引入Index Condition Pushdown(ICP)技术,显著优化了其在缓存未命中(cold path)场景下的查询性能,特别是在处理“跨越式连接”(straddled joins)时。此前的哈希连接算法在面对低基数性谓词时,会因需要扫描大量数据并进行不必要的物化而导致高延迟和I/O瓶颈。

核心洞察与关键发现 Readyset的查询引擎在处理跨越式连接时,旧的哈希连接策略导致了严重的性能问题。具体表现为,即使过滤条件(如用户邮箱或订单状态)仅应用于连接的某一侧,引擎仍会独立评估并物化两侧数据,进而执行连接操作。在低基数性谓词(例如,一个非常普遍的订单状态)存在的情况下,这会迫使系统扫描几乎整个表,产生巨量I/O和内存开销。通过剖析发现,高达30%的执行时间消耗在数据解压上,但禁用压缩后问题并未消失,而是转移为磁盘读取瓶颈,表明根本原因是需要读取的数据量过大。一个典型的场景是,当一个高度选择性的用户过滤条件(返回1行)与一个低选择性的订单过滤条件(返回99%的行)结合时,旧策略会物化数百万行订单数据,仅为丢弃大部分,造成资源极大浪费。

战略分析与趋势预判 新的ICP策略通过将连接键与原始谓词结合,并将复合条件“下推”至存储引擎(如RocksDB)。这使得存储引擎能够利用索引(例如,(user_id, status)复合索引)直接检索满足条件的行,从而避免了全表扫描和不必要的中间数据物化。基准测试显示,新策略将吞吐量提升了超过450倍,平均延迟降低了超过450倍。这一优化使得Readyset在缓存未命中时也能提供接近缓存命中的性能水平,极大地增强了其在真实生产环境下的鲁棒性和效率。该技术的成功应用预示着数据库和查询引擎在冷路径优化上将更加依赖于存储引擎的智能索引和谓词下推能力,以实现端到端的高效数据处理。

Readyset | Drop-in SQL Caching for PostgreSQL and MySQL
Increase the scale of your PostgreSQL and MySQL deployment by up to 100x with Readyset - all without modifying your application code or database. Start using Readyset today for free!
订阅情报