同一条SQL为何执行计划会突然变化:从参数嗅探到多计划缓存的技术突围
想象这样一个场景:你的生产环境中有一个存储过程,平时执行只需几百毫秒,突然某天开始,同样的调用却需要几分钟甚至更长时间。你检查了服务器资源——CPU、内存、磁盘IO都正常。你把存储过程中的SQL语句单独拎出来执行,发现跑得飞快。你尝试ALTER一下存储过程(什么代码都没改),问题竟然消失了。 ...
想象这样一个场景:你的生产环境中有一个存储过程,平时执行只需几百毫秒,突然某天开始,同样的调用却需要几分钟甚至更长时间。你检查了服务器资源——CPU、内存、磁盘IO都正常。你把存储过程中的SQL语句单独拎出来执行,发现跑得飞快。你尝试ALTER一下存储过程(什么代码都没改),问题竟然消失了。 ...
2015年,慕尼黑工业大学的研究团队做了一个实验:他们把PostgreSQL查询优化器的基数估计值全部替换成真实值,然后观察113个复杂查询的执行时间变化。 ...
你花了两小时设计了一套"完美"的索引方案:where条件列建了索引,排序字段建了索引,连join的列都建了索引。上线第一天,监控系统就开始报警——那条"应该很快"的查询,执行时间飙到了30秒。 ...