Juni 2011 Archive

Momentum Galera

| Keine Kommentare | Keine TrackBacks
Ich hatte schon länger vor mir mal 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 es auch egal in welche der Nodes (auch gleichzeitig) geschrieben wird.
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.
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.
Getestet wurden MySQL 5.5.13 und Galera 0.8 (ships with MySQL 5.1.53).
Die Konfiguration richtetet sich nach der von Galera mitegelieferten Konfig. Einzig innodb_buffer_pool_size wurde auf 4GB gesetzt.

innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=4G
innodb_log_file_size=100M
innodb_doublewrite=0
innodb_locks_unsafe_for_binlog=1
innodb_autoinc_lock_mode=2

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.

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

Viel Spaß
Erkan
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 "HELP" command might not work properly.
Genaueres ist hier 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.

Es handelt sich "nur" um die Helpfiles ... aber trotzdem :)

Viel Spaß
Erkan

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

Um dies zu testen wurden folgende Versionen installiert:
  • MySQL 5.5.12
  • MySQL 5.1.57
  • MariaDB 5.2.6
  • MariaDB 5.1.55
Es wurden zwei Tabellen mit jeweils 10000 Rows erstellt:

mysql> desc sort_id;                                  
+-------+---------+------+-----+---------+-------+    
| Field | Type    | Null | Key | Default | Extra |    
+-------+---------+------+-----+---------+-------+    
| id    | int(11) | YES  |     | NULL    |       |    
+-------+---------+------+-----+---------+-------+    
1 row in set (0.00 sec)                               
                                                      
mysql> desc sort_1;                                   
+-------+---------+------+-----+---------+-------+    
| Field | Type    | Null | Key | Default | Extra |    
+-------+---------+------+-----+---------+-------+    
| id    | int(11) | YES  |     | NULL    |       |    
| tea   | text    | YES  |     | NULL    |       |    
+-------+---------+------+-----+---------+-------+    
2 rows in set (0.00 sec)

Auf allen Servern wurde zudem tmp_table_size auf 1024 gesetzt um Temptables schnellstmöglich zu erzwingen.
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.
Hier erst mal der EXPLAIN zu den Queries:

mysql> explain SELECT * from sbtest.sort_id group by id\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: sort_id
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 10000
        Extra: Using temporary; Using filesort
1 row in set (0.00 sec)

mysql> explain SELECT * from sbtest.sort_1 group by id\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: sort_1
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 10000
        Extra: Using temporary; Using filesort
1 row in set (0.00 sec)


Die (aufgehübschte) Ausgabe sah für SELECT * from sort_1 group  by id; wiefolgt aus:

Benchmark [[5.5.12]]
        Average number of seconds to run all queries: 1.803 seconds
        Minimum number of seconds to run all queries: 1.791 seconds
        Maximum number of seconds to run all queries: 1.826 seconds
        Number of clients running queries: 1
        Average number of queries per client: 20

Benchmark [[MariaDB 5.2.6]]
        Average number of seconds to run all queries: 5.547 seconds
        Minimum number of seconds to run all queries: 5.542 seconds
        Maximum number of seconds to run all queries: 5.556 seconds
        Number of clients running queries: 1
        Average number of queries per client: 20

Benchmark [[5.1.57]]
        Average number of seconds to run all queries: 1.605 seconds
        Minimum number of seconds to run all queries: 1.603 seconds
        Maximum number of seconds to run all queries: 1.606 seconds
        Number of clients running queries: 1
        Average number of queries per client: 20

Benchmark [[MariaDB 5.1.55]]
        Average number of seconds to run all queries: 5.283 seconds
        Minimum number of seconds to run all queries: 5.214 seconds
        Maximum number of seconds to run all queries: 5.344 seconds
        Number of clients running queries: 1
        Average number of queries per client: 20


Die (aufgehübschte) Ausgabe sah für SELECT * from sort_id group  by id; wiefolgt aus:

Benchmark [[5.5.12]]
        Average number of seconds to run all queries: 1.146 seconds
        Minimum number of seconds to run all queries: 1.135 seconds
        Maximum number of seconds to run all queries: 1.170 seconds
        Number of clients running queries: 1
        Average number of queries per client: 20

Benchmark  [[MariaDB 5.2.6]]
        Average number of seconds to run all queries: 4.359 seconds
        Minimum number of seconds to run all queries: 4.352 seconds
        Maximum number of seconds to run all queries: 4.366 seconds
        Number of clients running queries: 1
        Average number of queries per client: 20

Benchmark [[5.1.57]]
        Average number of seconds to run all queries: 1.049 seconds
        Minimum number of seconds to run all queries: 1.032 seconds
        Maximum number of seconds to run all queries: 1.068 seconds
        Number of clients running queries: 1
        Average number of queries per client: 20

Benchmark [[MariaDB 5.1.55]]
        Average number of seconds to run all queries: 4.261 seconds
        Minimum number of seconds to run all queries: 4.202 seconds
        Maximum number of seconds to run all queries: 4.341 seconds
        Number of clients running queries: 1
        Average number of queries per client: 20


BlobTable grouped by
table grouped by

Nutzt MariaDB wieder die MyISAM-Engine für die temporay tables ist laut Serg
Golubchik die Performance wieder vergleichbar mit MySQL. Derzeit muss festgehalten werden, dass die Aussage MariaDB sei bei tmp-tables performanter nicht verifiziert werden kann.


Viel Spaß
Erkan