<?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>Blue Metallic</title>
	<atom:link href="http://www.blue-metallic.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blue-metallic.de</link>
	<description>PHP und Javascript Entwicklung</description>
	<lastBuildDate>Sun, 13 Nov 2011 22:19:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Index-Rebuild auf großen Datenmengen</title>
		<link>http://www.blue-metallic.de/2009/11/02/index-rebuild-auf-grosen-datenmengen/</link>
		<comments>http://www.blue-metallic.de/2009/11/02/index-rebuild-auf-grosen-datenmengen/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 22:52:29 +0000</pubDate>
		<dc:creator>Jan-Simon</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[datenbank]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.blue-metallic.de/?p=10</guid>
		<description><![CDATA[TweetLeider habe ich beim (vergeblichen) Versuch einen zusätzlichen Index auf der Tabelle hinzuzufügen nach 2 Stunden etwas demotiviert den entsprechenden ALTER TABLE Query angebrochen und dabei die Index-Datei der Tabelle zerhauen. Man nehme also eine MyISAM-Tabelle mit knapp 3 Millionen Datensätzen und kaputter Index-Datei, einen Rootserver und extrem viel Zeit. Der Volltext-Index auf der Tabelle [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton10" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fwww.blue-metallic.de%2F2009%2F11%2F02%2Findex-rebuild-auf-grosen-datenmengen%2F&amp;via=eth8505&amp;text=Index-Rebuild%20auf%20gro%C3%9Fen%20Datenmengen&amp;related=&amp;lang=en&amp;count=horizontal&amp;counturl=http%3A%2F%2Fwww.blue-metallic.de%2F2009%2F11%2F02%2Findex-rebuild-auf-grosen-datenmengen%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://www.blue-metallic.de/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Leider habe ich beim (vergeblichen) Versuch einen zusätzlichen Index auf der Tabelle hinzuzufügen nach 2 Stunden etwas demotiviert den entsprechenden ALTER TABLE Query angebrochen und dabei die Index-Datei der Tabelle zerhauen.</p>
<p>Man nehme also eine <a href="http://de.wikipedia.org/wiki/MyISAM">MyISAM</a>-Tabelle mit knapp 3 Millionen Datensätzen und kaputter Index-Datei, einen Rootserver und <strike>extrem</strike> viel Zeit. Der Volltext-Index auf der Tabelle kommt auf eine Größe von ca. 5,6 GiB. </p>
<p>Bei 5,6GiB Index-Größe war mein erster Ansatz<br />
<code>REPAIR TABLE searchindex</code><br />
leider eher ernüchternd. Dauert mit Standardkonfiguration (with Keycache sei Dank) einfach stur zu lange.</p>
<p>Nach etwas <a href="http://www.google.de/#hl=de&#038;source=hp&#038;q=mysql+with+keycache&#038;btnG=Google-Suche&#038;meta=&#038;aq=f&#038;oq=mysql+with+keycache&#038;fp=bd5a87b221b8eeb">Googlen</a> wurde ich fündig, das kleine Tool <a href="http://dev.mysql.com/doc/refman/5.0/en/myisamchk.html">myisamchk</a> liefert genau was ich brauche. Der Rebuild dauert zwar immer noch ziemlich lang, allerdings lassen sich hier, da das Tool über die Shell gestartet wird, sämtliche Caching und Buffer-Einstellungen manuell setzen, üerschreiben und konfigurieren.</p>
<p>Nach viel Geduld und einigen (vielen) Fehlversuchen kam der folgende Aufruf raus:</p>
<p><code>myisamchk --ft_min_word_len=2 --tmpdir=/tmp/ --key_buffer_size=1024M --sort_buffer_size=1024M --read_buffer_size=1M --write_buffer_size=1M --sort-recover --verbose searchindex</code></p>
<p>Die wichtigsten Einstellungen sind <em>&#8211;sort_buffer_size=1024M</em>, <em>&#8211;key_buffer_size=1024M</em>. Im Endeffekt die 2 Einstellungen mit denen ich verhindere, dass der Rechner sich durch übermäßiges Swapping ins Nirvana verabschiedet.<br />
Die Einstellung <em>&#8211;sort-recover</em> legt fest, dass der MySQL-interne Sortier-Algorythmus verwendet werden soll, um den entsprechenden Index aufzubauen. Der Key-Cache (standardmäßig verwendet wenn der Speicher alle ist) hingegen, würde ca. den Faktor 20 an Zeit brauchen um den selben Effekt zu erzielen.</p>
<p>Aktuell läuft die Query noch, ist aber auf dem 9. Index der Tabelle (ich meine das ist der Volltext) ca. 50% durch gelaufen. Ich hoffe wenn ich morgen aufsteh ists fertig <img src='http://www.blue-metallic.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.blue-metallic.de/2009/11/02/index-rebuild-auf-grosen-datenmengen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

