<?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>Un bout de DBA &#187; BBU</title>
	<atom:link href="http://www.noidea.ca/tag/bbu/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.noidea.ca</link>
	<description>MySQL, En long et en large</description>
	<lastBuildDate>Tue, 09 Feb 2010 13:54:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Raid, Cache et BBU</title>
		<link>http://www.noidea.ca/2008/08/13/raid-cache-et-bbu/</link>
		<comments>http://www.noidea.ca/2008/08/13/raid-cache-et-bbu/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 00:35:35 +0000</pubDate>
		<dc:creator>PaT</dc:creator>
				<category><![CDATA[Optimisation]]></category>
		<category><![CDATA[Outils]]></category>
		<category><![CDATA[Tranche de vie]]></category>
		<category><![CDATA[BBU]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Raid]]></category>
		<category><![CDATA[sysbench]]></category>

		<guid isPermaLink="false">http://www.noidea.ca/?p=36</guid>
		<description><![CDATA[Je vous parlais récemment de Sysbench, aujourd&#8217;hui je vais vous montrer comment il m&#8217;a aidé à résoudre un problème. Tout d&#8217;abord, je dois vous expliquer le problème initial. Je reçois un nouveau serveur qui sera le Master de notre environnement de pré-production, une bête dans son genre: Dual Quad Xeon 2Ghz, 32Go de RAM, 4 [...]]]></description>
			<content:encoded><![CDATA[<p>Je vous <a title="Sysbench Pour mesurer une charge de travail" href="http://www.noidea.ca/2008/08/sysbench-pour-creer-et-mesurer-une-charge-de-travail/" target="_self">parlais récemment de Sysbench</a>, aujourd&#8217;hui je vais vous montrer comment il m&#8217;a aidé à résoudre un problème. Tout d&#8217;abord, je dois vous expliquer le problème initial. Je reçois un nouveau serveur qui sera le Master de notre environnement de pré-production, une bête dans son genre: Dual Quad Xeon 2Ghz, 32Go de RAM, 4 disques scsi montés en RAID5. Après avoir installé un backup, je lance un script qui fait des modifications massives sur les données dans le but de mesurer à quel point le nouveau serveur est performant.</p>
<p>Surprise ! Le script était excessivement plus lent que d&#8217;habitude. J&#8217;ai fouillé un peu et j&#8217;ai constaté que le IOwait était étrangement élevé. Après quelques recherches infructueuses sur google pour des problèmes de MySQL avec un IOwait élevé, je me suis connecté sur IRC, #MySQL (sur freenode) et j&#8217;ai parlé de ma situation. À mon grand étonnement, <a title="fewbar.com" href="http://fewbar.com" target="_blank">Clint Byrum (aka SpamapS)</a> possèdait des réponses précises à mon problème. Nous sommes arrivé à la conclusion que la write-cache était probablement désactivée. C&#8217;était le cas.</p>
<p>À partir de ce constat, je décide d&#8217;utiliser Sysbench pour valider que le problème vient de la cache du RAID.</p>
<p>Les tests:<br />
#1. On fait écrire dans 128 fichiers de 1MB (128MB total), les fichiers sont suffisamment petits pour que tout se fasse en cache.<br />
#2. On fait écrire dans 128 fichiers de 8MB (1GB au total), pour être sûr de remplir la cache au complet<br />
#3. On fait lire et écrire dans 128 fichiers de 1MB (128MB total), les fichiers sont suffisamment petits pour que tout se fasse en cache.<br />
#4. On fait lire et écrire dans 128 fichiers de 8MB (1GB au total), pour être sûr de remplir la cache au complet</p>
<p>TEST #1<br />
./sysbench &#8211;test=fileio &#8211;init-rng=1 &#8211;max-time=60 &#8211;max-requests=1000000  &#8211;file-num=128  &#8211;file-total-size=128M &#8211;num-threads=16 &#8211;file-test-mode=rndwr run</p>
<p><strong>SANS LA CACHE:</strong><br />
Operations performed:  0 Read, 24804 Write, 31288 Other = 56092 Total<br />
Read 0b  Written 387.56Mb  Total transferred 387.56Mb  (6.4451Mb/sec)<br />
412.49 Requests/sec executed</p>
<p><strong>AVEC LA CACHE:</strong><br />
Operations performed:  0 Read, 241204 Write, 305548 Other = 546752 Total<br />
Read 0b  Written 3.6805Gb  Total transferred 3.6805Gb  (62.657Mb/sec)<br />
4010.04 Requests/sec executed</p>
<p>&#8212;-====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;-</p>
<p>TEST #2<br />
./sysbench &#8211;test=fileio &#8211;init-rng=1 &#8211;max-time=60 &#8211;max-requests=1000000  &#8211;file-num=128  &#8211;file-total-size=1024M &#8211;num-threads=16 &#8211;file-test-mode=rndwr run</p>
<p><strong>SANS LA CACHE:</strong><br />
Operations performed:  0 Read, 19501 Write, 24129 Other = 43630 Total<br />
Read 0b  Written 304.7Mb  Total transferred 304.7Mb  (5.077Mb/sec)<br />
324.93 Requests/sec executed</p>
<p><strong>AVEC LA CACHE:</strong><br />
Operations performed:  0 Read, 28702 Write, 35615 Other = 64317 Total<br />
Read 0b  Written 448.47Mb  Total transferred 448.47Mb  (7.4293Mb/sec)<br />
475.47 Requests/sec executed</p>
<p>&#8212;-====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;-</p>
<p>TEST #3<br />
./sysbench &#8211;test=fileio &#8211;init-rng=1 &#8211;max-time=60 &#8211;max-requests=1000000  &#8211;file-num=128  &#8211;file-total-size=128M &#8211;num-threads=16 &#8211;file-test-mode=rndrw run</p>
<p><strong>SANS LA CACHE:</strong><br />
Operations performed:  35345 Read, 23568 Write, 67552 Other = 126465 Total<br />
Read 552.27Mb  Written 368.25Mb  Total transferred 920.52Mb  (15.317Mb/sec)<br />
980.30 Requests/sec executed</p>
<p><strong>AVEC LA CACHE:</strong><br />
Operations performed:  70214 Read, 46809 Write, 135896 Other = 252919 Total<br />
Read 1.0714Gb  Written 731.39Mb  Total transferred 1.7856Gb  (30.385Mb/sec)<br />
1944.64 Requests/sec executed</p>
<p>&#8212;-====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;&#8212;&#8211;====&#8212;-</p>
<p>TEST #4<br />
./sysbench &#8211;test=fileio &#8211;init-rng=1 &#8211;max-time=60 &#8211;max-requests=1000000  &#8211;file-num=128  &#8211;file-total-size=1024M &#8211;num-threads=16 &#8211;file-test-mode=rndrw run</p>
<p><strong>SANS LA CACHE:</strong><br />
Operations performed:  16446 Read, 10964 Write, 28273 Other = 55683 Total<br />
Read 256.97Mb  Written 171.31Mb  Total transferred 428.28Mb  (11.971Mb/sec)<br />
766.15 Requests/sec executed</p>
<p><strong>AVEC LA CACHE</strong>:<br />
Operations performed:  41350 Read, 27576 Write, 72158 Other = 141084 Total<br />
Read 646.09Mb  Written 430.88Mb  Total transferred 1.0517Gb  (17.941Mb/sec)<br />
1148.24 Requests/sec executed</p>
<p>Si vous avez pris le soin d&#8217;étudier les résultats, vous avez compris que la cache apporte un gain de performance impressionnant ! On s&#8217;y attendait. L&#8217;impact sur MySQL est considérable. Cependant, il faut savoir que MySQL n&#8217;utilise qu&#8217;un seul CPU par thread, ce qui n&#8217;apporte pas un gain de performance aussi remarquable que  les benchmarks lorsqu&#8217;un script utilise qu&#8217;une seule connexion.</p>
<p>Mon script roulait normalement après avoir activé la cache, sans être plus rapide qu&#8217;à la normal. J&#8217;étais un peu deçu, mais j&#8217;ai vite compris qu&#8217;avec plusieurs threads connectés en meme temps le serveur répondait toujours aussi rapidement. J&#8217;ai remarqué une nette amélioration lorsqu&#8217;il y a plusieurs utilisateurs connectés simultanément. Voici un petit benchmark avec la cache activé, via MySQL, avec 40 threads:</p>
<p>./sysbench &#8211;test=oltp &#8211;oltp-test-mode=complex &#8211;max-time=60 &#8211;max-requests=300000 &#8211;num-threads=40 &#8211;init-rng=1 &#8211;oltp-table-size=3000000 &#8211;mysql-user=testing &#8211;mysql-password=testing &#8211;mysql-host=127.0.0.1 run</p>
<p>queries performed:<br />
read:                            670964<br />
write:                           239630<br />
other:                           95852<br />
total:                           1006446<br />
transactions:                        47926  (798.38 per sec.)<br />
deadlocks:                           0      (0.00 per sec.)<br />
read/write requests:                 910594 (15169.31 per sec.)<br />
other operations:                    95852  (1596.77 per sec.)</p>
<p>Mais activer la cache n&#8217;est pas sans danger, le serveur doit posséder une batterie (BBU pour Battery Backup Unit). En cas de panne, cette batterie permet d&#8217;assurer la consistance des données sur les disques du RAID. La majorité des softwares pour activer la cache vous avertira qu&#8217;il est nécessaire d&#8217;avoir une batterie.</p>
<p>En résumé, si vous possédez un serveur avec du RAID, il s&#8217;avère quasiment nécessaire d&#8217;avoir une batterie et la cache d&#8217;activée pour avoir des performances à la hauteur de vos espérances.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noidea.ca/2008/08/13/raid-cache-et-bbu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
