You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@sentry.apache.org by "kalyan kumar kalvagadda (JIRA)" <ji...@apache.org> on 2018/10/10 19:07:00 UTC

[jira] [Comment Edited] (SENTRY-2305) Optimize time taken for persistence HMS snapshot by persisting in parallel

    [ https://issues.apache.org/jira/browse/SENTRY-2305?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16642479#comment-16642479 ] 

kalyan kumar kalvagadda edited comment on SENTRY-2305 at 10/10/18 7:06 PM:
---------------------------------------------------------------------------

I have considered multiple options. Persisting in batches is not an option with out changing the schema as the data nucleus does not persist row in batches for tables which have foreign key on other tables.

I see that best option is to persist the paths in parallel. It gave good results.

*Solution Approach:*

I have used a thread pool to persist the snapshot. Size of this thread pool is configurable. Paths for each object database/table are submitted to this thread pool. If for reason some of the paths are not pesisted, snapshot is removed and exception is throw back.

  This patch along with SENTRY-2423 was 5 times faster when tested with below.

 
||Object Type||Count||
|Databases|209|
|Tables|2100|
|Partitions|200004|

 

 


was (Author: kkalyan):
I have considered multiple options. Persisting in batches is not an option with out changing the schema as the data nucleus does not persist row in batches for tables which have foreign key on other tables.

I see that best option is to persist the paths in parallel. It gave good results.

*Solution Approach:*

I have used a thread pool to persist the snapshot. Size of this thread pool is configurable. Paths for each object database/table are submitted to this thread pool. If for reason some of the paths are not pesisted, snapshot is removed and exception is throw back.

  This patch along with SENTRY-2423 gave was 5 times faster when tested with below.

 
||Object Type||Count||
|Databases|209|
|Tables|2100|
|Partitions|200004|

 

 

> Optimize time taken for persistence HMS snapshot by persisting in parallel
> --------------------------------------------------------------------------
>
>                 Key: SENTRY-2305
>                 URL: https://issues.apache.org/jira/browse/SENTRY-2305
>             Project: Sentry
>          Issue Type: Sub-task
>          Components: Sentry
>    Affects Versions: 2.1.0
>            Reporter: kalyan kumar kalvagadda
>            Assignee: kalyan kumar kalvagadda
>            Priority: Major
>         Attachments: SENTRY-2305.001.patch, SENTRY-2305.002.patch, SENTRY-2305.003.patch
>
>
> There are couple of options
> # Break the total snapshot into to batches and persist all of them in parallel in different transactions. As sentry uses repeatable_read isolation level we should be able to have parallel writes on the same table. This bring an issue if there is a failure in persisting any of the batches. This approach needs additional logic of cleaning the partially persisted snapshot. I’m evaluating this option. 
> ** *Result:* Initial results are promising. Time to persist the snapshot came down by 60%.
> # Try disabling L1 Cache for persisting the snapshot.
> # Try persisting the snapshot entries sequentially in separate transactions. As transactions which commit huge data might take longer as they take a lot of CPU cycles to keep the rollback log up to date.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)