<?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>2011-12-28T10:13:54Z</updated>
    <subtitle>bloggiwoggi</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.23-en</generator>

<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>

<entry>
    <title>MariaDBs Kruschelkiste: Dynamic Columns for MySQL</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/05/mariadbs-kruschelkiste-dynamic-columns-for-mysql.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.170</id>

    <published>2011-05-08T02:11:44Z</published>
    <updated>2011-05-08T03:06:01Z</updated>

    <summary>Mit MariaDB 5.3 wird ein neuer ColumnType Einzug halten. Das sogenannte Dynamic Column. Die Idee ist gewisse Vorgehensweisen, welche aus den DocumentStore-Lösungen (z.B. MongoDB) bekannt sind zu erfüllen. Ob man das wirklich will, liegt nicht an mir zu entscheiden. Doch...</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[Mit MariaDB 5.3 wird ein neuer ColumnType Einzug halten. Das sogenannte
Dynamic Column. Die Idee ist gewisse Vorgehensweisen, welche aus den
DocumentStore-Lösungen (z.B. MongoDB) bekannt sind zu
erfüllen. Ob man das wirklich will, liegt nicht an mir zu
entscheiden. Doch sei folgender <a href="http://blog.koehntopp.de/archives/3057-Zusammenfassung-Schemaless.html">Link</a>
dem geneigten Leser nahe gelegt.<br />
Die Idee ist denkbar einfach: In der Tabelle wird eine BLOB-Spalte
verwendet um darin die dynamischen Element zu verwalten.<br />
Es sei erwähnt, dass zum Nachspielen&nbsp;
https://code.launchpad.net/~maria-captains/maria/5.3-mwl34 zu verwenden
ist.<br />
<br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code>MariaDB
[test]&gt; SELECT VERSION();<br />
+---------------------+<br />
| VERSION()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br />
+---------------------+<br />
| 5.3.0-MariaDB-alpha |<br />
+---------------------+<br />
1 row in set (0,00 sec)<br />
</code></p>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><small><span style="font-family: monospace;"><big>CREATE TABLE dyni ( id INT,
sonderlocke BLOB</big></span>);<br />
</small></p>
Hier ist noch keine Magie. Jede StorageEngine, welche mit BLOB umgehen
kann erfüllt dies.<br />
<br />
sql/lex.h verrät uns dass folgende Funktionen existieren:<br />
COLUMN_ADD&nbsp;&nbsp;&nbsp;&nbsp; <br />
COLUMN_CREATE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
COLUMN_DELETE&nbsp; <br />
COLUMN_EXISTS<br />
COLUMN_GET&nbsp;&nbsp;&nbsp;&nbsp; <br />
COLUMN_LIST<br />
<br />
COLUMN_CREATE() wird zum initialisieren des BLOB-Eintrages genutzt:<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;">INSERT INTO dyni
VALUES(1,COLUMN_CREATE(1 , "hallo", 2 , 42));</span><br />
</p>
COLUMN_CREATE() erhält seine Argumente in der Form key, value ,
key value. Perlmonger wünschen sich hier schnell ein =&gt; herbei.
key =&gt; value , key =&gt; value ;)<br />
Hier wird auch klar, dass es sich *genaugenommen* nicht um einen neuen
ColumnType handelt. Dieser ist und bleibt BLOB. Mit COLUMN_CREATE() wird
der BLOB Zeile für Zeile initialisiert.<br />
Mit COLUMN_LIST() gibt die Keys der Spalte zurück und
COLUMN_GET(key) den Value des Keys:<br /><br />
<code></code><code class="red"></code>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code class="red"><small><big><big><big><small><span style="font-weight: bold;"></span></small></big></big></big></small>MariaDB
[test]&gt; SELECT id, COLUMN_LIST(sonderlocke) from dyni;<br />
+------+--------------------------+<br />
| id&nbsp;&nbsp; | COLUMN_LIST(sonderlocke) |<br />
+------+--------------------------+<br />
|&nbsp;&nbsp;&nbsp; 1 |
1,2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br />
+------+--------------------------+<br />
MariaDB [test]&gt; SELECT id,COLUMN_GET(sonderlocke,1 as char) from
dyni;<br />
+------+------------------------------------+<br />
| id&nbsp;&nbsp; | COLUMN_GET(sonderlocke,id as char) |<br />
+------+------------------------------------+<br />
|&nbsp;&nbsp;&nbsp; 1 |
hallo&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;
|<br />
+------+------------------------------------+<br />
1 row in set (0,00 sec)<br />
<br />
</code></p>
COLUMN_GET() verlangt als erstes Argument den Spaltennamen, gefolgt von
dem Key. Hier muss - wie bei NoSQL wohl üblich - der Anwender
angeben, von welchem typ der Inhalt ist ( .. as char). Sollen weitere
Einträge gemacht werden ist COLUMN_ADD() zu verwenden.
COLUMN_ADD() kann auch Keys löschen indem der Value auf NULL
gesetzt wird. Wem dies zu merkwürdig ist kann auch COLUMN_DELETE()
verwenden.<br /><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code class="red">MariaDB [test]&gt; UPDATE dyni SET
sonderlocke=COLUMN_ADD(sonderlocke,2,NULL,3,"\o/");<br />
Query OK, 1 row affected (0,00 sec)<br />
Rows matched: 1&nbsp; Changed: 1&nbsp; Warnings: 0<br />
<br />
MariaDB [test]&gt; SELECT id, COLUMN_LIST(sonderlocke) from dyni;<br />
+------+--------------------------+<br />
| id&nbsp;&nbsp; | COLUMN_LIST(sonderlocke) |<br />
+------+--------------------------+<br />
|&nbsp;&nbsp;&nbsp; 1 |
1,3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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 />
<br />
</code></p>
<code class="red">&nbsp; </code>COLUMN_EXISTS() prüft ob der
angefragte Key vorhanden ist.<br /><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code class="red"></code><span style="font-family: monospace;">MariaDB
[test]&gt; SELECT COLUMN_EXISTS(sonderlocke,1) from dyni;</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+------------------------------+</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">| COLUMN_EXISTS(sonderlocke,1) |</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+------------------------------+</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;
1 |</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+------------------------------+</span><br />
</p>
Das schöne an dieser Lösung ist&nbsp; - wie anfangs
erwähnt -, dass die StorageEngine nur BLOBs unterstützen muss.<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;">MariaDB [test]&gt; ALTER TABLE dyni
ENGINE=Aria;</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">Query OK, 1 row affected (0,01
sec)</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">Records: 1&nbsp; Duplicates:
0&nbsp; Warnings: 0</span><br style="font-family: monospace;" />
<br style="font-family: monospace;" />
<span style="font-family: monospace;">MariaDB [test]&gt; SELECT id,
COLUMN_LIST(sonderlocke) from dyni;</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+------+--------------------------+</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">| id&nbsp;&nbsp; |
COLUMN_LIST(sonderlocke) |</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+------+--------------------------+</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">|&nbsp;&nbsp;&nbsp; 1 |
1,3&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;">+------+--------------------------+</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">1 row in set (0,00 sec)</span><br style="font-family: monospace;" />
<br style="font-family: monospace;" />
<span style="font-family: monospace;">MariaDB [test]&gt; ALTER TABLE
dyni ENGINE=InnoDB;</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">Query OK, 1 row affected (0,04
sec)</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">Records: 1&nbsp; Duplicates:
0&nbsp; Warnings: 0</span><br style="font-family: monospace;" />
<br style="font-family: monospace;" />
<span style="font-family: monospace;">MariaDB [test]&gt; SELECT
id,COLUMN_GET(sonderlocke,1 as char) from dyni;</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+------+-----------------------------------+</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">| id&nbsp;&nbsp; |
COLUMN_GET(sonderlocke,1 as char) |</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">+------+-----------------------------------+</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">|&nbsp;&nbsp;&nbsp; 1 |
hallo&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;">+------+-----------------------------------+</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">1 row in set (0,00 sec)</span><br style="font-family: monospace;" />
<br style="font-family: monospace;" />
<span style="font-family: monospace;">MariaDB [test]&gt; ALTER TABLE
dyni ENGINE=PBXT;</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">Query OK, 1 row affected (0,05
sec)</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">Records: 1&nbsp; Duplicates:
0&nbsp; Warnings: 0</span><br style="font-family: monospace;" />
<br style="font-family: monospace;" />
<span style="font-family: monospace;">MariaDB [test]&gt; UPDATE dyni
SET sonderlocke=COLUMN_ADD(sonderlocke,2,"pbxt");</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">Query OK, 1 row affected (0,00
sec)</span><br style="font-family: monospace;" />
<span style="font-family: monospace;">Rows matched: 1&nbsp; Changed:
1&nbsp; Warnings: 0</span><br />
<br />
</p>
<br />
<br />
Damit ist der Schnelldurchlauf durch eines der kommenden Features von
MariaDB 5.3 schon am Ziel angelangt. Auf der TODO-Liste des Features
steht unter anderem noch die Möglichkeit die Keys (dynamic Columns) zu benamsen.<br />
Dieses Feature ist imho als Antwort auf die DocumentStore-Fraktion von
NoSQL zu verstehen. Auch wenn es nicht den Anspruch haben sollte
äquivalent zu den Möglichkeiten von i.e. BSON zu sein. Aber
für wen es reicht .. :)<br />
<br />
Viel Spaß<br />
Erkan<br />]]>
        
    </content>
