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]


fnel...@reliaquest.com / ReliaQuest.com<https://reliaquest.com/>

Reply via email to