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

Sudhansu Sahu updated CLOUDSTACK-8917:
--------------------------------------
    Description: 
In load test environment listVirtualmachine takes 8-11 sec to load.

Performance bottleneck in listVirtualmachine command is fetching the count and 
distinct vms.
{noformat}
        // search vm details by ids
        Pair<List<UserVmJoinVO>, Integer> uniqueVmPair = 
_userVmJoinDao.searchAndCount(sc, searchFilter);
        Integer count = uniqueVmPair.second();
{noformat}
 
 This takes 95% of the total time.

To fetch the count and distinct vms we are using below sqls.
 
 Query 1: SELECT DISTINCT(user_vm_view.id) FROM user_vm_view WHERE 
user_vm_view.account_type != 5  AND user_vm_view.display_vm = 1  AND 
user_vm_view.removed IS NULL  ORDER BY user_vm_view.id ASC  LIMIT 0, 20
 
 Query 2: select count(distinct id) from user_vm_view WHERE 
user_vm_view.account_type != 5  AND user_vm_view.display_vm = 1  AND 
user_vm_view.removed IS NULL
 

Query 2 is a problematic query. 

If we rewrite the query as mentioned below then it will be ~2x faster.

select count(*) from (select distinct id from user_vm_view WHERE 
user_vm_view.account_type != 5  AND user_vm_view.display_vm = 1  AND 
user_vm_view.removed IS NULL) as temp;



> Instance tab takes long time to load with 12K active VM (total vms: 40K)
> ------------------------------------------------------------------------
>
>                 Key: CLOUDSTACK-8917
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-8917
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the 
> default.) 
>          Components: Management Server
>    Affects Versions: 4.6.0
>            Reporter: Sudhansu Sahu
>
> In load test environment listVirtualmachine takes 8-11 sec to load.
> Performance bottleneck in listVirtualmachine command is fetching the count 
> and distinct vms.
> {noformat}
>         // search vm details by ids
>         Pair<List<UserVmJoinVO>, Integer> uniqueVmPair = 
> _userVmJoinDao.searchAndCount(sc, searchFilter);
>         Integer count = uniqueVmPair.second();
> {noformat}
>  
>  This takes 95% of the total time.
> To fetch the count and distinct vms we are using below sqls.
>  
>  Query 1: SELECT DISTINCT(user_vm_view.id) FROM user_vm_view WHERE 
> user_vm_view.account_type != 5  AND user_vm_view.display_vm = 1  AND 
> user_vm_view.removed IS NULL  ORDER BY user_vm_view.id ASC  LIMIT 0, 20
>  
>  Query 2: select count(distinct id) from user_vm_view WHERE 
> user_vm_view.account_type != 5  AND user_vm_view.display_vm = 1  AND 
> user_vm_view.removed IS NULL
>  
> Query 2 is a problematic query. 
> If we rewrite the query as mentioned below then it will be ~2x faster.
> select count(*) from (select distinct id from user_vm_view WHERE 
> user_vm_view.account_type != 5  AND user_vm_view.display_vm = 1  AND 
> user_vm_view.removed IS NULL) as temp;



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

Reply via email to