Viraj Jasani created PHOENIX-7432: ------------------------------------- Summary: getTable for PHYSICAL_TABLE link should use common utility Key: PHOENIX-7432 URL: https://issues.apache.org/jira/browse/PHOENIX-7432 Project: Phoenix Issue Type: Task Reporter: Viraj Jasani
We have seen large GC spikes when some views under the same table -> view hierarchy get dropped concurrently. Upon analyzing in detail ([~jisaac]'s heap dump analysis), we found that multiple drop view threads are busy scanning the same table row for PHYSICAL_TABLE link. This recursive getTable is introduced by PHOENIX-6247 logical-physical table separation. We have also fixed a bug that has caused all active handlers on SYSTEM.CATALOG regionserver to get occupied due to recursive getTable call for view index table that does not exist in SYSTEM.CATALOG, we have fixed it with PHOENIX-7369. However, with the current analysis, it is clear that getTable is trying to scan large row for the given table (family name for the PHYSICAL_TABLE link). Specifically, multiple threads can hold large num of Cells if the row is bigger and this can mean that GC is not able to clean up some of these large objects as they are too many. We have found one noticeable difference b/ when recursive getTable() on physical link table and getTable() on given table tries to retrive PTable by scanning SYSTEM.CATALOG. getTable() uses a write lock to protect metadata cache update and by doing so it only allows single thread to scan SYSTEM.CATALOG for the given table entry (key: tenant id + schema name + table name). However, when recursive call to physical table link using getTable() has new implementation and it does not use any lock for the given table name and therefore multiple threads can scan SYSTEM.CATALOG rather than single thread doing it so that others can just get the object from metadata cache. The proposal of this Jira is to remove unnecessary getTable() internal implementation that tries to retrieve PTable object without any lock. -- This message was sent by Atlassian Jira (v8.20.10#820010)