Zhenning Zhang created KYLIN-5256: ------------------------------------- Summary: Add a cache for the system property get by the optional config in KylinConfigBase Key: KYLIN-5256 URL: https://issues.apache.org/jira/browse/KYLIN-5256 Project: Kylin Issue Type: Improvement Reporter: Zhenning Zhang Assignee: Zhenning Zhang Fix For: 5.0-alpha
Currently for every getOptional() in {*}KylinConfigBase{*}, it will invoke *System.getProperty* in which will be blocked by the lock of hash table. In most cases, the config will not be changed. It's better to cache them with concurrent hash map. [https://community.oracle.com/tech/developers/discussion/4490235/the-performance-impact-of-java-lang-system-getproperty] Stack: {code:java} "Query 73183025-c617-a3e5-64b9-f21aa6261c10-356" #356 daemon prio=5 os_prio=0 tid=0x00007f6900468000 nid=0x103c waiting for monitor entry [0x00007f68aa0e5000] java.lang.Thread.State: BLOCKED (on object monitor) at java.util.Hashtable.get(Hashtable.java:363) - waiting to lock <0x00007f69f0034548> (a java.util.Properties) at java.util.Properties.getProperty(Properties.java:969) at org.apache.kylin.common.KylinExternalConfigLoader.getProperty(KylinExternalConfigLoader.java:164) at org.apache.kylin.common.PropertiesDelegate.getProperty(PropertiesDelegate.java:58) at org.apache.kylin.common.PropertiesDelegate.getProperty(PropertiesDelegate.java:65) at org.apache.kylin.common.KylinConfigBase.getOptional(KylinConfigBase.java:206) at org.apache.kylin.common.KapConfig.defaultDecimalScale(KapConfig.java:558) at org.apache.kylin.query.calcite.KylinRelDataTypeSystem.getDefaultScale(KylinRelDataTypeSystem.java:102) at org.apache.calcite.sql.type.BasicSqlType.generateTypeString(BasicSqlType.java:186) "Query 5d2f5f9b-a4ae-a919-a94f-79e5819e9dac-359" #359 daemon prio=5 os_prio=0 tid=0x00007f6902a92000 nid=0x103f waiting for monitor entry [0x00007f68a94e3000] java.lang.Thread.State: BLOCKED (on object monitor) at java.util.Hashtable.get(Hashtable.java:363) - waiting to lock <0x00007f69f003dd30> (a java.util.Properties) at java.util.Properties.getProperty(Properties.java:969) at java.lang.System.getProperty(System.java:722) at org.apache.kylin.common.KylinConfigBase.getOptional(KylinConfigBase.java:204) at org.apache.kylin.common.KylinConfigBase.streamingEnabled(KylinConfigBase.java:1538) at org.apache.kylin.metadata.model.NTableMetadataManager.isTableAccessible(NTableMetadataManager.java:334) "Query 3ce57dbc-cc0d-307e-2d48-f6c969d99426-361" #361 daemon prio=5 os_prio=0 tid=0x00007f6902a96800 nid=0x1041 waiting for monitor entry [0x00007f68a8ce0000] java.lang.Thread.State: BLOCKED (on object monitor) at java.util.Hashtable.get(Hashtable.java:363) - waiting to lock <0x00007f69f0034548> (a java.util.Properties) at java.util.Properties.getProperty(Properties.java:969) at org.apache.kylin.common.KylinExternalConfigLoader.getProperty(KylinExternalConfigLoader.java:164) at org.apache.kylin.common.PropertiesDelegate.getProperty(PropertiesDelegate.java:58) at org.apache.kylin.common.PropertiesDelegate.getProperty(PropertiesDelegate.java:65) at org.apache.kylin.common.KylinConfigBase.getOptional(KylinConfigBase.java:206) at org.apache.kylin.common.KylinConfigExt.getOptional(KylinConfigExt.java:86) at org.apache.kylin.common.KylinConfigBase.getSourceNameCaseSensitiveEnabled(KylinConfigBase.java:1194) at org.apache.kylin.query.schema.OLAPTable.deriveRowType(OLAPTable.java:228) at org.apache.kylin.query.schema.OLAPTable.getRowType(OLAPTable.java:208) {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)