</entry>

<entry>
    <title>Bughunter der ich bin?</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/05/bughunter-der-ich-bin.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.169</id>

    <published>2011-05-01T18:14:38Z</published>
    <updated>2011-05-01T18:36:50Z</updated>

    <summary> Ich bin der Meinung, dass es sich gehört, dass Blogs Kommentare zulassen. Ist dies nicht der Fall, wird aus einem Blog zu schnell ein authistisches Tagebuch. In diesem Blog fragt sich der Autor, ob er einen Bug in den...</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 bin der Meinung, dass es sich gehört, dass Blogs Kommentare
zulassen. Ist dies nicht der Fall, wird aus einem Blog zu schnell ein
authistisches Tagebuch.<br />
In diesem <a href="http://www.twiedmann.de/sqlbackstube/mysql_procedure_performance">Blog</a>
fragt sich der Autor, ob er einen Bug in den neueren MySQL-Versionen
(&gt;5.1.x) gefunden hat:<br />
<br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code>mysql&gt;SELECT
BENCHMARK(100, fibonacci(10000));<br />
</code><code class="red">ERROR 1690 (22003): DOUBLE value is out of
range in '(f1@1 + f2@3)' <br /></code></p><p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"><code class="red">Uups, was ist das. Die MySQL Version 5.5.9 steigt mit einem
SQL-Fehler (ERROR 1690) aus. Ist dies ein Bug?<br />
</code></p>
<p class="text">Ganz im Gegenteil die Fehlermeldung ist hier genau
richtig. Denn die Fibonacci-Reihe übersteigt den
Definitionsbereich von DOUBLE. Das tat es schon in der 5.1.x und
früher. Nur jetzt gibt es eben einen Fehler .. was gut ist!<br />
Warum die genutzte Funktion überhaupt mit DOUBLE arbeitet ist mir
bei der Fibonacci-Reihe so oder so schleierhaft :/</p><p class="text"><br /></p><p class="text">BTW: Dies hat nichts mit der ursprünglichen Fragestellung des Autors über die Performance von Proceduren zu tun. Dazu will ich mich nicht äußern.<br /></p>]]>
        
    </content>
