<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>erkules</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/" />
    <link rel="self" type="application/atom+xml" href="http://linsenraum.de/erkules/atom.xml" />
    <id>tag:linsenraum.de,2010-01-29:/erkules//2</id>
    <updated>2012-04-27T20:44:11Z</updated>
    <subtitle>bloggiwoggi</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.23-en</generator>

<entry>
    <title>OSDC 2012</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2012/04/osdc-2012.html" />
    <id>tag:linsenraum.de,2012:/erkules//2.221</id>

    <published>2012-04-27T12:26:51Z</published>
    <updated>2012-04-27T20:44:11Z</updated>

    <summary><![CDATA[Moinsen,die diesjährige OSDC 2012 war wieder mal goil.Hier sind meine Vorträge zu MySQL Cluster und&nbsp; Galera Cluster.Viel SpaßErkan...]]></summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="Galera" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="konferenz" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Moinsen,<br /><br />die diesjährige <a href="http://www.netways.de/osdc/osdc_2012/uebersicht/">OSDC 2012</a> war wieder mal goil.<br />Hier sind meine Vorträge zu <a href="http://linsenraum.de/erkan_yanar_mysql_cluster.pdf">MySQL Cluster</a> und&nbsp; <a href="http://linsenraum.de/erkan_yanar_galera_multi_master.pdf">Galera Cluster</a>.<br /><br />Viel Spaß<br />Erkan<br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>Galera: 4-Node Cluster Perfomancetest [Update]</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2012/04/galera-4-node-cluster-perfomancetest.html" />
    <id>tag:linsenraum.de,2012:/erkules//2.218</id>

    <published>2012-04-01T14:08:17Z</published>
    <updated>2012-04-01T16:15:35Z</updated>

    <summary>Im letzten Blogpost wurde Galera als Replikationsersatz (im Vergleich zu MySQL 5.5.21 und MariaDB 5.5.20) gemessen. GroupCommit von MariaDB ist sehr performant und beeindruckend. Der Vergleich zu MySQL ist legitim aber zu Galera unpassend, da Galera eben mehr bietet, als...</summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="Galera" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Im letzten <a href="http://linsenraum.de/erkules/2012/03/galera-als-replikationsersatz.html">Blogpost</a>
wurde Galera als Replikationsersatz (im Vergleich zu MySQL 5.5.21 und
MariaDB 5.5.20) gemessen.<br />
GroupCommit von MariaDB ist sehr performant und beeindruckend. Der
Vergleich zu MySQL ist legitim aber zu Galera unpassend, da Galera eben
mehr bietet, als das Ankommen im relay-log eines Slaves.<br />
Folgend wir mit Galera ein 4-Node Cluster aufgebaut. Hier garantiert
Galera, dass alle Änderungen auf allen anderen Nodes (im Gegensatz
zu Semisync) ankommen und appliziert werden.<br />
<br />
Der Test wurde auf einem Knoten der des 4-node Clusters
durchgeführt. Im folgenden Blogpost wird auf zwei der vier Knoten
der Lasttest durchgeführt.<br />
Galera bietet zwei Kommuniktionsmöglichkeiten der Knoten an. <br />
<ol>
<li>Unicast<br />
Das ist der Default</li>
<li>Multicast<br />
Einfach Konfiguriert mit. <br />
</li>
</ol>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;"></span><span style="font-family: monospace;">wsrep_provider_options="gmcast.mcast_addr=239.192.0.11"<br />
</span></p>
Das ist der erste Freiheitsgrad unseres Tests, der zweite ist die
Anzahl der Applierthreads welcher im Default 1 ist. Gerade Galera ist
in der Lage Änderungen parallel zu applizieren, so scheint hier 1
denkbar schlecht. Konfiguriert wird dies mit:<br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">wsrep_slave_threads=64<br />
</span></p>
<span style="font-style: italic;">Achtung: Es scheint, als könnte
dies dynamisch geändert werden. SET/SHOW GLOBAL funktioniert
einwandfrei. De Facto passiert da nichts.</span> <br />
<h2>1. Test Unicast</h2>
<img style="width: 680px; height: 480px;" alt="Galera Unicast" src="http://linsenraum.de/erkules/png/galera_unicast_4node_mean_201203.png" /><br />
<br />
<h2>2. Test Multicast</h2>
<img style="width: 680px; height: 480px;" alt="Galera Multicast" src="http://linsenraum.de/erkules/png/galera_multicast_4node_mean_201203.png" /><br />
Egal ob Multicast oder Unicast 1 Applierthread ist immer die
schlechteste Wahl.<br />
In der folgenden Grafik wird die Differenz der beiden Tests abgebildet.
Bei positiven Werten ist Multicast schneller, sonst Unicast.<br />
<img style="width: 680px; height: 480px;" alt="Galera Diff Multi- Unicast" src="http://linsenraum.de/erkules/png/galera_diff_unicast_multicast_4node_mean_201203.png" /><br />
Das Interpretieren überlasse ich dem geneigtem Leser. Comments
welcome.<br /><br /><b>[UPDATE: </b><a href="http://www.php-groupies.de/blogs/">Hartmut</a> wollte noch einen anderen Graphen haben: <b>]</b><br />
.
<img style="width: 680px; height: 480px;" alt="Galera Diff Multi- Unicast" src="http://linsenraum.de/erkules/png/galera_relative_diff_unicast_multicast_4node_mean_201203.png" /><br />
<br />
Viel Spaß<br />
Erkan<br />]]>
        
    </content>
</entry>

