Re: [h2] org.h2.util.StringUtils.toUpperEnglish can be a bottleneck

2015-02-11 Thread Steve McLeod
The patch seems good. Here are my test results: Typical query time after JVM warm-up h2 1.3.176 - 716 ms h2 1.4.185 (but not using MV_STORE) - 350 ms h2 1.4.185 (but not using MV_STORE) with patch - 243 ms Regards, Steve On Tuesday, 10 February 2015 23:36:34 UTC+6:30, Thomas Mueller wrote: >

Re: [h2] org.h2.util.StringUtils.toUpperEnglish can be a bottleneck

2015-02-10 Thread Thomas Mueller
Hi, I have committed my patch, could you please test it? You would need to compile H2 from the trunk, see https://code.google.com/p/support/source/checkout Regards, Thomas On Tue, Feb 10, 2015 at 7:45 AM, Thomas Mueller < thomas.tom.muel...@gmail.com> wrote: > Hi, > > It might make sense to us

Re: [h2] org.h2.util.StringUtils.toUpperEnglish can be a bottleneck

2015-02-09 Thread Thomas Mueller
Hi, It might make sense to use a concurrent and global cache in the StringUtils class instead, similar to StringUtils.softCache (StringUtils.fromCacheOrNew). That way, other components could benefit from it as well, and small result sets would also benefit. I will write a patch. Regards, Thomas

Re: [h2] org.h2.util.StringUtils.toUpperEnglish can be a bottleneck

2015-02-09 Thread Steve McLeod
Hi Thomas and Noel, I've created a patch that caches the results of toUpperEnglish on a per JdbcResultSet basis. In my specific use case (fetching 95 columns by column name over tens of thousands of rows), the query speed-up was extremely significant, and utterly repeatable. Before: 510 millise

Re: [h2] org.h2.util.StringUtils.toUpperEnglish can be a bottleneck

2015-02-09 Thread Steve McLeod
Hi Noel, On Monday, 9 February 2015 19:14:32 UTC+6:30, Noel Grandin wrote: > > Hi > > > On 2015-02-09 02:21 PM, Steve McLeod wrote: > > final ResultSet resultSet = conn.prepareStatement("SELECT * > FROM foobar").executeQuery(); > > int rowCount = 0; > > while (res

Re: [h2] org.h2.util.StringUtils.toUpperEnglish can be a bottleneck

2015-02-09 Thread Noel Grandin
Hi On 2015-02-09 02:21 PM, Steve McLeod wrote: final ResultSet resultSet = conn.prepareStatement("SELECT * FROM foobar").executeQuery(); int rowCount = 0; while (resultSet.next()) { rowCount++; final int columnCount = resultSet.getMetaData()

[h2] org.h2.util.StringUtils.toUpperEnglish can be a bottleneck

2015-02-09 Thread Steve McLeod
Hi all, I've got some H2 code that executes a query that returns possibly 100,000+ rows and 95 columns. I need to retrieve every column value by name, using JDBC. Using H2's built-in profiling tool, StringUtils.toUpperEnglish seems to be a bottleneck. It seems that JdbcResultSet.getColumnIndex(