Re: Data cache size limit is reached

[email protected] Tue, 22 Oct 2019 14:54:28 +0100
Newsgroups gmane.comp.java.hsqldb.user
Message-ID <[email protected]>
Thanks for the clarification!

Best regards.

On 22/10/2019 14:24, Fred Toussi via Hsqldb-user wrote:
> Data for CACHED tables is loaded into the memory cache row by row before it can be accessed.
> 
> If you reduce the cache size after inserting the rows, the new size must allow for at least few rows to load.
> 
> I will improve the docs to mention the fact that CACHE SIZE must be larger than your largest row.
> 
> Fred
> 
> On Tue, Oct 22, 2019, at 13:51, [email protected] wrote:
>> Hi.
>>
>> Using version 2.5.0 (also happens with older versions), given a database
>> with:
>> SET FILES CACHE SIZE 100
>> CREATE CACHED TABLE PUBLIC.DATA(VALUE VARCHAR(102400) DEFAULT '')
>>
>> when trying to insert a string with 102400 chars it leads to:
>>
>> java.sql.SQLException: Data cache size limit is reached: 100
>> 	at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
>> 	at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
>> 	at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
>> 	at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
>> 	at org.example.db.CacheSizeLimit.main(CacheSizeLimit.java:23)
>> Caused by: org.hsqldb.HsqlException: Data cache size limit is reached: 100
>> 	at org.hsqldb.error.Error.error(Unknown Source)
>> 	at org.hsqldb.error.Error.error(Unknown Source)
>> 	at org.hsqldb.persist.Cache.put(Unknown Source)
>> 	at org.hsqldb.persist.DataFileCache.add(Unknown Source)
>> 	at org.hsqldb.persist.RowStoreAVLDisk.add(Unknown Source)
>> 	at org.hsqldb.persist.RowStoreAVLDisk.getNewCachedObject(Unknown Source)
>> 	at org.hsqldb.Table.insertSingleRow(Unknown Source)
>> 	at org.hsqldb.StatementDML.insertSingleRow(Unknown Source)
>> 	at org.hsqldb.StatementInsert.getResult(Unknown Source)
>> 	at org.hsqldb.StatementDMQL.execute(Unknown Source)
>> 	at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
>> 	at org.hsqldb.Session.execute(Unknown Source)
>> 	... 3 more
>>
>>
>> Trying to insert two strings with 51200 chars each also leads to the
>> exception, on the second insert.
>> If the cache size is increased it works fine in both cases.
>>
>> The documentation of the table types [1] says:
>> Furthermore, only part of the data for each CACHED table is held in
>> memory, allowing tables with more data than can be held in memory.
>>
>> so I assumed that if a row does not fit in the cache it would not be cached.
>>
>> The cache size property [2] does not say that the minimum size depends
>> on or relates to the size of the rows. (I can't find that constraint in
>> other parts of the documentation either.)
>>
>> Am I misunderstanding how the cache works?
>>
>>
>> [1] http://hsqldb.org/doc/guide/management-chapt.html#mtc_table_types
>> [2] http://hsqldb.org/doc/guide/management-chapt.html#N1538F
>>
>> Thanks.
>> Best regards.
>>
>>
>> _______________________________________________
>> Hsqldb-user mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/hsqldb-user
>>
> 
> 
> _______________________________________________
> Hsqldb-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/hsqldb-user
>