[Toolserver-l] improving slow query performance with transaction isolation level
kate
lithiana at livejournal.com
Fri Dec 30 02:46:17 UTC 2005
hi.
people already familiar with SQL's transaction isolation level and MVCC
databases can ignore this post. anyone who doesn't may want to read it.
the problem:
a lot of the queries used on zedler are report queries which examine a lot
of records (possibly every page, link or revision) to generate the result.
not only do these take a long time to run, but they slow down the SQL
server for other uses, since InnoDB queries are transactional, and the
server must ensure that changes to the database don't affect the query.
in most cases -- like on the production site -- this is what you want, and
the performance penalty is acceptable. however, for other uses, you may be
more interested in the query completing quickly than having entirely
consistent results (especially when your result is going to be several
hours out of date anyway).
for this purpose, MySQL provides a command, SET TRANSACTION ISOLATION LEVEL.
this allows you to control (for the current connection only) how consistent
queries will be. this and other related InnoDB issues are explained in
detail at:
http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html
(section 14.2.10.3 in particular) but i'll provide a brief summary here.
the default isolation level is "repeatable read". this means that (mostly)
everything you do will be consistent relative to the first query you run in
each transaction. if the table changes, your transaction will not see the
changes.
the least consistent isolation level is "read uncommitted". this does not
perform any locking or multi-versioning for the query. the downside of
this is that you may see dirty data (slightly out of date or uncommitted)
in the result. however, the advantage is that the query will run much
faster.
you can change the current isolation level with the command:
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
if you're running slow queries on the database, you may like to test this
and see how much difference it makes.
you may also want to review the manual sections linked above for more
details.
k.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 185 bytes
Desc: not available
Url : http://lists.wikimedia.org/pipermail/toolserver-l/attachments/20051230/9ccf9236/attachment.pgp
More information about the Toolserver-l
mailing list