[ 
https://issues.apache.org/jira/browse/PHOENIX-2995?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Thomas D'Silva updated PHOENIX-2995:
------------------------------------
    Attachment: PHOENIX-2995-v5.patch

[~jamestaylor]

Using a read write lock improves performance when we are opening multiple 
phoenix connection and not mutating the shared cache. I modified 
ConnectionQueryServicesImpl to use a ReentrantReadWriteLock. The 
{code}      public PhoenixConnection connect(String url, Properties info) 
throws SQLException {code} and {code}     private HashSet<String> 
existingColumnFamiliesForBaseTable(PName baseTableName) throws 
TableNotFoundException {code} methods use the read lock. 
All the other methods that mutate the cache use the write lock. 

I also added a condition using the write lock (instead of wait/notify). The 
{code}      private PMetaData metaDataMutated(PName tenantId, String tableName, 
long tableSeqNum, Mutator mutator) throws SQLException {code} calls await and 
all other methods that use the write lock calls signal.

I reverted the changes I made to call updateCache on the physical table of the 
view. 

> Write performance severely degrades with large number of views 
> ---------------------------------------------------------------
>
>                 Key: PHOENIX-2995
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2995
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Mujtaba Chohan
>            Assignee: Thomas D'Silva
>              Labels: Argus
>             Fix For: 4.8.1
>
>         Attachments: PHOENIX-2995-v2.patch, PHOENIX-2995-v3.patch, 
> PHOENIX-2995-v4.patch, PHOENIX-2995-v5.patch, PHOENIX-2995.patch, 
> create_view_and_upsert.png, image.png, image2.png, image3.png, upsert_rate.png
>
>
> Write performance for each 1K batch degrades significantly when there are 
> *10K* views being written in random with default 
> {{phoenix.client.maxMetaDataCacheSize}}. With all views created, upsert rate 
> remains around 25 seconds per 1K batch i.e. ~2K rows/min upsert rate. 
> When {{phoenix.client.maxMetaDataCacheSize}} is increased to 100MB+ then view 
> does not need to get re-resolved and upsert rate gets back to normal ~60K 
> rows/min.
> With *100K* views and {{phoenix.client.maxMetaDataCacheSize}} set to 1GB, I 
> wasn't able create all 100K views as upsert time for each 1K batch keeps on 
> steadily increasing. 
> Following graph shows 1K batch upsert rate over time with variation of number 
> of views. Rows are upserted to random views {{CREATE VIEW IF NOT EXISTS ... 
> APPEND_ONLY_SCHEMA = true, UPDATE_CACHE_FREQUENCY=900000}} is executed before 
> upsert statement.
> !upsert_rate.png!
> Base table is also created with {{APPEND_ONLY_SCHEMA = true, 
> UPDATE_CACHE_FREQUENCY = 900000, AUTO_PARTITION_SEQ}}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to