内存过度提交
内存超量提交是一种实验性技术,旨在允许为查询设置更灵活的内存限制。
该技术的思路是引入设置,这些设置可以表示查询可以保证使用的内存量。当启用内存超量提交并且达到内存限制时,ClickHouse 将选择超量提交最多的查询,并尝试通过终止该查询来释放内存。
当达到内存限制时,任何查询在尝试分配新内存时都会等待一段时间。如果超时后内存被释放,查询将继续执行。否则,将抛出异常并终止该查询。
根据达到的是哪个内存限制,停止或终止查询的选择由全局或用户超量提交跟踪器执行。如果超量提交跟踪器无法选择要停止的查询,则会抛出 MEMORY_LIMIT_EXCEEDED 异常。
用户超量提交跟踪器
用户超量提交跟踪器在用户的查询列表中找到超量提交比率最高的查询。查询的超量提交比率计算为已分配的字节数除以 memory_overcommit_ratio_denominator_for_user 设置的值。
如果查询的 memory_overcommit_ratio_denominator_for_user 等于零,超量提交跟踪器将不会选择该查询。
等待超时由 memory_usage_overcommit_max_wait_microseconds 设置。
示例
全局超量提交跟踪器
全局超量提交跟踪器在所有查询列表中找到超量提交比率最高的查询。在这种情况下,超量提交比率计算为已分配的字节数除以 memory_overcommit_ratio_denominator 设置的值。
如果查询的 memory_overcommit_ratio_denominator 等于零,超量提交跟踪器将不会选择该查询。
等待超时由配置文件中的 memory_usage_overcommit_max_wait_microseconds 参数设置。