</entry>

<entry>
    <title>OpenVZ still rules</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/04/openvz-still-rules.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.162</id>

    <published>2011-04-17T22:50:48Z</published>
    <updated>2011-04-18T14:34:03Z</updated>

    <summary>Moin,bin zugegebener Maßen ein Freund von Containern. LXC hat meiner Meinung auch das schönste Design und stellt die Zukunft von Containern unter Linux dar.Gegenwärtig hat OpenVZ viele Vorteile. Einer der entscheidenden ist, dassdie /proc /sys Isolierung unter LXC noch Banane...</summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="lxc" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="openvz" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Moin,<br />bin zugegebener Maßen ein Freund von Containern. <a href="http://lxc.sourceforge.net/">LXC</a> hat meiner Meinung auch das schönste Design und stellt die Zukunft von Containern unter Linux dar.<br />Gegenwärtig hat <a href="http://wiki.openvz.org/Main_Page">OpenVZ</a> viele Vorteile. Einer der entscheidenden ist, dass<br />die /proc /sys Isolierung unter LXC noch Banane ist. Ein root-user in einem LXC-Container schickt mit <i>echo b&nbsp; &gt;/proc/sysrq-trigger </i>das Signal mal eben dem Host :(<br />Unter OpenVZ passiert da gar nichts :)<br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>Winke Winke Lenz</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/04/winke-winke-lenz.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.161</id>

    <published>2011-04-05T13:03:13Z</published>
    <updated>2011-04-05T13:16:23Z</updated>

    <summary><![CDATA[Moinsen,Leser von planetmysql.org haben folgende Meldung schon lesen dürfen. Lenz Grimmer ist&nbsp; nicht mehr im Community Team von MySQL. Im Gegensatz zu anderen verlaesst Lenz nicht Oracle, sondern beschaeftigt sich mit neuen Themen innerhalb von Oracle.Auch wenn er sich freut,...]]></summary>
    <author>
        <name>erkan</name>
        
    </author>
    
        <category term="mysql" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="de" xml:base="http://linsenraum.de/erkules/">
        <![CDATA[Moinsen,<br />Leser von planetmysql.org haben folgende <a href="http://opensourcedba.wordpress.com/2011/04/01/adios-lenz/">Meldung</a> schon lesen dürfen. <a href="http://www.lenzg.net/">Lenz Grimmer</a> ist&nbsp; nicht mehr im Community Team von MySQL. Im Gegensatz zu anderen verlaesst Lenz nicht Oracle, sondern beschaeftigt sich mit neuen Themen innerhalb von Oracle.<br />Auch wenn er sich freut, finde ich es selbstredend doof, dass so eine Mischung von Kompetenz und Symphatie eine Luecke zuruecklassen wird, welche schwer zu fuellen ist.<br />Alles Gute und bis Bald.<br />]]>
        
    </content>
