Eu tenho uma tabela com cerca de 1 milhão de linhas que está sendo tentada para ser lida por um programa Java por meio da interface TQL (ou seja, usando apenas a API Java normal, sem SQL). Mas quando tento ler o contêiner, encontro um erro de memória:
Exception in thread "main" com.toshiba.mwcloud.gs.common.GSStatementException: [1043:CM_MEMORY_LIMIT_EXCEEDED] Memory limit exceeded (name=transactionWork.workerStack, requestedSize=67108880, totalSizeLimit=134217728, freeSizeLimit=1048576, totalSize=74448896, freeSize=0) (address=172.18.0.2:10001, partitionId=29)
a solução óbvia é aumentar o storeMemoryLimit e, portanto, aumentei-o do padrão de 1.024 MB para o dobro, em 2.048 MB. Embora eu tenha aumentado o limite de memória, estou recebendo o mesmo erro ao ser lido no programa Java, pois os valores de totalSizeLimit etc permanecem os mesmos, o que significa que aumentar ainda mais o storeMemoryLimit não ajudaria neste caso (embora eu tenha tentado ).
Também mudei o método de compactação de NONE para o novo ZSTD na esperança de que ele pudesse compactar o conjunto de dados pequeno o suficiente para ser lido de uma vez sem atingir o limite de memória, mas isso também falhou.
Minha única outra idéia é mudar de TQL para SQL e aumentar o limite de memória SQL, mas prefiro não mudar todo o meu código.
Alguma idéia de como ler esta tabela inteira de uma só vez?
Respondendo minha própria pergunta aqui. Depois de ler mais alguns documentos, há uma opção que pode ser definida no arquivo de configuração gs_node.json que não está incluída por padrão. Você precisa adicionar uma nova entrada na transação chamada workMemoryLimit.
Você pode ver os documentos mencionando isso aqui: https://docs.griddb.net/architecture/parameter/#node-definition-file-gs-node-json
Basicamente, essa configuração define o limite superior de memória para transações conduzidas com TQL, que é exatamente o que estou fazendo acima.
O valor padrão parece ser 128 MB, mas aumentei para ~ 2 GB e agora não há problemas com a leitura da minha tabela de 1,3 milhão de linhas diretamente na memória.