<entry>
    <title>Galera als Replikationsersatz [UPDATE[2]]</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2012/03/galera-als-replikationsersatz.html" />
    <id>tag:linsenraum.de,2012:/erkules//2.216</id>

    <published>2012-03-28T23:05:27Z</published>
    <updated>2012-04-10T18:19:12Z</updated>

    <summary><![CDATA[Es wird wieder Zeit, sich mit Galera zu beschäftigen. Den Auftakt von mehreren Posts zu Galera macht eine Wiederholung des Tests aus einem früherem&nbsp; Blogpost. Diesmal mit aktuellen Versionen (MySQL 5.5.21, MariaDB 5.5.20, Galera(MySQL 5.5.21 mit 23.2.1beta ). Hardware: 2xQuadcore...]]></summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="Galera" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="MariaDB" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="galera" label="galera" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Es wird wieder Zeit, sich mit <a href="http://codership.com/">Galera</a>
zu beschäftigen. Den Auftakt von mehreren Posts zu Galera macht
eine Wiederholung des Tests aus einem früherem&nbsp; <a href="http://linsenraum.de/erkules/2011/06/momentum-galera.html">Blogpost</a>.
Diesmal mit aktuellen Versionen (MySQL 5.5.21, MariaDB 5.5.20,
Galera(MySQL 5.5.21 mit 23.2.1beta ).<br />
<br />
Hardware:<br />
<ul>
<li>2xQuadcore X5550</li>
<li>96GB Ram</li>
<li>Raid10 XFS</li>
</ul>
<br />
Idee:<br />
<div style="margin-left: 40px;">Wir wollen eine HA-Lösung mit
Replikation aufbauen. Hierfür wird Semisync(MySQL/MariaDB) und Galera genommen.<br />
Es wird der Durchsatz gemessen und verglichen.<br />
Sollte Semisync in async Replikation zurückfallen ist der Lauf
ungültig. Dazu wurde nach jedem Lauf einfach geschaut ob die
Ausgabe von <br />
<span style="font-style: italic;">SELECT VARIABLE_VALUE from
information_schema.global_status where
VARIABLE_NAME='Rpl_semi_sync_master_no_times'; </span><br />
sich erhöht hat. [Update2: Ich habe versäumt zu schauen ob semisync überhaupt läuft. (Rpl_semi_sync_master_status,Rpl_semi_sync_slave_status). Daher waren die Messungen für MariaDB falsch und sind korrigiert worden. Zudem war fälschlicher Weise rpl_semi_sync_master_timeout=40 gesetzt. Das sind 40 Millisekunden :). Der Wert wurde auf den Default 10000 gesetzt. Daher kam es nicht mehr zu Abbrüchen.]<br />
<br />
</div>
<div style="text-align: left;">Konfiguration MariaDB/MySQL:<span style="font-family: monospace;"></span><br />
</div>
<br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;"></span><span style="font-family: monospace;">innodb_buffer_pool_size&nbsp;&nbsp;&nbsp;&nbsp;
= 8GB<br />
innodb_buffer_pool_instances= 8<br />
innodb_purge_threads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 1<br />
innodb_log_file_size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 128M<br />
innodb_log_files_in_group&nbsp;&nbsp; = 3<br />
innodb_file_per_table<br />
innodb_adaptive_flushing&nbsp;&nbsp;&nbsp; = 1<br />
innodb_io_capacity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
= 1000<br />
</span><span style="font-family: monospace;">innodb_doublewrite=0<br />
innodb_locks_unsafe_for_binlog=1<br />
innodb_autoinc_lock_mode=2<br />
</span></p>
Konfiguration Galera:
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">wsrep_slave_threads=64<br />
</span></p>
Das ist die Anzahl der 'Applierthreads' für Galera.<br />
<br />
Verwendet wurde diesmal sysbench. So wurde der Test mit 10 Tabellen a
50000 Rows durchgeführt. <br />
Für einen schnellen Test wurden je 100.000 Transaktionen mit einer
Concurrency von 1,8,16,32,64,128, 256 und 512 gefahren. <br />
Eine Transaktion bestand schlicht aus:<br />
<span style="font-family: monospace;"></span><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1089 Query&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1089 Query&nbsp;&nbsp;&nbsp;&nbsp; UPDATE sbtest7 SET
c='25883440901-70070313541-17142115205-43175972628-35853834861-09785327216-66363106714-83869798964-358398406<br />
16-91707322347' WHERE id=25108<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1089 Query&nbsp;&nbsp;&nbsp;&nbsp; DELETE FROM sbtest7 WHERE id=24792<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1089 Query&nbsp;&nbsp;&nbsp;&nbsp; INSERT INTO sbtest7 (id, k, c, pad)
VALUES (24792, 25041,
'34062177881-28188734657-68032246195-58652219795-64480874925-94656605<br />
246-86334788207-61788576849-66682272200-23433875748',
'11856908939-86365001688-81484136798-76782671560-49448389421')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1089 Query&nbsp;&nbsp;&nbsp;&nbsp; COMMIT<br />
<br />
</span></p>
Also einem Update, Delete und Insert (variable Werte). Hier
der selbst sprechende Graph:<br />
<img style="width: 680px; height: 480px;" alt="" src="http://linsenraum.de/erkules/png/mysql_vs_galera_vs_maria_semisync.png" /><br />
<br />
<strike>MySQL 5.5.21 konnte ab einer Concurrency von 128 nicht mehr
durchgängig im Semisync-Modus bleiben. Daher bricht hier die
Messreihe für MySQL ab</strike>. <strike>Das Fabelhafte Ergebnis von MariaDB ist
dem <a href="http://kb.askmonty.org/en/group-commit-for-the-binary-log">GroupCommit</a>
von MariaDB zu verdanken</strike>. [Update: Das hat nichts mit GroupCommit zu tun. Da er hier laut Doku nicht zuschlagen kann.Infos sind im Link gleich im ersten Absatz.] MySQL 5.6.x wird auch&nbsp; mit einer
Implementierung kommen.<br />
Galera schlägt sich hier hervorragend. Gerade wenn man bedenke,
dass Galera auch Master-Master ermöglicht und damit
HA-Lösungen implementiert werden können, welche eben nicht
hoffen müssen, dass zum Zeitpunkt des Failovers Semisync aktiv war. Aber selbst das&nbsp; würde nur heißen, dass die Daten im relay-log des Slaves sind
:)<br /><br /><b>[UPDATE]</b><br />Nach einem Chat mit Alexey von <a href="http://codership.com/">Codership</a> den Entwicklern. Wurde eine Kleinigkeit geändert. <br />
<img style="width: 680px; height: 480px;" alt="" src="http://linsenraum.de/erkules/png/mysql_vs_galera__vs_percona_vs_maria_semisync.png" />
<br />
<br />
<span style="font-family: monospace;"></span><br />
Zum einen wurde Percona XtraDB Cluster genommen (eine Schande, dass Galera nicht im Namen vorkommt, wo es doch das essentielle Bestandteil ist.) zum anderen auf dem "Slave" <br /><i>SET GLOBAL wsrep_provider_options='gcs.fc_limit=1024; gcs.fc_factor=0.9999;';</i><br />gesetzt. Jedes für sich hat zu obigem Performancegewinn beigetragen \o/<br />(BTW: Es gibt noch vieelllle Stellschrauben :)<br /><br />[Update2]<br />Fazit: Galera ist nicht nur eine schnellere Replikationstechnik, sondern liefert auch Master-Master. Eine Schmach sich damit nicht näher zu beschäftigen1<br />
<br />
Viel Spaß<br />
Erkan<br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>Slides von der GUUG Hamburg, Telekom Techtalk und der SIG MySQL</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2012/03/slides-von-der-guug-hamburg-telekom-techtalk-und-der-sig-mysql.html" />
    <id>tag:linsenraum.de,2012:/erkules//2.214</id>

    <published>2012-03-15T00:59:36Z</published>
    <updated>2012-03-16T10:25:59Z</updated>

    <summary>Moin wie im Titel: Die Slides vom LXC Techtalk bei der Telekom. Und ja es gibt sogar einen Videomitschnitt. Auf der GUUG Hamburg habe ich einen ähnlichen Artikel gehalten. Da würde ich die selben Slides nehmen. Aber auch MySQL gehört...</summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="konferenz" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="lxc" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Moin wie im Titel: Die Slides vom <a href="http://linsenraum.de/documents/LXC-Techtalk.pdf">LXC Techtalk</a> bei der Telekom. Und ja es gibt sogar einen <a href="http://www.youtube.com/watch?v=wzrd5nSyo0o">Videomitschnitt.</a> Auf der GUUG Hamburg habe ich einen ähnlichen Artikel gehalten. Da würde ich die selben Slides nehmen. Aber auch MySQL gehört ja zu meiner Lieblingsbeschäftigung hier hin bitte für die <a href="http://linsenraum.de/documents/sig-innodb-performance.pdf">SIG MySQL</a> klicken.<br /><br />Viel Spaß<br />Erkan<br /><a href="http://www.youtube.com/watch?v=wzrd5nSyo0o"></a>]]>
        
    </content>
</entry>

