FW: [rt-users] RT 3.2.3 -> 3.4.4
J.P. Racine
racinejp at vianet.ca
Mon Oct 24 20:50:21 EDT 2005
I think that I must have something seriously wrong with the database after an
upgrade of rt3.2.3 to 3.4.4. In particular how my CachedGoupMembers table has
an index length of 225001472 for 2471666 rows... I think that mysqld is just
stalling on a table copy because the mysqld cpu ( cache hits ) go to %99 and
frequently abort client conections. If I kill the mysql process the
'Tickets_Overlay.pm' related web UI pages work as they 'normally should'.
Name | Engine | Row_format | Rows | Avg_row_length |
Data_length | Max_data_length | Index_length
CachedGroupMembers | InnoDB | Fixed | 2471666 | 53 |
132808704 | NULL | 225001472
Users | InnoDB | Dynamic | 141084 | 249 |
35192832 | NULL | 32669696
Principals | InnoDB | Dynamic | 1094481 | 43 |
47792128 | NULL | 18399232
Groups | InnoDB | Dynamic | 443875 | 65 |
28901376 | NULL | 38961152
ACL | InnoDB | Dynamic | 11450 | 138 |
1589248 | NULL | 1589248
These two queries are causing the most troupble:...
SELECT DISTINCT main.* FROM Users main , Principals Principals_1,
CachedGroupMembers CachedGroupMembers_2 WHERE ((CachedGroupMembers_2.GroupId =
'1102001')) AND ((CachedGroupMembers_2.MemberId = Principals_1.id)) AND
((Principals_1.Disabled = '0')) AND ((main.id = Principals_1.id)) ORDER BY
main.Name ASC
SELECT DISTINCT main.* FROM Users main , Principals Principals_1, ACL ACL_2,
Groups Groups_3, CachedGroupMembers CachedGroupMembers_4 WHERE
((ACL_2.RightName = 'OwnTicket')) AND ((CachedGroupMembers_4.MemberId =
Principals_1.id)) AND ((Groups_3.id = CachedGroupMembers_4.GroupId)) AND
((Principals_1.Disabled = '0')or(Principals_1.Disabled = '0')) AND
((Principals_1.id != '1')) AND ((main.id = Principals_1.id)) AND ( (
ACL_2.PrincipalId = Groups_3.id AND ACL_2.PrincipalType = 'Group'
AND ( Groups_3.Domain = 'SystemInternal' OR Groups_3.Domain =
'UserDefined' OR Groups_3.Domain = 'ACLEquivalence')
mysql> show processlist;
+-----+------+-----------+------+---------+------+----------------------+-------
--------------------------------------------------------------------------------
---------------+
| Id | User | Host | db | Command | Time | State | Info
|
+-----+------+-----------+------+---------+------+----------------------+-------
--------------------------------------------------------------------------------
---------------+
| 838 | root | localhost | rt3 | Query | 0 | NULL | show
processlist
|
| 852 | root | localhost | rt3 | Query | 54 | Copying to tmp table | SELECT
DISTINCT main.* FROM Users main , Principals Principals_1, ACL ACL_2, Groups
Groups_3, Cached |
+-----+------+-----------+------+---------+------+----------------------+-------
--------------------------------------------------------------------------------
---------------+
2 rows in set (0.00 sec)
The process will stay stalled as 'Copying to tmp table' which would make sense
as the tmp table would be pretty large and could be a choke point.
mysql> kill 852;
Query OK, 0 rows affected (0.00 sec)
mysql> show processlist;
+-----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+------+---------+------+-------+------------------+
| 838 | root | localhost | rt3 | Query | 0 | NULL | show processlist |
| 856 | root | localhost | rt3 | Sleep | 1 | | NULL |
+-----+------+-----------+------+---------+------+-------+------------------+
2 rows in set (0.00 sec)
Also the 'Comment' on ticket also gets slowed down int a tmp table copy when it
queries:
SELECT ACL.id from ACL, Groups, Principals, CachedGroupMembers WHERE
(ACL.RightName = 'SuperUser' OR ACL.RightName = 'ShowTicket') AND
Principals.Disabled = 0 AND CachedGroupMembers.Disabled = 0 AND Principals.id =
Groups.id AND Principals.id = CachedGroupMembers.GroupId AND
CachedGroupMembers.MemberId = '1100506' AND ( ACL.ObjectType = 'RT::System' OR
(ACL.ObjectType = 'RT::Ticket' AND ACL.ObjectId = '203381') OR (ACL.ObjectType =
'RT::Queue' AND ACL.ObjectId = '28')) AND ( ((Groups.Domain = 'RT::Ticket-Role'
AND Groups.Instance = 203381) OR (Groups.Domain = 'RT::Queue-Role' AND
Groups.Instance = 28) ) AND Groups.Type = ACL.PrincipalType AND Groups.Id =
Principals.id AND Principals.PrincipalType = 'Group') LIMIT 1
+----+-------------+--------------------+--------+-------------------------+----
--------+---------+-------------------------------+------+----------------------
----+
| id | select_type | table | type | possible_keys | key
| key_len | ref | rows | Extra |
+----+-------------+--------------------+--------+-------------------------+----
--------+---------+-------------------------------+------+----------------------
----+
| 1 | SIMPLE | Groups | range | PRIMARY,Groups1,Groups2 |
Groups1 | 70 | NULL | 8 | Using where; Using
index |
| 1 | SIMPLE | Principals | eq_ref | PRIMARY |
PRIMARY | 4 | rt3.Groups.id | 1 | Using where
|
| 1 | SIMPLE | CachedGroupMembers | ref | DisGrouMem,GrouMem |
DisGrouMem | 12 | rt3.Principals.id,const,const | 1 | Using where; Using
index |
| 1 | SIMPLE | ACL | range | ACL1 |
ACL1 | 54 | NULL | 22 | Using where; Using
index |
+----+-------------+--------------------+--------+-------------------------+----
--------+---------+-------------------------------+------+----------------------
----+
4 rows in set (0.00 sec)
SELECT DISTINCT main.* FROM Users main , Principals Principals_1,
CachedGroupMembers CachedGroupMembers_2 WHERE ((CachedGroupMembers_2.GroupId =
NULL)) AND ((CachedGroupMembers_2.MemberId = Principals_1.id)) AND
((Principals_1.Disabled = '0')) AND ((main.id = Principals_1.id)) ORDER BY
main.Name ASC
+----+-------------+----------------------+--------+--------------------+-------
-----+---------+-----------------------------------+------+---------------------
--------------------------------------+
| id | select_type | table | type | possible_keys | key
| key_len | ref | rows | Extra
|
+----+-------------+----------------------+--------+--------------------+-------
-----+---------+-----------------------------------+------+---------------------
--------------------------------------+
| 1 | SIMPLE | CachedGroupMembers_2 | ref | DisGrouMem,GrouMem |
DisGrouMem | 5 | const | 1 | Using where;
Using index; Using temporary; Using filesort |
| 1 | SIMPLE | Principals_1 | eq_ref | PRIMARY |
PRIMARY | 4 | rt3.CachedGroupMembers_2.MemberId | 1 | Using where
|
| 1 | SIMPLE | main | eq_ref | PRIMARY,Users3 |
PRIMARY | 4 | rt3.Principals_1.id | 1 |
|
+----+-------------+----------------------+--------+--------------------+-------
-----+---------+-----------------------------------+------+---------------------
--------------------------------------+
3 rows in set (0.00 sec)
Suggestions? Is this a mysql table access problem/bug? Should you be using a
GROUP BY instead of ORDER BY? Technically the requests work but the database
looks hosed...
-jp
>-----Original Message-----
>From: J.P. Racine [mailto:racinejp at vianet.ca]
>Sent: Friday, October 21, 2005 6:57 PM
>To: 'rt-users at lists.bestpractical.com'
>Subject: RE: [rt-users] RT 3.2.3 -> 3.4.4
>
>The speed issues are related to SELECT DISTICT where using the query builder
>causes a timeout ( past what fastcgi is set to 120-240 )
>
>FastCGI 2.4.2
>Apache 1.3.34
>Mysql 4.1.15
More information about the rt-users
mailing list