cloudstack-mirror/server/src/com/cloud/api
Rajani Karuturi fb4e6ed6ba Merge pull request #894 from sudhansu7/CLOUDSTACK-8917
CLOUDSTACK-8917 : Instance tab takes long time to load with 12K Vmsmodified sql that is used for retrieving vm count .

In load test environment listVirtualmachine takes 8-11 sec to load. This environment has around 12k active VMs. Total number of rows is 190K.

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:
{noformat}
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
 {noformat}

 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;

Mysql Test result:

With 134 active Vms (total rows 349)
mysql> select count(*) from vm_instance;
+----------+
| count(*) |
+----------+
|      349 |
+----------+
1 row in set (0.00 sec)
mysql> select count(*) from user_vm_view;
+----------+
| count(*) |
+----------+
|      135 |
+----------+
1 row in set (0.02 sec)
mysql> 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;
+--------------------+
| count(distinct id) |
+--------------------+
|                134 |
+--------------------+
1 row in set (0.02 sec)

mysql> 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;
+----------+
| count(*) |
+----------+
|      134 |
+----------+
1 row in set (0.01 sec)

With 14326 active Vms (total rows 195660)

mysql> select count(*) from vm_instance;
+----------+
| count(*) |
+----------+
|   195660 |
+----------+
1 row in set (0.04 sec)
mysql> select count(*) from user_vm_view;
+----------+
| count(*) |
+----------+
|    41313 |
+----------+
1 row in set (4.55 sec)
mysql> 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;
+--------------------+
| count(distinct id) |
+--------------------+
|              14326 |
+--------------------+
1 row in set (7.39 sec)

mysql> 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;
+----------+
| count(*) |
+----------+
|    14326 |
+----------+
1 row in set (2.08 sec)

UI test Results:
Before:
![screen shot 2015-09-28 at 2 19 55 pm](https://cloud.githubusercontent.com/assets/1062642/10133848/66af7c40-65fe-11e5-9ef5-ec6489c0fc06.png)

After
![screen shot 2015-09-28 at 2 33 38 pm](https://cloud.githubusercontent.com/assets/1062642/10133852/6f512c9a-65fe-11e5-9ea1-890cf84d02b4.png)

* pr/894:
  CLOUDSTACK-8917 : Instance tab takes long time to load with 12K active VM (total vms: 190K)

Signed-off-by: Rajani Karuturi <rajani.karuturi@citrix.com>
2015-10-27 12:17:55 +05:30
..
auth Revert "Merge pull request #714 from rafaelweingartner/master-lrg-cs-hackday-003" 2015-08-31 11:27:57 +05:30
dispatch CLOUDSTACK-8816 Fixed entityUuid missing in some cases is events 2015-09-09 14:23:27 +05:30
doc findbugs: fields of serializable made serializable 2015-06-24 20:20:12 +02:00
query CLOUDSTACK-8917 : Instance tab takes long time to load with 12K active VM (total vms: 190K) 2015-09-28 16:24:26 +05:30
response CLOUDSTACK-8155: Remove unwanted whitespaces from json response 2015-01-14 02:43:54 +05:30
ApiAsyncJobDispatcher.java Revert "Merge pull request #714 from rafaelweingartner/master-lrg-cs-hackday-003" 2015-08-31 11:27:57 +05:30
ApiDBUtils.java Revert "some unused fields deleted" 2014-12-03 18:09:49 +01:00
ApiDispatcher.java CLOUDSTACK-8816: Project UUID is not showing for some of operations in RabbitMQ. 2015-09-09 14:23:28 +05:30
ApiGsonHelper.java API response: added new field to @Param - RoleType[] authorized() default {}. The field defines who is authorized to see this partciluar reponse field. If not specified, the parameter is returned to everybody 2014-02-20 17:15:43 -08:00
ApiResponseGsonHelper.java API response: added new field to @Param - RoleType[] authorized() default {}. The field defines who is authorized to see this partciluar reponse field. If not specified, the parameter is returned to everybody 2014-02-20 17:15:43 -08:00
ApiResponseHelper.java FIX: Ovm3 physical network traffic labels to work. 2015-10-22 11:57:42 +02:00
ApiSerializerHelper.java findbugs: fixes for ApiServer, ApiSerializerHelper and 2014-01-28 14:47:06 +01:00
ApiServer.java CLOUDSTACK-8816 Fixed entityUuid missing in some cases is events 2015-09-09 14:23:27 +05:30
ApiServlet.java CLOUDSTACK-8702: Add/refactor sessionkey checking code to HttpUtils 2015-08-14 11:56:55 +05:30
EncodedStringTypeAdapter.java findbugs: fixes for ApiServer, ApiSerializerHelper and 2014-01-28 14:47:06 +01:00
ResponseObjectTypeAdapter.java API response: added new field to @Param - RoleType[] authorized() default {}. The field defines who is authorized to see this partciluar reponse field. If not specified, the parameter is returned to everybody 2014-02-20 17:15:43 -08:00
SerializationContext.java Reformat all source code. Added checkstyle to check the source code 2013-11-20 07:26:53 -08:00
StringMapTypeAdapter.java Reformat all source code. Added checkstyle to check the source code 2013-11-20 07:26:53 -08:00