<entry>
    <title>LinuX-Container auf der GUUG 2012</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2012/03/linux-container-auf-der-guug-2012.html" />
    <id>tag:linsenraum.de,2012:/erkules//2.213</id>

    <published>2012-03-02T09:38:30Z</published>
    <updated>2012-03-02T09:39:40Z</updated>

    <summary>Moin hier mein Vortrag von der GUUG zu obigem Thema....</summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="konferenz" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="lxc" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="vortrag" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Moin hier mein <a href="http://linsenraum.de/documents/LXC-GUUG.pdf">Vortrag</a> von der GUUG zu obigem Thema.<br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Von der Verzweiflung --plugin-dir zu setzen</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/12/von-der-verzweiflung---plugin-dir-zu-setzen.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.206</id>

    <published>2011-12-28T09:36:08Z</published>
    <updated>2011-12-28T10:13:54Z</updated>

    <summary>Ich nutze für einige Installationen bestimmte Pfade für das plugin-dir. Bei dem Upgrade auf MySQL 5.5 wurde die Konfiguration nicht mehr gezogen.Beim direkten Starten vom mysqld $CONF war wieder alles in Ordnung. Es zeigte sich, dass der Fehler im mysqld_safe...</summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Ich nutze für einige Installationen bestimmte Pfade für das plugin-dir. <br />Bei dem Upgrade auf MySQL 5.5 wurde die Konfiguration nicht mehr gezogen.<br />Beim direkten Starten vom mysqld $CONF war wieder alles in Ordnung. <br />Es zeigte sich, dass der Fehler im mysqld_safe liegt.<br />mysqld_safe meint seit 5.5.? die Option plugin-dir parsen zu müssen.<br />Hierfür wurde die Funktion parse_arguments() erweitert.<br />#v+<br />177&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --plugin-dir=*) PLUGIN_DIR="$val" ;;<br />#v- <br /><br />Folgender Code greift auf die Variable zu (wenn die denn gesetzt wurde):<br />421 if [ -n "${PLUGIN_DIR}" ]; then<br />422&nbsp;&nbsp; plugin_dir="${PLUGIN_DIR}"<br />423 else<br />424&nbsp;&nbsp; # Try to find plugin dir relative to basedir<br />425&nbsp;&nbsp; for dir in lib/mysql/plugin lib/plugin<br />426&nbsp;&nbsp; do<br />427&nbsp;&nbsp;&nbsp;&nbsp; if [ -d "${MY_BASEDIR_VERSION}/${dir}" ]; then<br />428&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plugin_dir="${MY_BASEDIR_VERSION}/${dir}"<br />429&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break<br />430&nbsp;&nbsp;&nbsp;&nbsp; fi<br />431&nbsp;&nbsp; done<br />432&nbsp;&nbsp; # Give up and use compiled-in default<br />433&nbsp;&nbsp; if [ -z "${plugin_dir}" ]; then<br />434&nbsp;&nbsp;&nbsp;&nbsp; plugin_dir='/usr/local/mysql/lib/plugin'<br />435&nbsp;&nbsp; fi<br />436 fi<br /><br /><br />Dummerweise wird die Funktion zum Parsen der Config erst später aufgerufen :/<br />488 parse_arguments `$print_defaults $defaults --loose-verbose mysqld server`<br />494 parse_arguments `$print_defaults $defaults --loose-verbose mysqld_safe safe_mysqld`<br />495 parse_arguments PICK-ARGS-FROM-ARGV "$@"<br /><br />Ergo ist es egal was konfiguriert wurde. Da zum Zeitpunkt des ersten Code-Schnipsels $PLUGIN_DIR immer leer ist.<br /><br />Bugreport: http://bugs.mysql.com/bug.php?id=63862<br /><br />Für jene, welche einen schnellen Würgaround brauchen, einfach<br />&nbsp;"--datadir=$DATADIR" "--plugin-dir=$plugin_dir" "$USER_OPTION"<br />durch<br />"--datadir=$DATADIR"&nbsp; "$USER_OPTION"<br />ersetzen.<br /><br />Viel Spaß<br />Erkan<br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Slides DOAG 2011</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/11/slides-doag-2011.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.200</id>

    <published>2011-11-24T10:21:52Z</published>
    <updated>2011-11-24T22:29:20Z</updated>

    <summary>Moinsen,hier die Slides zu meinen MySQL Vorträgen auf der DOAG 2011.Partitionieren ueber Rechnergrenzen hinweg und MySQL kann auch NoSQL.Viel SpaßErkan...</summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="konferenz" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Moinsen,<br /><br />hier die Slides zu meinen MySQL Vorträgen auf der DOAG 2011.<br /><a href="http://linsenraum.de/documents/doag-spider.pdf">Partitionieren ueber Rechnergrenzen hinweg</a> und <a href="http://linsenraum.de/documents/doag-mynosql.pdf">MySQL kann auch NoSQL</a>.<br /><br />Viel Spaß<br />Erkan<br /><br /><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>memcached@mysql: mysql-5.6.4-labs-innodb-memcache</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/11/memcachedmysql-mysql-564-labs-innodb-memcache.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.198</id>

    <published>2011-11-20T23:23:42Z</published>
    <updated>2011-11-20T23:26:41Z</updated>

    <summary>MySQL hat seit einiger Zeit Previews auf neue Funktionalitäten in MySQL zum Anschauen zur Verfügung gestellt. Folgend schauen wir uns mysql-5.6.4-labs-innodb-memcached an. Die Grundidee ist, dass quasi an MySQL vorbei direkt auf die Storage Engine zugegriffen wird. So wird der...</summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[MySQL hat seit einiger Zeit <a href="http://labs.mysql.com/">Previews</a>
auf neue Funktionalitäten in MySQL zum Anschauen zur
Verfügung gestellt.<br />
Folgend schauen wir uns mysql-5.6.4-labs-innodb-memcached an. Die
Grundidee ist, dass quasi an MySQL vorbei direkt auf die Storage Engine
zugegriffen wird. So wird der Overhead des SQL Parsers/Optimisers, wie
auch der des Verbindungsaufbau gespart.<br />
<br />
Ist das Paket installiert, muß das memcached Plugin noch
installiert werden. Vorab sind die Verwaltungstabellen - welche sich in
scripts/innodb_memcached_config.sql befinden - zu installieren. (mysql
&lt; scripts/innodb_memcached_config.sql )<br />
Ein Blick in die Datei verrät, dass das memcached Plugin ein
eigenes Schema (<span style="font-style: italic;">innodb_memcache</span>)
zum
Verwalten des Zugriffes von Datenbankabfragen benötigt/erstellt. <br />
Die Tabelle containers:<br /><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">mysql&gt; show create table
containers\G<br />
*************************** 1. row ***************************<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Table: containers<br />
Create Table: CREATE TABLE `containers` (<br />
&nbsp; `name` varchar(50) NOT NULL,<br />
&nbsp; `db_schema` varchar(250) NOT NULL,<br />
&nbsp; `db_table` varchar(250) NOT NULL,<br />
&nbsp; `key_columns` varchar(250) NOT NULL,<br />
&nbsp; `value_columns` varchar(250) DEFAULT NULL,<br />
&nbsp; `flags` varchar(250) NOT NULL DEFAULT '0',<br />
&nbsp; `cas_column` varchar(250) DEFAULT NULL,<br />
&nbsp; `expire_time_column` varchar(250) DEFAULT NULL,<br />
&nbsp; `unique_idx_name_on_key` varchar(250) NOT NULL,<br />
&nbsp; PRIMARY KEY (`name`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=latin1<br />
1 row in set (0.00 sec)<br />
<br />
mysql&gt; select * from containers;<br />
+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+<br />
| name | db_schema | db_table&nbsp; | key_columns | value_columns |
flags | cas_column | expire_time_column | unique_idx_name_on_key |<br />
+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+<br />
| aaa&nbsp; | test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | demo_test |
c1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
c2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
c3&nbsp;&nbsp;&nbsp; |
c4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
c5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
PRIMARY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br />
+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+<br />
1 row in set (0.00 sec)<br />
</span></p>
<span style="font-family: serif;">Das Skript
innodb_memcached_config.sql hat nicht nur diese Tabelle erstellt
sondern - wie auch bei den folgenen Tabellen - auch noch einen Eintrag
eingefügt.<br />
Jede Zeile in der Tabelle containers ist definiert auf welche Tabelle
memcached zugreift. Die Spalte <span style="font-style: italic;">name</span>
dient hier dazu auch mehrere (Ziel)Tabellen zu definieren. Derzeit wird
nur
eine Tabelle unterstützt. Mir ist auch nicht klar wie via
memcached mehr als eine Tabelle unterstützt werden soll. (Ich habe
gehört, dass dies dadurch erreicht werden soll, indem die keys aus
<span style="font-style: italic;">name</span>:<span style="font-style: italic;">memcachekey </span>bestehen werden
sollen.)<br />
<br />
<span style="font-style: italic;">db_schema/db_table</span> verweisen
auf das konkrete Schema/Tabelle.Die Spalten </span> <span style="font-style: italic;">key_columns, value_columns, flags,
cas_column, expire_time_column</span> sind dem <a href="http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt">memcached
Protokoll</a> geschuldet. Auf dieses gehe ich - unter anderem wegen
meiner Unwissenheit bezüglich des Protokolls - nicht ein. Die
Spalte
<span style="font-style: italic;">unique_idx_name_on_key</span>
enthält den Namen des Indexes (welcher UNIQUE sein muß) auf
key_columns (hier c1).<br />
So ist ersichtlich, dass Tabellen, welche via dem memcached Plugin
zugreifbar sein sollen, dem obigem Format entsprechen müssen.
Memcached ist ein simplers Key (key_colums) Value (value_columns)
Store. Das memcached Plugin erlaubt unter value_columns mehrere Spalten
anzugeben. Da das memcached Protokoll aber nur Key Value kann, bietet
das Plugin an einen Separator zu definieren. So wird via memcached ein
String (Value) übergeben welches das Plugin nach dem Trenner teilt
und in die passenden Spalten schreibt. Zu definieren ist der Trenner in
der Tabelle config_optioins:<br />
<span style="font-family: serif;"></span><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">mysql&gt; show create table
config_options\G<br />
*************************** 1. row ***************************<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Table: config_options<br />
Create Table: CREATE TABLE `config_options` (<br />
&nbsp; `name` varchar(50) NOT NULL,<br />
&nbsp; `value` varchar(50) DEFAULT NULL,<br />
&nbsp; PRIMARY KEY (`name`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=latin1<br />
1 row in set (0.00 sec)<br />
<br />
mysql&gt; select * from config_options;<br />
+-----------+-------+<br />
| name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | value |<br />
+-----------+-------+<br />
| separator | |&nbsp;&nbsp;&nbsp;&nbsp; |<br />
+-----------+-------+<br />
</span></p>
<span style="font-family: serif;">Es ist davon auszugehen, dass hier
noch weitere Konfigurationsmöglichkeiten kommen werden. Eine
weitere Tabelle ist die <span style="font-style: italic;">cache_policies</span>:<br />
<br />
</span><span style="font-family: monospace;"></span>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">mysql&gt; show create table
cache_policies\G</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">*************************** 1.
row ***************************</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Table:
cache_policies</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">Create Table: CREATE TABLE
`cache_policies` (</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">&nbsp; `policy_name` varchar(40)
NOT NULL,</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">&nbsp; `get_policy`
enum('innodb_only','cache_only','caching','disabled') NOT NULL,</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">&nbsp; `set_policy`
enum('innodb_only','cache_only','caching','disabled') NOT NULL,</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">&nbsp; `delete_policy`
enum('innodb_only','cache_only','caching','disabled') NOT NULL,</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">&nbsp; `flush_policy`
enum('innodb_only','cache_only','caching','disabled') NOT NULL,</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">&nbsp; PRIMARY KEY (`policy_name`)</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">) ENGINE=InnoDB DEFAULT
CHARSET=latin1</span><br />
<br />
<span style="font-family: monospace;"></span></p>
<span style="font-family: serif;">Während in der Tabelle
containers noch angelegt ist auf mehrere Tabellen zuzugreifen, ist dies
hier nicht vorgeshen, die Einstellungen pro Tabelle vorzunehmen.<br />
Daher ist das als Konfiguration für alle Tabellen zu
interpretieren.<br />
Die genaue Konfiguration wie auch eine auführliche Einleitung ist <a href="http://blogs.innodb.com/wp/2011/04/get-started-with-innodb-memcached-daemon-plugin/">hier</a>
zu finden.<br />
Ärgerlich ist, dass Änderungen in den cache_policies erst
nach einem Restart des Servers ziehen.<br />
</span><br />
Doch bisher haben wir die Installation des Plugin versäumt:<br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">mysql&gt; INSTALL PLUGIN
daemon_memcached SONAME 'libmemcached.so';<br />
Query OK, 0 rows affected (0.00 sec)<br />
mysql&gt; SELECT * from&nbsp; INFORMATION_SCHEMA.PLUGINS WHERE
PLUGIN_NAME='daemon_memcached'\G<br />
*************************** 1. row ***************************<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
PLUGIN_NAME: daemon_memcached<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PLUGIN_VERSION: 1.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PLUGIN_STATUS: ACTIVE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
PLUGIN_TYPE: DAEMON<br />
&nbsp;&nbsp; PLUGIN_TYPE_VERSION: 50604.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PLUGIN_LIBRARY:
libmemcached.so<br />
PLUGIN_LIBRARY_VERSION: 1.3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PLUGIN_AUTHOR: Jimmy
Yang<br />
&nbsp;&nbsp;&nbsp; PLUGIN_DESCRIPTION: Memcached Daemon<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PLUGIN_LICENSE: GPL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
LOAD_OPTION: ON<br />
1 row in set (0.00 sec)<br />
</span></p>
<span style="font-family: serif;">Folgende Variablen sind zu setzen:</span><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">mysql&gt; show global variables like
'daemon_memcached%';<br />
+----------------------------------+------------------+<br />
|
Variable_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
Value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br />
+----------------------------------+------------------+<br />
| daemon_memcached_enable_binlog&nbsp;&nbsp; |
OFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br />
| daemon_memcached_engine_lib_name | innodb_engine.so |<br />
| daemon_memcached_engine_lib_path
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br />
|
daemon_memcached_option&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br />
| daemon_memcached_r_batch_size&nbsp;&nbsp;&nbsp; |
1048576&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
| daemon_memcached_w_batch_size&nbsp;&nbsp;&nbsp; |
32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br />
+----------------------------------+------------------+<br />
<br />
</span></p>
<span style="font-family: serif;">Es handelt sich hierbei um read-only
Variablen. So sind diese auch nicht zur Laufzeit zu ändern.
Interessant ist die Option </span><span style="font-style: italic;">daemon_memcached_w_batch_size</span>.
Zum
Steigern der Performance wird nur alles 32 Änderungen
committed. Will man nun (in der Verbindung) auch die noch nicht
committetten Anweisungen sehen, ist der Transaktions Level anzupassen:<br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">SET SESSION TRANSACTION ISOLATION
LEVEL READ UNCOMMITTED;<br />
</span></p>
<h2><br />
</h2>
<h2>Fazit:</h2>
Also mir erschließt sich der Mehrwert der Memcached Erweiterung
nicht.
Handlersocket z.B. erlaubt den Zugriff auf jede und mehrere Tabellen
der Applikation. Das memcached Plugin verlangt eine Tabelle nach einem
festgelegtem Format. Die Usability ist bescheiden. Und wenn man meint
durch folgendes den mysqld nicht restarten zu müssen, crasht
mysqld eben :)<br />
<br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">mysql&gt; uninstall PLUGIN
daemon_memcached;<br />
Query OK, 0 rows affected (2.00 sec)<br />
<br />
mysql&gt; INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';<br />
Query OK, 0 rows affected (0.00 sec)<br />
</span><br />
</p>
<br />
<br />
Viel Spaß<br />
Erkan<br />
<br />]]>
        
    </content>
</entry>

<entry>
    <title>Spielen mit 5.6s Information_Schema Erweiterungen</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/11/spielen-mit-56s-information-schema-erweiterungen.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.197</id>

    <published>2011-11-20T23:06:52Z</published>
    <updated>2011-11-20T23:10:33Z</updated>

    <summary><![CDATA[Beim Rumspielen mit MySQL 5.6 - von der es Previewversionen gibt - fiel auf, dass es neue Tabellen im I_S gibt: 5.5.13: mysql&gt; show tables like 'INNODB%'; +----------------------------------------+ | Tables_in_information_schema (INNODB%) | +----------------------------------------+ | INNODB_CMP_RESET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | | INNODB_TRX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | |...]]></summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Beim Rumspielen mit MySQL 5.6 - von der es <a
href="http://labs.mysql.com/">Previewversionen</a> gibt - fiel auf,
dass es neue Tabellen im I_S gibt:<br>
<br>
5.5.13:<br>
<p
style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span
style="font-family: monospace;">mysql&gt; show tables like 'INNODB%';<br>
+----------------------------------------+<br>
| Tables_in_information_schema (INNODB%) |<br>
+----------------------------------------+<br>
|
INNODB_CMP_RESET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_TRX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_CMPMEM_RESET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_LOCK_WAITS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_CMPMEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_LOCKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
+----------------------------------------+<br>
</span></p>
5.6.2:<span style="font-family: monospace;"><br>
</span>
<p
style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span
style="font-family: monospace;">mysql&gt; SHOW TABLES LIKE 'INNODB%';<br>
+----------------------------------------+<br>
| Tables_in_information_schema (INNODB%) |<br>
+----------------------------------------+<br>
|
INNODB_CMPMEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_TRX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_BUFFER_PAGE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_LOCK_WAITS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_SYS_TABLESTATS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_SYS_COLUMNS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_CMPMEM_RESET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_SYS_FOREIGN_COLS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_BUFFER_PAGE_LRU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_BUFFER_POOL_STATS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_CMP_RESET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_SYS_FOREIGN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_METRICS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_SYS_INDEXES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_LOCKS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_SYS_FIELDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
|
INNODB_SYS_TABLES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
+----------------------------------------+<br>
</span></p>
Betrachten wir uns die INNODB_SYS_FOREIGN% Tabellen. Diese
erlauben es f&uuml;r InnoDB Tabellen einfach an die Foreign Keys (FK)
heran zu kommen. In der Datenbank existiert ein FK kind -&gt; papa. <br>
<span style="font-family: monospace;"></span>
<p
style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span
style="font-family: monospace;">mysql&gt; select * from
INNODB_SYS_FOREIGN;<br>
+------------------+-----------+-----------+--------+------+<br>
|
ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
FOR_NAME&nbsp; | REF_NAME&nbsp; | N_COLS | TYPE |<br>
+------------------+-----------+-----------+--------+------+<br>
| test/kind_ibfk_1 | test/kind | test/papa
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 |&nbsp;&nbsp;&nbsp; 1 |<br>
+------------------+-----------+-----------+--------+------+<br>
1 row in set (0.00 sec)<br>
<br>
mysql&gt; select * from INNODB_SYS_FOREIGN_COLS;<br>
+------------------+--------------+--------------+-----+<br>
|
ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
FOR_COL_NAME | REF_COL_NAME | POS |<br>
+------------------+--------------+--------------+-----+<br>
| test/kind_ibfk_1 |
id2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|&nbsp;&nbsp; 0 |<br>
+------------------+--------------+--------------+-----+<br>
1 row in set (0.00 sec)<br>
</span></p>
<span style="font-family: serif;">&Uuml;ber INNODB_SYS_FOREIGN erhalten
wir die verkn&uuml;pften Tabellen. TYPE = 1 meint hier ON DELETE
CASCADE. Imho nicht wirklich lesbar, vielleicht h&auml;tte man sich bei
TYPE
f&uuml;r den Typ SET entscheiden sollen :)<br>
<br>
Die Tabelle INNODB_SYS_FOREIGN_COLS verr&auml;t uns die Spalten des FK.<br>
Beide verkn&uuml;pft: &nbsp; </span><br>
<p
style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span
style="font-family: monospace;">mysql&gt; select
concat(FOR_NAME,":",FOR_COL_NAME," -&gt;
",REF_NAME,":",REF_COL_NAME)&nbsp; as FK from INNODB_SYS_FOREIGN_COLS
JOIN INNODB_SYS_FOREIGN using(ID);<br>
+-------------------------------+<br>
|
FK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
+-------------------------------+<br>
| test/kind:id2 -&gt; test/papa:id |<br>
+-------------------------------+<br>
</span></p>
<br>
<span style="font-family: serif;">Folgend sehen wir wie dies f&uuml;r
MySQL 5.[1,5,6].x auch ohne die neuen Tabellen (ann&auml;hernd)
erledigt werden kann.<br>
<br>
</span><span style="font-family: monospace;"></span>
<p
style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span
style="font-family: monospace;">mysql&gt; select * from
TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='FOREIGN KEY';<br>
+--------------------+-------------------+-----------------+--------------+------------+-----------------+<br>
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME |
TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE |<br>
+--------------------+-------------------+-----------------+--------------+------------+-----------------+<br>
|
def&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
kind_ibfk_1&nbsp;&nbsp;&nbsp;&nbsp; |
test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
kind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | FOREIGN
KEY&nbsp;&nbsp;&nbsp;&nbsp; |<br>
+--------------------+-------------------+-----------------+--------------+------------+-----------------+<br>
&nbsp;<br>
mysql&gt; select * from KEY_COLUMN_USAGE WHERE
CONSTRAINT_NAME='kind_ibfk_1'\G<br>
*************************** 1. row ***************************<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CONSTRAINT_CATALOG: def<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CONSTRAINT_SCHEMA: test<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CONSTRAINT_NAME:
kind_ibfk_1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
TABLE_CATALOG:
def<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
TABLE_SCHEMA:
test<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
TABLE_NAME:
kind<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
COLUMN_NAME:
id2<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ORDINAL_POSITION:
1<br>
POSITION_IN_UNIQUE_CONSTRAINT: 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REFERENCED_TABLE_SCHEMA: test<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REFERENCED_TABLE_NAME: papa<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REFERENCED_COLUMN_NAME: id<br>
<br>
mysql&gt; SELECT
concat(A.TABLE_SCHEMA,'/',A.TABLE_NAME,':',A.COLUMN_NAME,' -&gt;
',A.REFERENCED_TABLE_SCHEMA,'/',A.REFERENCED_TABLE_NAME,':',A.REFERENCED_COLUMN_NAME)
FK
from KEY_COLUMN_USAGE A JOIN TABLE_CONSTRAINTS
USING(CONSTRAINT_NAME) WHERE TABLE_CONSTRAINTS.CONSTRAINT_TYPE='FOREIGN
KEY';<br>
+-------------------------------+<br>
|
FK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
+-------------------------------+<br>
| test/kind:id2 -&gt; test/papa:id |<br>
+-------------------------------+<br>
<br>
</span></p>
Wenn sich jemand merkt, wof&uuml;r die jeweiligen Werte der Type Spalte
in 5.6.2 stehen, sind im Zugriff auf INNODB_SYS_FROREIG% mehr
Informationen zu holen. Letzterer Ansatz hat nicht nur denVorteil auf
MySQL 5.1.x und 5.5.x zu laufen, sondern auch FKs auf Tabellen zu
entdecken, welche nicht InnoDB sind.<br>
<br>
<br>
<br>
Viel Spa&szlig;<br>
Erkan<br>
<br>
]]>
        
    </content>
</entry>

<entry>
    <title>DOAG 2011</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/11/doag-2011.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.196</id>

    <published>2011-11-14T09:53:53Z</published>
    <updated>2011-11-14T09:59:03Z</updated>

    <summary><![CDATA[Moin, morgen beginnt die DOAG 2011. Auf der werden einige Vorträge gehalten werden.Zwei (1,2) von mir.&nbsp;Jene, welche sich dort aufhalten, werden gebeten aufzuschlagen.Viel SpaßErkan :)...]]></summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="konferenz" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Moin, morgen beginnt die DOAG 2011. Auf der werden einige Vorträge gehalten werden.<br />Zwei (<a href="http://www.doag.org/konferenz/vortrag_details.php?merken=0&amp;id=427852">1</a>,<a href="http://www.doag.org/konferenz/vortrag_details.php?merken=0&amp;id=427857">2</a>) von mir.&nbsp;<br />Jene, welche sich dort aufhalten, werden gebeten aufzuschlagen.<br /><br />Viel Spaß<br />Erkan :)<br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>MySQL 24/7 [Update]</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/10/mysql-257.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.190</id>

    <published>2011-10-10T09:38:43Z</published>
    <updated>2011-10-11T22:21:17Z</updated>

    <summary><![CDATA[Wer sich gegenwärtig auf MySQL@Launchpad zugreifen will wird mit folgendem Schild konfrontiert:&nbsp; Auch downloads.mysql.com ist (seit mind.) diesem Wochenende nicht verfügbar. Hierhin wird man geschickt, alsbald man&nbsp; z.B.&nbsp; die - heftig umworbenen - 5.6.x Features anschauen will.Es soll Änderungen in...]]></summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Wer sich gegenwärtig auf MySQL@Launchpad zugreifen will wird mit folgendem Schild konfrontiert:<br /><br /><br /><form class="mt-enclosure mt-enclosure-image" style="display: inline;" contenteditable="false"><img alt="launchpad.png" src="http://linsenraum.de/erkules/2011/10/10/launchpad.png" class="mt-image-center" style="text-align: center; display: block; margin: 0pt auto 20px;" height="111" width="448" /></form>&nbsp; <br />Auch
 downloads.mysql.com ist (seit mind.) diesem Wochenende nicht verfügbar.
 Hierhin wird man geschickt, alsbald man&nbsp; z.B.&nbsp; die - heftig umworbenen -
 5.6.x Features anschauen will.<br />Es soll Änderungen in der 
