Updated Pg indexes (was Re: [Rt-devel] using standalone httpd to
debug RT slowness)
Jesse Vincent
jesse at bestpractical.com
Wed Sep 8 15:43:55 EDT 2004
Vivek,
This is all very cool. I'll look at getting these into 3.2.2
Jesse
On Wed, Sep 08, 2004 at 03:41:10PM -0400, Vivek Khera wrote:
>
> On Sep 7, 2004, at 4:40 PM, Vivek Khera wrote:
>
> >Ok. Spent the whole afternoon logging queries and analyzing them,
> >squeezing out the most performance I could by just adjusting the
> >indexes.
>
> Well, Jesse says SearchBuilder 1.10 does queries differently, so I
> re-evaluated the changes I made. Turns out they're still valid. I did
> notice that the only query I found that used the Parent field of the
> Attachments table didn't use the index specific to it, so I decided
> that I can also drop the Attachments1 index.
>
> Speed improvements with SB 1.10:
>
> Main page speed is still about the same, perhaps .5 seconds faster
> (still under 3 seconds)
>
> The display of a ticket is a bit faster. A 4.5 second load time went
> down to 3.3 seconds.
>
> The searches are faster. The searches I tested were clicking on the
> queue names to list all open/new tix in those queues. One list went
> from about 4.6 seconds down to 1.3 seconds.
>
> In any case, the functional indexes are necessary in postgres to even
> consider using them the way SB builds the queries.
>
> I'm sticking with these indexes. In case anyone tries out my updated
> indexes, here they are. I also have the antidote script that restores
> the original indexes, below... :-)
>
>
> --cut here--
> -- only query I see that uses Parent field doesn't use index1 or index3.
> -- i could have missed something, though.
> DROP INDEX Attachments1;
> DROP INDEX Attachments3;
>
> -- only query as lower(). seems confusing to allow queues with same
> -- name but differing only in case.
> DROP INDEX Queues1;
> CREATE UNIQUE INDEX Queues1 ON Queues (lower(Name)) ;
>
>
> -- unable to analyze usage of Links table indexes.
>
> -- when Instance, Type, and Domain are all used it is usually with just
> plain
> -- search so the first index will be used. this index will cover the
> search
> -- for where type is specified with lower(). Order of fields makes
> sense
> -- from queries I see: sometimes only first one or two are queried.
> DROP INDEX Groups2;
> CREATE INDEX Groups2 On Groups (lower(Type),lower(Domain),Instance);
>
>
> -- Transactions table indexes not analyzed.
>
> -- ACL table index not analyzed. too small to use indexes in my
> instance
>
> -- group members needs an index! This one has massive speedups.
> CREATE INDEX GroupMembers1 ON GroupMembers (GroupID);
>
>
> -- I think these are redundant since I only ever see DisGrouMem index
> used
> DROP INDEX CachedgroupMembers2;
> DROP INDEX CachedgroupMembers3;
>
>
>
> -- the old Users2 is 100% redundant with Users1, and neither gets used
> -- since we always query with lower(). Users3 is redundant since "id"
> -- is already a PK so if that is queried, we have a unique return.
> DROP INDEX Users1;
> DROP INDEX Users2;
> DROP INDEX Users3;
> DROP INDEX Users4;
>
> CREATE UNIQUE INDEX Users1 ON Users (lower(Name)) ;
> -- i'm assuming this one needs to be lower() as well; haven't seen it
> used
> CREATE INDEX Users2 ON Users (lower(EmailAddress));
>
> -- redundant indexes. if "id" is specified, we use PK
> DROP INDEX Tickets4;
> DROP INDEX Tickets5;
> CREATE INDEX Tickets4 ON Tickets (Status);
>
> -- redundant index -- just a prefix of index 1.
> DROP INDEX TicketCustomFieldValues2;
>
> -- don't see Attributes used. looks like an empty table for me.
>
>
> -- and update the statistics...
> ANALYZE;
> --cut here--
>
> The antidote:
>
>
> --cut here--
> CREATE INDEX Attachments1 ON Attachments (Parent) ;
> CREATE INDEX Attachments3 ON Attachments (Parent, TransactionId) ;
>
> DROP INDEX Queues1;
> CREATE UNIQUE INDEX Queues1 ON Queues (Name) ;
>
> DROP INDEX Groups2;
> CREATE INDEX Groups2 On Groups (Type, Instance, Domain);
>
> DROP INDEX GroupMembers1;
>
> CREATE INDEX CachedGroupMembers2 on CachedGroupMembers (MemberId);
> CREATE INDEX CachedGroupMembers3 on CachedGroupMembers (GroupId);
>
> DROP INDEX Users1;
> DROP INDEX Users2;
> CREATE UNIQUE INDEX Users1 ON Users (Name) ;
> CREATE INDEX Users2 ON Users (Name);
> CREATE INDEX Users3 ON Users (id, EmailAddress);
> CREATE INDEX Users4 ON Users (EmailAddress);
>
>
> DROP INDEX Tickets4;
> CREATE INDEX Tickets4 ON Tickets (id, Status) ;
> CREATE INDEX Tickets5 ON Tickets (id, EffectiveId) ;
>
> CREATE INDEX TicketCustomFieldValues2 ON TicketCustomFieldValues
> (CustomField,Ticket);
>
> ANALYZE;
> --cut here--
>
> _______________________________________________
> Rt-devel mailing list
> Rt-devel at lists.bestpractical.com
> http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-devel
--
More information about the Rt-devel
mailing list