</entry>

<entry>
    <title>This table type requires a primary key</title>
    <link rel="alternate" type="text/html" href="http://linsenraum.de/erkules/2011/03/this-table-type-requires-a-primary-key.html" />
    <id>tag:linsenraum.de,2011:/erkules//2.160</id>

    <published>2011-03-29T23:01:16Z</published>
    <updated>2011-03-30T07:09:07Z</updated>

    <summary><![CDATA[ Gegeben: root@localhost [test]&gt; select version(); +------------+ | version()&nbsp; | +------------+ | 5.5.10-log | +------------+ 1 row in set (0.00 sec) Doing: root@localhost &gt; create table a (id int) engine=myisam; Query OK, 0 rows affected (0.01 sec) Ok das ist...]]></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[ 

<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">


<br />
<ol>
</ol>
Gegeben:<br />
<br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;">root@localhost
[test]&gt; select version();<br />
+------------+<br />
| version()&nbsp; |<br />
+------------+<br />
| 5.5.10-log |<br />
+------------+<br />
1 row in set (0.00 sec)<br />
<br />
</p>
Doing:<br /><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;">root@localhost &gt; create table a (id int) engine=myisam;<br />
Query OK, 0 rows affected (0.01 sec)<br />
</p>
Ok das ist nichts ungewöhnliches.<br /><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;">root@localhost &gt; create table aa (id int) engine=innodb;<br />
ERROR 1173 (42000): This table type requires a primary key<br />
</p>
<br />Hups das ist aber gar nicht usus einen PK zu fordern.<br /><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;">root@localhost &gt; create table aa (id int primary key) engine=innodb;<br />Query OK, 0 rows affected (0.00 sec)<br /><br />
</p>
Und nein es handelt sich hier nicht um eine inkompatible Änderung
seitens MySQL, sondern meinereiner hat riesige Mengen von Code
umgeschrieben :)<br /><br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;">#
diff mysql-5.5.10/storage/innobase/handler/ha_innodb.cc
mysql-5.5.10/storage/innobase/handler/ha_innodb.cc.old <br />
1635d1634<br />
&lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
HA_REQUIRE_PRIMARY_KEY |<br />
</p>
Mir kam die Idee, da ich spätestens bei Row-Based-Replication
nicht Tabellen replizieren will, die <span style="font-style: italic;">keinen
</span>PK haben. Das wäre ja an sich wieder einen Blog wert:) Die
Änderung geht selbstredend für jede andere StorageEngine auch.<br />
<br />
Viel Spaß<br />
<br />
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"></p>
<p style="font-family: Courier New,Courier,monospace; background-color: rgb(240, 192, 172); margin-left: 40px; margin-right: 40px;"></p>
<br />
]]>
        
    </content>
</entry>

</feed>