Infrastruktur von MySQL gegeben haben. So dass diese nun nicht mehr 
direkt zugänglich sind.&nbsp; Aber mir ist hier keine Ankündigung bekannt.<br /><br />[Update]<br />Beides ist wieder verfügbar. <br />Das nächste mal werde ich früher bloggen. <br />Versprochen! :)<br />]]>
        
    </content>
</entry>

<entry>
    <title>Momentum Galera</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/06/momentum-galera.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.177</id>

    <published>2011-06-24T23:42:53Z</published>
    <updated>2011-06-24T23:47:26Z</updated>

    <summary><![CDATA[ Ich hatte schon länger vor mir mal&nbsp;Galera anzuschauen. Folgender Blog hatte mich daran erinnert es endlich zu machen. Was ist Galera? Galera verspricht synchrone Replikation und ein Multi-Master-Setup. So werden die Daten nicht nur sicher repliziert, nein Galera ist...]]></summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="HA" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[
  Ich hatte schon länger vor mir mal&nbsp;<a href="http://codership.com/">Galera</a> anzuschauen. Folgender <a href="http://openlife.cc/blogs/2011/june/first-touch-galera-clustering-mysql">Blog</a>
hatte mich daran erinnert es endlich zu machen. <br />
Was ist Galera?<br />
Galera verspricht synchrone Replikation und ein Multi-Master-Setup. So
werden die Daten nicht nur sicher repliziert, nein Galera ist es auch
egal in welche der Nodes (auch gleichzeitig) geschrieben wird.<br />
Um dies zu bewerkstelligen wurde MySQL gepatcht. Wobei wir auch schon
beim ersten Problem sind. Wer sich Galera (Version 0.8) anschauen will
bekommt eine MySQL 5.1.53. Des weiteren repliziert Galera nur
InnoDB/XtraDB-Tabellen. Da obiger Blog schon mit einem Howto kommt.
Erspare ich mir diese Erklärung. Zudem ist die Installation des
Demo-Tar-Balls straight forward.<br />
Galera erlaubt unter anderem eine (nahezu) synchrone Replikation. Die
erste Frage die sich stellen mag, ist ob das nicht etwas langsam ist?
Mit MySQL 5.5.x gibt es die semisynchrone Replikation, welche zumindest
in die Nähe der synchronen Replikation kommt. Zwar erlaubt Galera
auch so schöne Sachen wie auf alle Nodes gleichzeitig zu
schreiben, aber dies wird in einem späteren Blogpost fokusiert
werden.<br />
Getestet wurden MySQL 5.5.13 und Galera 0.8 (ships with MySQL 5.1.53).<br />
Die Konfiguration richtetet sich nach der von Galera mitegelieferten
Konfig. Einzig innodb_buffer_pool_size wurde auf 4GB gesetzt.<br />
<br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">innodb_flush_log_at_trx_commit=0<br />
innodb_buffer_pool_size=4G<br />
innodb_log_file_size=100M<br />
innodb_doublewrite=0<br />
innodb_locks_unsafe_for_binlog=1<br />
innodb_autoinc_lock_mode=2<br />
</span></p>
Für einen schnellen Test wurden je 100.000 Rows mit einer
Concurrency von 1,8,16,32,64,128 und 256 in eine einfache Tabelle
geschrieben.<br />
<br />
<img style="width: 680px; height: 480px;" alt="replikation" src="http://linsenraum.de/erkules/png/galera-sync.png" /><br />
Ein einfacher aber imho schon beeindruckender Test. So ist bietet sich
Galera schon als performanterer Ersatz für semisynchrone
Replikation an. Unterstützung für MySQL 5.5.x ist in der
Mache und es ist schwer zu Hoffen, daß Galera in mind. einem der
MySQL-Branches aufgenommen wird.<br />
<br />
Viel Spaß<br />
Erkan<br />]]>
        
    </content>
