You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@phoenix.apache.org by Fergus Nelson via user <us...@phoenix.apache.org> on 2024/03/26 20:52:50 UTC
UPDATE_CACHE_FREQUENCY on tables with a ROW_TIMESTAMP column
Hi,
It seems that the UPDATE_CACHE_FREQUENCY setting is ignored on tables with a ROW_TIMESTAMP column set. This results in an RPC call to fetch the SYSTEM.CATALOG table for every query to such a table and resulting hotspotting on the node assigned the system catalog region.
I was wondering if there is any way to avoid these calls on such a table?
A little digging led me to PHOENIX-4187<https://issues.apache.org/jira/browse/PHOENIX-4187> <https://issues.apache.org/jira/browse/PHOENIX-4187> which introduced the change to ignore the cache for tables with a row timestamp column. I was wondering what the reasoning / thinking was for the stipulation that tables with row timestamp column cannot be cached?
For reference we are using 4.14.0-HBase-1.4 version of the driver, which I realise is quite old, but if anyone has any incite that would be helpful.
Below is the stack trace of when the cache is being updated.
- waiting on <0x6cb6aa28> (a java.util.concurrent.FutureTask)
- locked <0x6cb6aa28> (a java.util.concurrent.FutureTask)
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
at java.util.concurrent.FutureTask.get(FutureTask.java:191)
at org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1787)
at org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1743)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1362)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1343)
at org.apache.phoenix.query.ConnectionQueryServicesImpl.getTable(ConnectionQueryServicesImpl.java:1560)
at org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:643)
at org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:538)
at org.apache.phoenix.compile.FromCompiler$BaseColumnResolver.createTableRef(FromCompiler.java:573)
at org.apache.phoenix.compile.FromCompiler$SingleTableColumnResolver.<init>(FromCompiler.java:391)
at org.apache.phoenix.compile.FromCompiler.getResolverForQuery(FromCompiler.java:228)
at org.apache.phoenix.compile.FromCompiler.getResolverForQuery(FromCompiler.java:206)
at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:482)
at org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:456)
at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:302)
at org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:291)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:290)
at org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:283)
at org.apache.phoenix.jdbc.PhoenixPreparedStatement.executeQuery(PhoenixPreparedStatement.java:193)
at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:698)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:639)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:690)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:717)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:767)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForObject(NamedParameterJdbcTemplate.java:211)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForObject(NamedParameterJdbcTemplate.java:219)
Many thanks
Fergus
Fergus Nelson
Infrastructure Architect
[image.jpeg]
fnelson@reliaquest.com / ReliaQuest.com<https://reliaquest.com/>