<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" ><channel><title>Christoph Bünte&nbsp;&raquo; Software Entwicklung Berlin</title> <atom:link href="http://www.christophbuente.de/tag/solution/feed/" rel="self" type="application/rss+xml" /><link>http://www.christophbuente.de</link> <description>Software Entwicklung</description> <lastBuildDate>Tue, 03 Aug 2010 15:37:30 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.0.1</generator> <item><title>MySQL MyISAM &#8211; Index oder nicht?</title><link>http://www.christophbuente.de/2008-07-01-mysql-myisam-index-oder-nicht/</link> <comments>http://www.christophbuente.de/2008-07-01-mysql-myisam-index-oder-nicht/#comments</comments> <pubDate>Tue, 01 Jul 2008 22:34:44 +0000</pubDate> <dc:creator>Christoph Bünte</dc:creator> <category><![CDATA[Datenbanken]]></category> <category><![CDATA[analyze table]]></category> <category><![CDATA[db]]></category> <category><![CDATA[explain]]></category> <category><![CDATA[howto]]></category> <category><![CDATA[incorrect index]]></category> <category><![CDATA[Index]]></category> <category><![CDATA[MySQL]]></category> <category><![CDATA[no index]]></category> <category><![CDATA[Performance]]></category> <category><![CDATA[query]]></category> <category><![CDATA[select]]></category> <category><![CDATA[solution]]></category> <category><![CDATA[sql]]></category><guid isPermaLink="false">http://www.christophbuente.de/2008-07-01-mysql-myisam-index-oder-nicht/</guid> <description><![CDATA[Für einen Kunden habe ich mich in letzter Zeit etwas eingehender mit dem Datenbank Backend befasst. Ein Setup mit mehreren Servern, Synchronisierung und Lastverteilung existierte bereits. Jedoch konnte ich den Logfiles entnehmen, dass es hin und wieder Anfragen an den Datenbankserver gibt, die extrem lange Dauern und dadurch andere Anfragen durch Sperren behindern. Bei der [...]]]></description> <content:encoded><![CDATA[<p>Für einen Kunden habe ich mich in letzter Zeit etwas eingehender mit dem Datenbank Backend befasst. Ein Setup mit mehreren Servern, Synchronisierung und Lastverteilung existierte bereits. Jedoch konnte ich den Logfiles entnehmen, dass es hin und wieder Anfragen an den Datenbankserver gibt, die extrem lange Dauern und dadurch andere Anfragen durch Sperren behindern. Bei der Analyse bin ich auf ein paar interessante Details gestoßen.</p><p><span id="more-41"></span></p><p>Der Kunde hat für das Staging seiner Webanwendung zwei unterschiedliche Server. Sowohl Hardware als auch Betriebsystem sind identisch eingerichtet. Die Konfigurationsdatei für die Datenbanken sind ebenfalls gleich. Der Unterschied ist jedoch, dass auf einem System ein und die selbe Anfrage 1 Sekunde benötigt. Auf dem anderen System wartet man bis zu 5000 Sekunden. Ein <code>EXPLAIN</code> mit dem MySQL Client brachte nur die Gewissheit: Der existierende Index wird auf dem einen System nicht verwendet.</p><pre lang="text">mysql&gt; EXPLAIN (eine SELECT Anfrage)
+-------+--------+---------------+---------+---------+----------------+--------+---------------------------------+
| table | type   | possible_keys | key     | key_len | ref            | rows   | Extra                           |
+-------+--------+---------------+---------+---------+----------------+--------+---------------------------------+
| p     | ALL    | idx_on_column | NULL    |    NULL | NULL           | 3588047| Using temporary; Using filesort |
+-------+--------+---------------+---------+---------+----------------+--------+---------------------------------+</pre><p>Erst stand der Verdacht im Raum, dass der Index auf dem einen System nicht in den Arbeitsspeicher passt, und aus diesem Grund nicht verwendet wird. Doch ausreichend Arbeitsspeicher stand zur Verfügung. Dann erinnerte ich mich vage, dass ich mal etwas in der MySQL Dokumentation zum Thema Index gelesen hatte. Die <a href="http://dev.mysql.com/doc/refman/5.0/en/show-index.html">Kardinalität eines Index</a> sollte nach dem Anlegen mit Hilfe von <code>ANALYZE TABLE</code> bzw. <code>mysqlcheck</code> neu berechnet werden.</p><pre lang="bash">mysqlcheck -u USER -p PASSWORD --analyze DB_NAME [TABLE_NAME]</pre><p>Und tatsächlich wurde ab diesem Moment der entsprechende Index für die Anfrage verwendet. Mit Hilfe der Kardinalität kann MySQL entscheiden, ob ein Index für eine Anfrage verwendet werden kann, oder nicht. Bei fehlerhafter Kardinalität kann es vorkommen, dass die Entscheidung über das für und wider eines Index falsch getroffen werden.</p><p>Diese Art der Nachhilfe braucht MySQL allerdings nur beim Tabellentyp MyISAM. Der neuere Typ InnoDB ist deutlich besser in der Lage auszuwerten, ob und welche Indizes für eine bestimmte Anfrage benutzt werden können.</p><div id="crp_related"><h3>Ähnliche Beiträge:</h3><ul><li><a href="http://www.christophbuente.de/2007-11-25-ruby-on-rails-auf-mac-os-x-5-minuten-kurzanleitung/" rel="bookmark" class="crp_title">Ruby on Rails auf Mac OS X &#8211; 5 Minuten Kurzanleitung</a></li><li><a href="http://www.christophbuente.de/2007-08-05-objekte-und-beziehungen/" rel="bookmark" class="crp_title">Objekte und Beziehungen</a></li><li><a href="http://www.christophbuente.de/2008-07-30-gepatchte-mysql-version-nuetzliche-features-schluesselfertig-eingebaut/" rel="bookmark" class="crp_title">Gepatchte MySQL Version &#8211; nützliche Features schlüsselfertig eingebaut</a></li><li><a href="http://www.christophbuente.de/2007-12-21-voiceglue-konfiguration-server-fur-sprachanwendungen-einrichten/" rel="bookmark" class="crp_title">VoiceGlue Konfiguration &#8211; Server für Sprachanwendungen einrichten</a></li><li><a href="http://www.christophbuente.de/2008-01-24-stripes-framework-tests-fur-actionbeans-im-wizard-modus/" rel="bookmark" class="crp_title">Stripes Framework &#8211; Tests für ActionBeans im Wizard Modus</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://www.christophbuente.de/2008-07-01-mysql-myisam-index-oder-nicht/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached
Database Caching 1/19 queries in 0.011 seconds using memcached
Object Caching 405/442 objects using memcached

Served from: www.christophbuente.de @ 2010-09-08 10:23:18 -->