</entry>

<entry>
    <title>Mysql 5.1.x und dann noch tar-files?</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/06/mysql-51x-und-dann-noch-tar-files.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.175</id>

    <published>2011-06-18T15:43:55Z</published>
    <updated>2011-06-18T16:00:30Z</updated>

    <summary>Moinsen, ich nutze noch stark die 5.1.xer Schiene von MySQL. Zudem verwende ich keine Pakete der Distributionen. Beim Verarbeiten der Binärpakete von MySQL. Schrieben meine Installskripte - bei der 5.1.57 - plötzlich ins Errorlog:WARNING: HELP FILES ARE NOT COMPLETELY INSTALLED!The...</summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Moinsen, ich nutze noch stark die 5.1.xer Schiene von MySQL. Zudem verwende ich keine Pakete der Distributionen. Beim Verarbeiten der Binärpakete von MySQL. Schrieben meine Installskripte - bei der 5.1.57 - plötzlich ins Errorlog:<br /><br /><pre class="note">WARNING: HELP FILES ARE NOT COMPLETELY INSTALLED!<br />The "HELP" command might not work properly.<br /></pre>Genaueres ist <a href="http://bugs.mysql.com/bug.php?id=61520">hier</a> nachzulesen. Da wurde die fill_help_tables.sql - von 5.1.56 auf 5.1.57 - um genauere Links erweitert. Nur dass diese dann zu lang für `url` char(128) NOT NULL in der Tabelle mysql.help_topic waren.<br /><br />Es handelt sich "nur" um die Helpfiles ... aber trotzdem :)<br /><br />Viel Spaß<br />Erkan<br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>MariaDB on temporary tables</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/06/mariadb-on-temporary-tables.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.174</id>

    <published>2011-06-02T21:16:07Z</published>
    <updated>2011-06-02T21:22:48Z</updated>

    <summary>MariaDB soll laut folgender Page bei temporay tables schneller sein als MySQL. Da: Our use of the Aria storage engine enables faster complex queries (queries which normally use disk-based temporary tables). The Aria storage engine is used for internal temporary...</summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="MariaDB" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[MariaDB soll laut folgender <a href="http://kb.askmonty.org/v/mariadb-versus-mysql-features">Page</a>
bei temporay tables schneller sein als MySQL. Da:<br />
<div style="margin-left: 40px; text-align: left;"><span style="font-style: italic;"><br />
Our use of the Aria storage engine enables faster complex queries
(queries which normally use disk-based temporary tables). The </span><a style="font-style: italic;" href="http://kb.askmonty.org/v/aria-formerly-known-as-maria">Aria</a><span style="font-style: italic;"> storage engine is used for internal
temporary tables, which should give you a speedup when doing complex
selects. Aria is usually faster for temporary tables when compared to
MyISAM because Aria caches row data in memory and normally doesn't have
to write the temporary rows to disk.</span>
</div>
<br />
Um dies zu testen wurden folgende Versionen installiert:<br />
<ul>
<li>MySQL 5.5.12</li>
<li>MySQL 5.1.57</li>
<li>MariaDB 5.2.6</li>
<li>MariaDB 5.1.55<br />
</li>
</ul>
Es wurden zwei Tabellen mit jeweils 10000 Rows erstellt:<br />
<br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">mysql&gt; desc
sort_id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+-------+---------+------+-----+---------+-------+&nbsp;&nbsp;&nbsp;&nbsp;
</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">| Field | Type&nbsp;&nbsp;&nbsp;
| Null | Key | Default | Extra |&nbsp;&nbsp;&nbsp;&nbsp; </span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+-------+---------+------+-----+---------+-------+&nbsp;&nbsp;&nbsp;&nbsp;
</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">| id&nbsp;&nbsp;&nbsp; | int(11)
| YES&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; | NULL&nbsp;&nbsp;&nbsp;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; </span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+-------+---------+------+-----+---------+-------+&nbsp;&nbsp;&nbsp;&nbsp;
</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">1 row in set (0.00
sec)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">mysql&gt; desc
sort_1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+-------+---------+------+-----+---------+-------+&nbsp;&nbsp;&nbsp;&nbsp;
</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">| Field | Type&nbsp;&nbsp;&nbsp;
| Null | Key | Default | Extra |&nbsp;&nbsp;&nbsp;&nbsp; </span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+-------+---------+------+-----+---------+-------+&nbsp;&nbsp;&nbsp;&nbsp;
</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">| id&nbsp;&nbsp;&nbsp; | int(11)
| YES&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; | NULL&nbsp;&nbsp;&nbsp;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; </span><br style="font-family: monospace;" />
<span style="font-family: monospace;">| tea&nbsp;&nbsp; |
text&nbsp;&nbsp;&nbsp; | YES&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; |
NULL&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|&nbsp;&nbsp;&nbsp;&nbsp; </span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+-------+---------+------+-----+---------+-------+&nbsp;&nbsp;&nbsp;&nbsp;
</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">2 rows in set (0.00 sec) </span><br />
</p>
Auf allen Servern wurde zudem<span style="font-family: Courier New,Courier,monospace;"> tmp_table_size</span>
auf 1024 gesetzt um Temptables schnellstmöglich zu erzwingen.<br />
Daraufhin wurde mit mysqlslap die Query SELECT * FROM sort_id group by
id 20x3 mal ausgeführt. Dies geschah auch für die Tabelle
sort_1.<br />
Hier erst mal der EXPLAIN zu den Queries:<br /><br />
<p style="font-family: monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;">mysql&gt;
explain SELECT * from sbtest.sort_id group by id\G<br />
*************************** 1. row ***************************<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id: 1<br />
&nbsp; select_type: SIMPLE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table: sort_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type: ALL<br />
possible_keys: NULL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key: NULL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key_len: NULL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ref: NULL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows: 10000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Extra: <span style="color: rgb(0, 0, 153);">Using temporary</span>; Using filesort<br />
1 row in set (0.00 sec)<br />
<br />
mysql&gt; explain SELECT * from sbtest.sort_1 group by id\G<br />
*************************** 1. row ***************************<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id: 1<br />
&nbsp; select_type: SIMPLE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table: sort_1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type: ALL<br />
possible_keys: NULL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key: NULL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key_len: NULL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ref: NULL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows: 10000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Extra: <span style="color: rgb(0, 0, 153);">Using temporary</span>; Using filesort<br />
1 row in set (0.00 sec)<br />
<br />
</p>
<br />Die (aufgehübschte) Ausgabe sah für <span style="font-family: Courier New,Courier,monospace;">SELECT * from
sort_1 group&nbsp; by id</span>; wiefolgt aus:<br /><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code>Benchmark
[[5.5.12]]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of seconds to
run all queries: 1.803 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Minimum number of seconds to
run all queries: 1.791 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maximum number of seconds to
run all queries: 1.826 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number of clients running
queries: 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of queries
per client: 20<br />
<br />
Benchmark [[MariaDB 5.2.6]]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of seconds to
run all queries: 5.547 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Minimum number of seconds to
run all queries: 5.542 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maximum number of seconds to
run all queries: 5.556 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number of clients running
queries: 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of queries
per client: 20<br />
<br />
Benchmark [[5.1.57]]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of seconds to
run all queries: 1.605 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Minimum number of seconds to
run all queries: 1.603 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maximum number of seconds to
run all queries: 1.606 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number of clients running
queries: 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of queries
per client: 20<br />
<br />
Benchmark [[MariaDB 5.1.55]]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of seconds to
run all queries: 5.283 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Minimum number of seconds to
run all queries: 5.214 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maximum number of seconds to
run all queries: 5.344 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number of clients running
queries: 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of queries
per client: 20<br />
<br />
</code></p>
<br />
Die (aufgehübschte) Ausgabe sah für <span style="font-family: Courier New,Courier,monospace;">SELECT * from
sort_id group&nbsp; by id;</span> wiefolgt aus:<br />
<code><br />
</code>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code>Benchmark
[[5.5.12]]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of seconds to
run all queries: 1.146 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Minimum number of seconds to
run all queries: 1.135 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maximum number of seconds to
run all queries: 1.170 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number of clients running
queries: 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of queries
per client: 20<br />
<br />
Benchmark&nbsp; [[MariaDB 5.2.6]]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of seconds to
run all queries: 4.359 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Minimum number of seconds to
run all queries: 4.352 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maximum number of seconds to
run all queries: 4.366 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number of clients running
queries: 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of queries
per client: 20<br />
<br />
Benchmark [[5.1.57]]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of seconds to
run all queries: 1.049 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Minimum number of seconds to
run all queries: 1.032 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maximum number of seconds to
run all queries: 1.068 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number of clients running
queries: 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of queries
per client: 20<br />
<br />
Benchmark [[MariaDB 5.1.55]]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of seconds to
run all queries: 4.261 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Minimum number of seconds to
run all queries: 4.202 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maximum number of seconds to
run all queries: 4.341 seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number of clients running
queries: 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Average number of queries
per client: 20<br />
<br />
</code></p>
<code><span style="font-family: serif;"><br />
<img style="width: 680px; height: 480px;" alt="BlobTable grouped by" src="http://linsenraum.de/erkules/png/blob-group.png" /><br />
<img style="width: 680px; height: 480px;" alt="table grouped by" src="http://linsenraum.de/erkules/png/group.png" /><br />
<br />
Nutzt MariaDB wieder die MyISAM-Engine für die temporay tables ist
laut Serg </span></code>Golubchik die Performance wieder vergleichbar
mit MySQL. Derzeit muss festgehalten werden, dass die Aussage MariaDB
sei bei tmp-tables performanter nicht verifiziert werden kann. <br />
<br />
<br />
Viel Spaß<br />
Erkan<br />]]>
        
    </content>
