<?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>guzik &#187; InnoDB</title>
	<atom:link href="http://guzik.net.pl/blog/tag/innodb/feed/" rel="self" type="application/rss+xml" />
	<link>http://guzik.net.pl/blog</link>
	<description>Mój blog</description>
	<lastBuildDate>Wed, 28 Jul 2010 20:35:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>MySQL: multiple tablespaces</title>
		<link>http://guzik.net.pl/blog/2008/07/mysql-multiple-tablespaces/</link>
		<comments>http://guzik.net.pl/blog/2008/07/mysql-multiple-tablespaces/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 07:37:15 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[InnoDB]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=26</guid>
		<description><![CDATA[Wiadomo nie od dziś, że plik przestrzeni tabel InnoDB rośnie, ale nie maleje. Szczególnie dużym problemem jest to w momencie gdy tworzymy i usuwamy duże tabele. Sposobów radzenia sobie z tym jest kilka (nie wszystkie eleganckie, ale takie znalazłem &#8211; ja nie korzystam z żadnego z nich): zmiana silnika wszystkich tabel z InnoDB na MyISAM, [...]]]></description>
			<content:encoded><![CDATA[<p>Wiadomo nie od dziś, że plik przestrzeni tabel InnoDB rośnie, ale nie maleje. Szczególnie dużym problemem jest to w momencie gdy tworzymy i usuwamy duże tabele. Sposobów radzenia sobie z tym jest kilka (nie wszystkie eleganckie, ale takie znalazłem &#8211; ja nie korzystam z żadnego z nich):</p>
<ul>
<li>zmiana silnika wszystkich tabel z InnoDB na MyISAM, zatrzymanie bazy, usunięcie pliku ibdata1 i stworzenie go od nowa, zmiana silnika tabel z MyISAM na InnoDB &#8211; życzę powodzenia przy większej ilości tabel,</li>
<li>zrzut danych (<em>dump</em>), usunięcie pliku ibdata1 i utworzenie go od nowa, import danych.</li>
</ul>
<p>Pewnie inne wariacje powyższych też zadziałają podobnie. Niemniej uważam, że <em>downtime</em> jest dość istotny, więc nie sprawdzą się w mocno obciążonym środowisku produkcyjnym.</p>
<p>Więcej o zmaganiach innych można poczytać tutaj:</p>
<ul>
<li><a title="http://www.google.com/" href="http://www.google.com/">http://www.google.com/</a></li>
<li><a title="http://paradigma.pt/ja/slog/index.php/2007/03/mysql-ibdata1-doesnt-reduce-its-size.html" href="http://paradigma.pt/ja/slog/index.php/2007/03/mysql-ibdata1-doesnt-reduce-its-size.html">http://paradigma.pt/ja/slog/index.php/2007/03/mysql-ibdata1-doesnt-reduce-its-size.html</a></li>
<li><a title="http://www.saturn.in/gpl/mysql.html" href="http://www.saturn.in/gpl/mysql.html">http://www.saturn.in/gpl/mysql.html</a></li>
</ul>
<p>Ja wybrałem <a title="http://dev.mysql.com/doc/refman/5.0/en/multiple-tablespaces.html" href="http://dev.mysql.com/doc/refman/5.0/en/multiple-tablespaces.html">tworzenie osobnego pliku dla każdej tabeli InnoDB</a>. Na pierwszy rzut oka wydaje się, że jest to lek na całe zło InnoDB &#8211; usunięcie bazy / tabeli skutkuje usunięciem pliku, szybsze OPTIMIZE dla tabel, łatwiejsze tworzenie &#8216;zimnych kopii zapasowych&#8217;, obejście problemu systemu plików związanego z maksymalną wielkością pliku. Nic tylko używać.</p>
<p>Jeśli chodzi o przygotowanie serwera do tego, to sprowadza się do dodania w sekcji [mysqld] pliku my.cnf następującej linii:</p>
<blockquote><p>[mysqld]<br />
innodb_file_per_table</p></blockquote>
<p>Oczywiście wymaga to restartu serwera. Wszystkie <span style="text-decoration: underline;">nowe</span> tabele będą już miały osobny plik .ibd w katalogu bazy (dane i indeksy w jednym pliku w odróżnieniu od MyISAM &#8211; .MYD i MYI, plik z definicją tabel .frm tworzony jest dla obu silników). Dostęp do istniejących tabel zapisanych w ibdata1 jest po zmianie możliwy. Podobnie w sytuacji, gdybyśmy chcieli powrócić do poprzeniej konfiguracji &#8211; osobne pliki będą obsługiwane nadal.</p>
<p>Gdybyśmy chcieli dotychczasowe tabele utrzymywać w osobnych plikach, należy wykonać:</p>
<blockquote><p>ALTER TABLE test ENGINE=InnoDB;</p></blockquote>
<p>pamiętając, że nadal nie zmniejszy to głównego pliku.</p>
<p>Poza tym wspólna przestrzeń tabel (<em>tablespace</em>) dla InnoDB (plik ibdata1) zawsze będzie istnieć, nawet jak nową bazę uruchomimy z <em>innodb_file_per_table</em>, a wynika to z tego, że trzymane są tam np. <em>undo logs</em>.</p>
<p>Dodatkowo, wg <a title="http://dev.mysql.com/doc/refman/5.0/en/" href="http://dev.mysql.com/doc/refman/5.0/en/">dokumentacji MySQL</a>, plików .ibd nie można przenosić dowolnie pomiędzy katalogami baz tak jak w przypadku MyISAM (jeśli ktoś w ogóle robi coś takiego). Powodem jest przetrzymywanie we wspólnej przestrzeni nazw InnoDB nazwy bazy. Po szczegóły zainteresowanych odsyłam do dokumentacji.</p>
<p>Nie znalazłem jeszcze wad tego rozwiązania. Jak tylko się znajdą, uaktualnię artykuł.</p>
<p>Do poczytania:</p>
<ul>
<li><a title="http://www.pythian.com/blogs/1067/difference-between-innodb_data_file_path-and-innodb_file_per_table" href="http://www.pythian.com/blogs/1067/difference-between-innodb_data_file_path-and-innodb_file_per_table">Differences Between innodb_data_file_path and innodb_file_per_table</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2008/07/mysql-multiple-tablespaces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
