We have an issue with our RT 4.0.8 instance that we didn't have with
3.8.8 that we just finished migrating from.  Some of our managers like
to search for tickets where the requestor is a 'VIP' user.  They use
fairly straightforward TicketSQL to build saved searches that are then
used for dashboards and RT at a Glance items.  This all worked fine in
RT 3.8.8, but when we upgraded to 4.0.8 the queries take so long to run
that it ends up timing out the webserver, making it very difficult for
users using them in RT at a Glance to login.  Checking the MySQL slow
query log (or just doing a 'show full processlist' while it's running)
shows that fairly straightforward TicketSQL query gets expanded into
ridiculously complex MySQL queries doing multiple joins on the same
tables for the same columns.  Is this a known issue?

Here's an example:

This TicketSQL:

Status = 'open' AND
(
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]' OR
Requestor.EmailAddress = '[email protected]'
)

Results in this MySQL query:

SELECT Count(DISTINCT main.id)
FROM   tickets main
       JOIN groups Groups_1
         ON ( Groups_1.domain = 'RT::Ticket-Role' )
            AND ( Groups_1.type = 'Requestor' )
            AND ( Groups_1.instance = main.id )
       JOIN cachedgroupmembers CachedGroupMembers_54
         ON ( CachedGroupMembers_54.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_18
         ON ( CachedGroupMembers_18.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_24
         ON ( CachedGroupMembers_24.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_16
         ON ( CachedGroupMembers_16.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_12
         ON ( CachedGroupMembers_12.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_48
         ON ( CachedGroupMembers_48.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_2
         ON ( CachedGroupMembers_2.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_6
         ON ( CachedGroupMembers_6.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_26
         ON ( CachedGroupMembers_26.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_22
         ON ( CachedGroupMembers_22.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_58
         ON ( CachedGroupMembers_58.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_30
         ON ( CachedGroupMembers_30.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_44
         ON ( CachedGroupMembers_44.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_20
         ON ( CachedGroupMembers_20.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_42
         ON ( CachedGroupMembers_42.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_8
         ON ( CachedGroupMembers_8.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_32
         ON ( CachedGroupMembers_32.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_56
         ON ( CachedGroupMembers_56.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_38
         ON ( CachedGroupMembers_38.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_4
         ON ( CachedGroupMembers_4.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_36
         ON ( CachedGroupMembers_36.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_14
         ON ( CachedGroupMembers_14.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_10
         ON ( CachedGroupMembers_10.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_50
         ON ( CachedGroupMembers_50.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_40
         ON ( CachedGroupMembers_40.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_46
         ON ( CachedGroupMembers_46.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_52
         ON ( CachedGroupMembers_52.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_28
         ON ( CachedGroupMembers_28.groupid = Groups_1.id )
       JOIN cachedgroupmembers CachedGroupMembers_34
         ON ( CachedGroupMembers_34.groupid = Groups_1.id )
       LEFT JOIN users Users_15
              ON ( Users_15.id = CachedGroupMembers_14.memberid )
       LEFT JOIN users Users_53
              ON ( Users_53.id = CachedGroupMembers_52.memberid )
       LEFT JOIN users Users_7
              ON ( Users_7.id = CachedGroupMembers_6.memberid )
       LEFT JOIN users Users_25
              ON ( Users_25.id = CachedGroupMembers_24.memberid )
       LEFT JOIN users Users_31
              ON ( Users_31.id = CachedGroupMembers_30.memberid )
       LEFT JOIN users Users_51
              ON ( Users_51.id = CachedGroupMembers_50.memberid )
       LEFT JOIN users Users_17
              ON ( Users_17.id = CachedGroupMembers_16.memberid )
       LEFT JOIN users Users_5
              ON ( Users_5.id = CachedGroupMembers_4.memberid )
       LEFT JOIN users Users_49
              ON ( Users_49.id = CachedGroupMembers_48.memberid )
       LEFT JOIN users Users_33
              ON ( Users_33.id = CachedGroupMembers_32.memberid )
       LEFT JOIN users Users_3
              ON ( Users_3.id = CachedGroupMembers_2.memberid )
       LEFT JOIN users Users_47
              ON ( Users_47.id = CachedGroupMembers_46.memberid )
       LEFT JOIN users Users_9
              ON ( Users_9.id = CachedGroupMembers_8.memberid )
       LEFT JOIN users Users_43
              ON ( Users_43.id = CachedGroupMembers_42.memberid )
       LEFT JOIN users Users_27
              ON ( Users_27.id = CachedGroupMembers_26.memberid )
       LEFT JOIN users Users_57
              ON ( Users_57.id = CachedGroupMembers_56.memberid )
       LEFT JOIN users Users_11
              ON ( Users_11.id = CachedGroupMembers_10.memberid )
       LEFT JOIN users Users_35
              ON ( Users_35.id = CachedGroupMembers_34.memberid )
       LEFT JOIN users Users_59
              ON ( Users_59.id = CachedGroupMembers_58.memberid )
       LEFT JOIN users Users_45
              ON ( Users_45.id = CachedGroupMembers_44.memberid )
       LEFT JOIN users Users_29
              ON ( Users_29.id = CachedGroupMembers_28.memberid )
       LEFT JOIN users Users_37
              ON ( Users_37.id = CachedGroupMembers_36.memberid )
       LEFT JOIN users Users_23
              ON ( Users_23.id = CachedGroupMembers_22.memberid )
       LEFT JOIN users Users_41
              ON ( Users_41.id = CachedGroupMembers_40.memberid )
       LEFT JOIN users Users_39
              ON ( Users_39.id = CachedGroupMembers_38.memberid )
       LEFT JOIN users Users_13
              ON ( Users_13.id = CachedGroupMembers_12.memberid )
       LEFT JOIN users Users_19
              ON ( Users_19.id = CachedGroupMembers_18.memberid )
       LEFT JOIN users Users_55
              ON ( Users_55.id = CachedGroupMembers_54.memberid )
       LEFT JOIN users Users_21
              ON ( Users_21.id = CachedGroupMembers_20.memberid )
WHERE  ( CachedGroupMembers_42.disabled = '0' )
       AND ( CachedGroupMembers_30.disabled = '0' )
       AND ( CachedGroupMembers_6.disabled = '0' )
       AND ( CachedGroupMembers_44.disabled = '0' )
       AND ( CachedGroupMembers_52.disabled = '0' )
       AND ( main.type = 'ticket' )
       AND ( CachedGroupMembers_18.disabled = '0' )
       AND ( CachedGroupMembers_12.disabled = '0' )
       AND ( CachedGroupMembers_4.disabled = '0' )
       AND ( CachedGroupMembers_48.disabled = '0' )
       AND ( CachedGroupMembers_16.disabled = '0' )
       AND ( main.status = 'open'
             AND ( ( Users_3.emailaddress = '[email protected]' )
                    OR ( Users_5.emailaddress = '[email protected]' )
                    OR ( Users_7.emailaddress = '[email protected]' )
                    OR ( Users_9.emailaddress = '[email protected]' )
                    OR ( Users_11.emailaddress = '[email protected]' )
                    OR ( Users_13.emailaddress = '[email protected]' )
                    OR ( Users_15.emailaddress = '[email protected]' )
                    OR ( Users_17.emailaddress = '[email protected]' )
                    OR ( Users_19.emailaddress = '[email protected]' )
                    OR ( Users_21.emailaddress = '[email protected]' )
                    OR ( Users_23.emailaddress = '[email protected]' )
                    OR ( Users_25.emailaddress = '[email protected]' )
                    OR ( Users_27.emailaddress = '[email protected]' )
                    OR ( Users_29.emailaddress = '[email protected]' )
                    OR ( Users_31.emailaddress = '[email protected]' )
                    OR ( Users_33.emailaddress = '[email protected]' )
                    OR ( Users_35.emailaddress = '[email protected]' )
                    OR ( Users_37.emailaddress = '[email protected]' )
                    OR ( Users_39.emailaddress = '[email protected]' )
                    OR ( Users_41.emailaddress = '[email protected]' )
                    OR ( Users_43.emailaddress = '[email protected]' )
                    OR ( Users_45.emailaddress = '[email protected]' )
                    OR ( Users_47.emailaddress = '[email protected]' )
                    OR ( Users_49.emailaddress = '[email protected]' )
                    OR ( Users_51.emailaddress = '[email protected]' )
                    OR ( Users_53.emailaddress = '[email protected]' )
                    OR ( Users_55.emailaddress = '[email protected]' )
                    OR ( Users_57.emailaddress = '[email protected]' )
                    OR ( Users_59.emailaddress = '[email protected]'
) ) )
       AND ( CachedGroupMembers_34.disabled = '0' )
       AND ( CachedGroupMembers_24.disabled = '0' )
       AND ( CachedGroupMembers_46.disabled = '0' )
       AND ( CachedGroupMembers_8.disabled = '0' )
       AND ( CachedGroupMembers_22.disabled = '0' )
       AND ( CachedGroupMembers_28.disabled = '0' )
       AND ( CachedGroupMembers_56.disabled = '0' )
       AND ( CachedGroupMembers_54.disabled = '0' )
       AND ( CachedGroupMembers_2.disabled = '0' )
       AND ( CachedGroupMembers_14.disabled = '0' )
       AND ( CachedGroupMembers_36.disabled = '0' )
       AND ( main.effectiveid = main.id )
       AND ( CachedGroupMembers_50.disabled = '0' )
       AND ( CachedGroupMembers_38.disabled = '0' )
       AND ( CachedGroupMembers_32.disabled = '0' )
       AND ( CachedGroupMembers_20.disabled = '0' )
       AND ( CachedGroupMembers_10.disabled = '0' )
       AND ( CachedGroupMembers_58.disabled = '0' )
       AND ( main.status != 'deleted' )
       AND ( CachedGroupMembers_26.disabled = '0' )
       AND ( CachedGroupMembers_40.disabled = '0' )


-- 
Help improve RT by taking our user survey: 
https://www.surveymonkey.com/s/N23JW9T

Reply via email to