[rt-users] weird Slow SelectOwner query

Laas Toom laas.toom at eenet.ee
Tue Mar 28 03:14:58 EST 2006


Hello!

Some time ago when we upgraded to RT 3.4.5 and MySQL 5.0.18, we started having 
slow SelectOwner queries, but then an answer from this list helped us out - 
we created an extra index to the table CachedGroupMembers:
create index mbowe_MemberId on CachedGroupMembers(MemberId)

But now we moved the database to dedicated server and again this query takes 
~8 sec to complete. 
Then I thought this index was not the solution, dropped that extra index, did 
some testing - nothing,  recreated index - still nothing and redropped this 
index.
Interestingly enough after this last dropping the query started taking 0.8 - 
1.4 sec. But this probably is some caching by MySQL server, because of 
frequent queries.

BTW, all the times are taken from phpMyAdmin, as RT on fastcgi seems to cache 
this query after first time for each ticket, but as it is mostly needed only 
one time for a ticket, this caching does not help.

The problematic query is:
SELECT DISTINCT main.*
  FROM Users main, Principals Principals_1, ACL ACL_2, CachedGroupMembers 
CachedGroupMembers_3
  WHERE ((ACL_2.PrincipalId = CachedGroupMembers_3.GroupId)) AND 
((ACL_2.PrincipalType = 'Group')) AND
     ((ACL_2.RightName = 'OwnTicket')) AND ((CachedGroupMembers_3.MemberId = 
Principals_1.id)) AND
     ((Principals_1.Disabled = '0')) AND ((Principals_1.PrincipalType = 
'User')) AND ((Principals_1.id !=
     '1')) AND ((main.id = Principals_1.id)) AND ((ACL_2.ObjectType = 
'RT::Ticket' AND ACL_2.ObjectId = 1365)
     OR (ACL_2.ObjectType = 'RT::Queue' AND ACL_2.ObjectId = 8) OR 
(ACL_2.ObjectType = 'RT::System'))
  ORDER BY main.Name ASC

After the first dropping of index MySQL EXPLAIN showed that this 'main' table 
is joined first with type='range', rows=9432 and "using where; using 
temporary; using filesort".

After second dropping of the extra index the 'main' table is joined in second,  
the row count increased to 9444, but still this query is faster.

But when I reorder the tables in the query, so that 'main' is last:
SELECT ...
FROM Principals Principals_1, ACL ACL_2, CachedGroupMembers 
CachedGroupMembers_3,  Users main
WHERE ....

Then the query takes 0.0030 sec all the time (as it did before the second 
creation of the index) and 'main' table is joined in as third table with 
type='eq_ref' and rows=1

So I am lost here - is this MySQL problem or can RT be forced to use the 
latter FROM statement so that 'main' table is joined in last?

Any help appreciated.

Best regards,
Laas Toom



More information about the rt-users mailing list