</entry>

<entry>
    <title>Power to the Backend</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/05/power-to-the-backend.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.171</id>

    <published>2011-05-08T23:17:45Z</published>
    <updated>2011-05-08T23:55:17Z</updated>

    <summary> Ich selbst nutze unter anderem PowerDNS als DNS-Server. Im letzten Monat betrachtete ich mir dessen MySQL-Backend, da ich über zwei Kanäle darüber informiert wurde, dass PowerDNS mit dem Backend nicht skaliert. Die DNS-Records werden in PowerDNS in zwei Tabellen...</summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="PowerDNS" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="mysql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[ Ich selbst nutze unter anderem PowerDNS als DNS-Server. Im letzten
Monat betrachtete ich mir dessen MySQL-Backend, da ich über zwei
Kanäle darüber informiert wurde, dass PowerDNS mit dem
Backend nicht skaliert. <br />
<br />
Die DNS-Records werden in PowerDNS in zwei Tabellen abgelegt. Eine
für die Domains:<br /><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><span style="font-family: monospace;">create table domains (</span><br style="font-family: monospace;" />
<span style="font-family: monospace;"> id INT auto_increment,</span><br style="font-family: monospace;" />
<span style="font-family: monospace;"> name VARCHAR(255) NOT NULL,</span><br style="font-family: monospace;" />
<span style="font-family: monospace;"> master VARCHAR(128) DEFAULT NULL,</span><br style="font-family: monospace;" />
<span style="font-family: monospace;"> last_check INT DEFAULT NULL,</span><br style="font-family: monospace;" />
<span style="font-family: monospace;"> type VARCHAR(6) NOT NULL,</span><br style="font-family: monospace;" />
<span style="font-family: monospace;"> notified_serial INT DEFAULT
NULL, </span><br style="font-family: monospace;" />
<span style="font-family: monospace;"> account VARCHAR(40) DEFAULT NULL,</span><br style="font-family: monospace;" />
<span style="font-family: monospace;"> primary key (id)</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">) Engine=InnoDB;</span><br />
</p>
Und eine weitere für die Records:<br /><br />
<p style="font-family: monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;">CREATE
TABLE records (<br />
id int(11) NOT NULL auto_increment,<br />
domain_id int(11) NOT NULL,<br />
name varchar(255) NOT NULL,<br />
type varchar(10) NOT NULL,<br />
content varchar(255) NOT NULL,<br />
ttl int(11) NOT NULL,<br />
prio int(11) default NULL,<br />
change_date int(11) default NULL,<br />
PRIMARY KEY (id),<br />
KEY name_index(name),<br />
KEY nametype_index(name,type),<br />
KEY domainid_index(domain_id)<br />
);</p>
Zudem existiert noch ein FK-Constraint, aber auch der tut hier nichts
zur Sache.<br />
Die Tabelle domains wurde mit 6.000.000 Datensätzen bestückt.
Die Tabelle records wurde mit 46.195.356 Datensätzen
bestückt. Ich denke damit wird schon ein größerer DNS-Server simuliert :D<br /><br />
Zwar schien es, als sollte man sich mal Gedanken über die
Normalisierung ansich machen, doch das war nicht
mein Skope. Es galt mit etwas Mikrotuning schon Erfolge zu erzielen. PowerDNS pdns-3.0-rc2 und folgende MySQL-Version kam zum Einsatz:<br /><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code>[pdns]&gt;
SELECT VERSION();<br />
+-------------------+<br />
| VERSION()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
+-------------------+<br />
| 5.2.5-MariaDB-log |<br />
+-------------------+<br />
1 row in set (0.00 sec)<br />
</code></p>
<code><span style="font-family: serif;">Die Datenbank meinte die
Tabellen würden folgenden Platzverbrauch haben.</span><br /><br />
</code>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code>&gt;
SELECT TABLE_NAME,INDEX_LENGTH,DATA_LENGTH from
information_schema.TABLES where TABLE_NAME IN('records','domains');<br />
+------------+--------------+-------------+<br />
| TABLE_NAME | INDEX_LENGTH | DATA_LENGTH |<br />
+------------+--------------+-------------+<br />
| domains&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 475004928 |&nbsp;&nbsp;
431898624 |<br />
| records&nbsp;&nbsp;&nbsp; |&nbsp; 11372855296 |&nbsp; 5813305344 |<br />
+------------+--------------+-------------+<br />
<br />
</code></p>
<code><span style="font-family: serif;">Bei PowerDNS wurden alle Caches
abgeschaltet (es galt die Datenbank zu testen!) und 494969 disjunkte
DNS-Abfragen gestellt. Diese waren in 48.9 Sekunden durchgelaufen, was
ca. 10114 qps entspricht. (Für jeden Test wurde die Datenbank
restartet und der zweite Lauf genommen.)<br /><br />Da Abfragen gegen die Tabelle records gehen,&nbsp; nur diese Tabelle "optimiert"- Einige Änderungen sind analog in der Tabelle domains möglich.<br />
<br />
Als erste Optimierung wurde ein redundanter Index entfernt. <br />
<br />
</span></code>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code>drop&nbsp;
index `rec_name_index`&nbsp; on records;<br />
</code></p>
<code><span style="font-family: serif;"><br />
Hiernach wurden 10822 qps gemessen. Dies ist wohl nicht die Welt. Beim
Platzverbrauch sieht es schon besser aus:</span><br />
</code><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code>+------------+--------------+-------------+<br />
| TABLE_NAME | INDEX_LENGTH | DATA_LENGTH |<br />
+------------+--------------+-------------+<br />
| domains&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 475004928 |&nbsp;&nbsp;
431898624 |<br />
| records&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 6116343808 |&nbsp; 5813305344
|<br />
+------------+--------------+-------------+<br />
</code></p>
<span style="font-family: serif;">Die Spalte type speichert die
Recordtypen</span>. Aus dem VARCHAR wird im Index ein CHAR. Da die
Menge der Werte begrenzt ist bietet sich hier ein ENUM an. Welches den
Vorteil hat ein INT zu sein und zum anderen sicherstellt, dass nicht
andere als die definierten Werte in die Tabelle kommen.<br /><br />
<code></code>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code>ALTER
TABLE records&nbsp;&nbsp; MODIFY&nbsp; `type`
enum('A','AAAA','SOA','NS','MX','CNAME','PTR','TXT');<br />
</code></p>
<code><span style="font-family: serif;">Zugegeben, dies ist nur ein
Subset der nötigen Recordtypen. Am Ergebnis wird dies nichts
ändern. Nach dieser Änderung haben wir nun 10918 qps.
Angenehmer ist die weitere Reduktion der Datengröße. Diesmal
auch nicht nur bei den Indexdaten.</span><br /><br />
</code>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code><br />
+------------+--------------+-------------+<br />
| TABLE_NAME | INDEX_LENGTH | DATA_LENGTH |<br />
+------------+--------------+-------------+<br />
| domains&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 475004928 |&nbsp;&nbsp;
431898624 |<br />
| records&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 5816451072 |&nbsp; 5696913408
|<br />
+------------+--------------+-------------+<br />
<br />
</code></p>
<code><span style="font-family: serif;">All diese Tests liefen
mit&nbsp; distributor-threads=32. Das ist eine
Konfigurationseinstellung (im PowerDNS) für die Anzahl der
Verbindungen, die PowerDNS zur Datenbank öffnet. Der Default liegt
bei 3. Mit </span></code><code><span style="font-family: serif;">distributor-threads=3
erreichte ich lediglich<span style="font-family: serif;"> 5656 qps.<br />
Zu guter Letzt ändern wir noch den Index nametype_index. Die
wenigsten FQDN nutzen die im RFC ermöglichten 255 Zeichen aus.
Sprich hier lohnt sich ein prefix-Index. (Der alte wurde gedropt)<br /><br />
</span></span></code><code></code>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code>CREATE
INDEX `nametype_index` on records(name(100),type);<br />
</code></p>
<small><big><span style="font-family: serif;">Nun waren wir bei 10923
qps angelangt und was sagt der Platzverbrauch?</span><br /><br />
</big></small>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><small><big><span style="font-family: monospace;">+------------+--------------+-------------+</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">| TABLE_NAME | INDEX_LENGTH |
DATA_LENGTH |</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+------------+--------------+-------------+</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">| domains&nbsp;&nbsp;&nbsp;
|&nbsp;&nbsp;&nbsp; 475004928 |&nbsp;&nbsp; 431898624 |</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">| records&nbsp;&nbsp;&nbsp;
|&nbsp;&nbsp; 3547332608 |&nbsp; 5696913408 |</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+------------+--------------+-------------+<br />
</span></big></small></p>
<br />
Sweet! Halten wir fest die Index_legth ist von <code style="font-family: serif;">11372855296 Bytes auf </code><small style="font-family: serif;"><big>3547332608 Bytes reduziert worden.</big></small>
Damit wurden hier etwas über 7GB gespart \o/<br />
An diesem Punkt angelangt wurden die records noch in PBXT
geändert. Hierbei wurden 12375 qps erreicht:) Wobei der
Platzverbrauch immens anstieg:<br /><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><small><big><span style="font-family: monospace;">| records&nbsp;&nbsp;&nbsp;
|&nbsp;&nbsp; 5684629504 | 12380356432 |<br />
</span></big>
</small></p>
<br />
Später wurde ich in #powerdns darauf hingewiesen, dass das
verwendete Benchmarktool (dnsperf) auch mit einer längeren Queue
ausgeführt werden kann. So wurden mit <span style="font-family: Courier New,Courier,monospace;">./dnsperf -d
/var/tmp/pdns.list -q 2000 -s localhost</span> schnell 22994 qps
erreicht.<br />
Das ist selbstredend nur ein Anfang. Aber zeigt es doch, dass in vielen
Projekten noch Steigerungspotential steckt. Von nicht skalieren kann aber nicht gesprochen werden. :) <br />
<br />
<br />
Viel Spaß<br />
Erkan<br />]]>
        
    </content>
</entry>

</feed>

