Remi Bergsma created CLOUDSTACK-8300:
----------------------------------------

             Summary: Add index on archived field in cloud.event table
                 Key: CLOUDSTACK-8300
                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-8300
             Project: CloudStack
          Issue Type: Bug
      Security Level: Public (Anyone can view this level - this is the default.)
    Affects Versions: 4.4.2
            Reporter: Remi Bergsma
            Priority: Minor


When there are many events in the cloud.event table, the UI throws an SQL 
exception and the management server spikes at 100% CPU for minutes. That causes 
other API calls to fail with 430 errors.

Studying the error below, it seems an index on the 'archived' field is missing 
(since it is used in the WHERE clause).

We have 1.4M events in the table:
select count(*) from event;
1497838

Solution:
Please add the index to the archived field and consider doing the same for the 
state field.

Work around:
Delete events manually
delete from event where state = "Completed";

Since state also does not have an index, this takes some time.

Error logged:
2015-03-04 14:19:28,429 ERROR [c.c.a.ApiServer] (TP-Processor50:ctx-3116c380 
ctx-c861804c) unhandled exception executing api command: 
[Ljava.lang.String;@b96205f
com.cloud.utils.exception.CloudRuntimeException: DB Exception on: 
com.mysql.jdbc.JDBC4PreparedStatement@17f33b92: SELECT event_view.id, 
event_view.uuid, event_view.type, event_view.state, event_view.description, 
event_view.created, event_view.user_id, event_view.user_name, event_view.l
evel, event_view.start_id, event_view.start_uuid, event_view.parameters, 
event_view.account_id, event_view.account_uuid, event_view.account_name, 
event_view.account_type, event_view.domain_id, event_view.domain_uuid, 
event_view.domain_name, event_view.domain_path, event_view.project_id
, event_view.project_uuid, event_view.project_name, event_view.archived, 
event_view.display FROM event_view WHERE event_view.account_type != 5 AND 
event_view.archived = 0 ORDER BY event_view.created DESC LIMIT 0, 20
at 
com.cloud.utils.db.GenericDaoBase.searchIncludingRemoved(GenericDaoBase.java:425)
at 
com.cloud.utils.db.GenericDaoBase.searchIncludingRemoved(GenericDaoBase.java:361)
at com.cloud.utils.db.GenericDaoBase.search(GenericDaoBase.java:345)
at com.cloud.utils.db.GenericDaoBase.searchAndCount(GenericDaoBase.java:1296)
at sun.reflect.GeneratedMethodAccessor221.invoke(Unknown Source)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at 
com.cloud.utils.db.TransactionContextInterceptor.invoke(TransactionContextInterceptor.java:34)
at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
at 
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy268.searchAndCount(Unknown Source)
at 
com.cloud.api.query.QueryManagerImpl.searchForEventsInternal(QueryManagerImpl.java:583)
at 
com.cloud.api.query.QueryManagerImpl.searchForEvents(QueryManagerImpl.java:472)
at 
org.apache.cloudstack.api.command.user.event.ListEventsCmd.execute(ListEventsCmd.java:112)
at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:141)
at com.cloud.api.ApiServer.queueCommand(ApiServer.java:682)
at com.cloud.api.ApiServer.handleRequest(ApiServer.java:511)
at com.cloud.api.ApiServlet.processRequestInContext(ApiServlet.java:330)
at com.cloud.api.ApiServlet.access$000(ApiServlet.java:54)
at com.cloud.api.ApiServlet$1.run(ApiServlet.java:118)
at 
org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
at 
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
at 
org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
at com.cloud.api.ApiServlet.processRequest(ApiServlet.java:115)
at com.cloud.api.ApiServlet.doGet(ApiServlet.java:77)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)




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

Reply via email to