Ограничение бюджета памяти CockroachDb

У меня локальная установка CockroachDb на моем ПК с Windows, и когда я запускаю определенный запрос выбора, я получаю следующее сообщение об ошибке:

Запрошено 7143455 байт, выделено 127403581 байт, бюджет - 134217728 байт.

Я прочитал сообщение в блоге здесь, но не нашел решения . Я буду признателен за помощь в том, как увеличить этот предел бюджета.


person Yusuff Sodiq    schedule 28.05.2018    source источник
comment
Какие запросы у вас выполняются? Предположительно, это может быть ошибка, обнаруженная в учете памяти для запросов с использованием столбцов JSONB, которая будет исправлена ​​в версии 2.0.3 через пару недель.   -  person Ben Darnell    schedule 28.05.2018
comment
@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;   -  person Yusuff Sodiq    schedule 28.05.2018


Ответы (1)


В версиях CockroachDB между 2.0 и 2.0.2 есть ошибка в учете памяти для столбцов JSONB, приводящая к этой ошибке. Ошибка будет исправлена ​​в версии 2.0.3, которая должна выйти в середине июня.

В качестве обходного пути вы можете переписать этот запрос, чтобы он был более эффективным (это может уменьшить использование памяти, достаточное для работы даже с ошибкой. Даже если это не так, он ускорит запрос, когда 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, которая является более эффективно.

Синтаксис OFFSET 0 FETCH NEXT N ROWS ONLY синтаксис взят из стандарта SQL, поэтому он должен работать с большинством баз данных. CockroachDB также поддерживает ключевое слово LIMIT, которое используется в MySQL и PostgreSQL с той же целью.

person Ben Darnell    schedule 28.05.2018
comment
Спасибо за оптимизированный запрос. Я использовал его, и ошибка исчезла. В любом случае с нетерпением жду исправления в версии 2.0.3. - person Yusuff Sodiq; 31.05.2018