【问题标题】:CockroachDb memory budget constraintCockroachDb 内存预算约束
【发布时间】:2018-05-28 08:05:29
【问题描述】:

我在我的 Windows PC 上本地安装了 CockroachDb,当我运行特定的选择查询时,我收到以下错误消息:

请求 7143455 字节,当前分配 127403581 字节,预算中 134217728 字节。

我已经阅读了一篇博文here,但我还没有找到解决方案。对于如何提高此预算限制,我将不胜感激。

【问题讨论】:

  • 您正在运行哪种查询?猜测一下,这可能是在内存占涉及 JSONB 列的查询时发现的一个错误,这将在几周后在 2.0.3 版本中修复。
  • @BenDarnell 你是对的,查询涉及 JsonB 列。查询为:SELECT ID,JsonData,PrimaryIDs,IsActive,IsDeleted FROM ( SELECT ID,JsonData,PrimaryIDs,IsActive,IsDeleted, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum FROM "TableName" where LOWER(JsonData->> 'Name') like '%transaction%' ) AS TBL WHERE TBL.RowNum BETWEEN 1 AND 100 order by ID;

标签: cockroachdb


【解决方案1】:

2.0 和 2.0.2 之间的 CockroachDB 版本在 JSONB 列的内存核算中存在错误,导致此错误。该错误将在 2.0.3 版中修复,将于 6 月中旬发布。

作为一种解决方法,您可以重写此查询以提高效率(这可能会减少内存使用量,即使有错误也可以工作。即使没有,它也会在 2.0 时加快查询速度.3 可用)。如果我正确阅读了您的查询,则相当于

SELECT ID, JsonData,PrimaryIDs,IsActive,IsDeleted FROM "TableName"
    WHERE LOWER(JsonData->>'Name') LIKE '%transaction%'
    ORDER BY ID OFFSET 0 FETCH NEXT 100 ROWS ONLY

ROW_NUMBER() 的子查询与旧版本的 SQL Server 一起使用,但自 SQL Server 2012 起,OFFSET 0 FETCH NEXT N ROWS ONLY 版本已可用,并且是 more efficient

OFFSET 0 FETCH NEXT N ROWS ONLY 语法来自 SQL 标准,因此它应该适用于大多数数据库。 CockroachDB 还支持在 MySQL 和 PostgreSQL 中用于相同目的的 LIMIT 关键字。

【讨论】:

  • 感谢优化查询。我用了它,错误消失了。无论如何都期待 2.0.3 版中的修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 2023-02-20
  • 2019-09-21
  • 2012-08-18
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多