跳转到主要内容
内存 overcommit 是一种 Experimental 技术,旨在为查询设置更灵活的内存限制。 这项技术的核心思路是引入一些设置,用于表示查询可保证使用的内存量。 启用内存 overcommit 后,一旦达到内存限制,ClickHouse 会选择 overcommit 程度最高的查询,并尝试通过终止该查询来释放内存。 达到内存限制时,任何查询在尝试分配新内存时都会等待一段时间。 如果在 timeout 到期前释放了内存,查询将继续执行。 否则将抛出异常,并终止该查询。 根据达到的是哪种内存限制,系统会由全局或用户 overcommit 跟踪器来选择要停止或终止的查询。 如果 overcommit 跟踪器无法选择要停止的查询,则会抛出 MEMORY_LIMIT_EXCEEDED 异常。

用户 overcommit 跟踪器

用户 overcommit 跟踪器会在该用户的查询列表中找出 overcommit ratio 最大的查询。 查询的 overcommit ratio 计算方式为:已分配的字节数除以设置项 memory_overcommit_ratio_denominator_for_user 的值。 如果该查询的 memory_overcommit_ratio_denominator_for_user 等于零,overcommit 跟踪器将不会选择该查询。 等待超时时间由设置项 memory_usage_overcommit_max_wait_microseconds 指定。 示例
SELECT number FROM numbers(1000) GROUP BY number SETTINGS memory_overcommit_ratio_denominator_for_user=4000, memory_usage_overcommit_max_wait_microseconds=500

全局 overcommit 跟踪器

全局 overcommit 跟踪器会在所有查询中找出 overcommit ratio 最大的查询。 这里,overcommit ratio 的计算方式为:已分配的字节数除以设置 memory_overcommit_ratio_denominator 的值。 如果某个查询的 memory_overcommit_ratio_denominator 等于零,overcommit 跟踪器就不会选择该查询。 等待超时时间由配置文件中的 memory_usage_overcommit_max_wait_microseconds 参数设置。
最后修改于 2026年6月10日