Archive for the ‘bench’ Category

9
jan

Améliorations de l’optimiseur dans MariaDB

   Posted by: freshdaz

Les équipes de MariaDB ont énormément travaillées sur l’optimiseur de la version 5.3, notamment en permettant une réelle utilisation des sous-requêtes.

Voici un effet visuel de ces optimisations:

Avec MySQL 5.5, l’utilisation de tables dérivées (type de sous-requêtes dans la clause FROM d’un SELECT), donne le plan d’exécution suivant:

MySQL-5.5 > EXPLAIN SELECT * FROM (SELECT * FROM (SELECT * FROM City ccc ) cc ) c \G
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: <derived2>
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4079
Extra:
*************************** 2. row ***************************
id: 2
select_type: DERIVED
table: <derived3>
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4079
Extra:
*************************** 3. row ***************************
id: 3
select_type: DERIVED
table: ccc
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4079
Extra:

 

Le même EXPLAIN avec MariaDB 5.3 donne:
MariaDB-5.3 >  EXPLAIN SELECT * FROM (SELECT * FROM (SELECT * FROM City ccc ) cc ) c \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: ccc
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4079
Extra:

L’optimiseur comprend que les 2 niveaux de « SELECT * FROM » ne servent à rien, et réécrit donc la requête.

L’intérêt n’est heureusement pas que visuel:

Sur MySQL 5.5:

mysqlslap –create-schema=world -i10 -q »SELECT * FROM (SELECT * FROM (SELECT * FROM City ccc ) cc ) c ; » -S/tmp/mysql_55.sock
Benchmark
Average number of seconds to run all queries: 0.004 seconds

 

Sur MariaDB 5.3:
mysqlslap –create-schema=world -i10 -q »SELECT * FROM (SELECT * FROM (SELECT * FROM City ccc ) cc ) c ; » -S/tmp/mariadb_53.sock
Benchmark
Average number of seconds to run all queries: 0.002 seconds

Le test étant réalisé sur un petit volume de données, le temps écoulé n’est pas très important, cependant l’on peu noter que l’optimisation apporté par MariaDB, divise le temps d’exécution par 2 dans ce contexte (à conf équivalente, données équivalentes,…).

 

D’autres tests s’imposent, mais l’on peut déjà féliciter les équipes de MariaDB

30
déc

Bench MariaDB vs MySQL

   Posted by: freshdaz Tags: , , ,

Avec les sorties de MySQL 5.5.8 et de MariaDB 5.2.4, l’écosystème SGBDR open source se retrouve donc avec 3 bases (n’oublions pas MySQL 5.1.53) en GA. J’ai eu envi de voir le résultat des améliorations apportées par les équipes  d‘Oracle sur la première version majeure post rachat (MySQL 5.5.8) et celles apportées par la communauté et les équipes de Monty program pour la version basée sur MySQL 5.1.53  (MariaDB 5.2.4).

De nombreuses optimisations ont eu lieu sur la version MySQL 5.5.8, ainsi que sur le moteur de stockage InnoDB. Idem pour MariaDB et la version InnoDB  de Percona qu’elle embarque (XtraDB).

Un des gros inconvénients des benchs, c’est qu’ils ne veulent souvent rien dire dans l’absolu. En d’autres termes, le résultat obtenu valide les hypothèses retenues qui ont rarement la chance de s’appliquer totalement à votre cas d’utilisation. Mais faut bien essayer de quantifier les choses ! Dans l’optique d’avoir un résultat le plus objectif possible, j’ai effectué mes tests avec 3 outils de bench open source pour bases de données différents:

Les tests comportent des lectures, des écritures et des transactions plus complexes et ils se déroulent seulement sur des table InnoDB.

La configuration des serveurs est très proche mais pas strictement identique car les paramètres ne sont pas tous les mêmes. Elle n’est pas orientée performances maximale, (ce n’était pas mon but) mais sécurité des données (plus proche de notre réalité de production).

La machine de test n’est qu’un PC (voir configuration ci dessous)

MySQL 5.1.53 vs MySQL 5.5.8 vs MariaDB 5.2.4

Configuration

# OS: Ubuntu  10.04 LTS
# Platform: x86_32
# CPU: Intel Core 2 Duo CPU T9550 @ 2.66GHz (x2)
# RAM: 3.4GB
# Disk(s): 1 x ATA Hitachi HTS723216L9A362
# # Versions : MySQL 5.1.53, MySQL 5.5.8, MariaDB 5.2.4
# # Moteur : Innodb

Résultats

dbt2

Transactions (plusieurs tables)

40 connexions simultanées

MySQL 5.5.8 est 19% plus rapide que MySQL 5.1.53

MariaDB 5.2.4 est 53% plus rapide que MySQL 5.1.53

150 connexions simultanées

MySQL 5.5.8 est 49% plus rapide que MySQL 5.1.53

MariaDB 5.2.4 est 59% plus rapide que MySQL 5.1.53

sysbench

Transactions (1 table)

40 connexions simultanées

MySQL 5.5.8 est 1969% plus rapide que MySQL 5.1.53

MariaDB 5.2.4 est 2271% plus rapide que MySQL 5.1.53

150 connexions simultanées

MySQL 5.5.8 est 287% plus rapide que MySQL 5.1.53

MariaDB 5.2.4 est 427% plus rapide que MySQL 5.1.53

Lectures simples

40 connexions simultanées

MySQL 5.5.8 est 14% moins rapide que MySQL 5.1.53

MariaDB 5.2.4 est 3% moins rapide que MySQL 5.1.53

150 connexions simultanées

MySQL 5.5.8 est 15% moins rapide que MySQL 5.1.53

MariaDB 5.2.4 est 2% moins rapide que MySQL 5.1.53

Lectures complexes

40 connexions simultanées

MySQL 5.5.8 est 12% moins rapide que MySQL 5.1.53

MariaDB 5.2.4 est 0.7% moins rapide que MySQL 5.1.53

150 connexions simultanées

MySQL 5.5.8 est 14% moins rapide que MySQL 5.1.53

MariaDB 5.2.4 est 5% moins rapide que MySQL 5.1.53

mysqlslap

Update primary key

40 connexions simultanées

MySQL 5.5.8 est 1793% fois plus rapide que MySQL 5.1.53

MariaDB 5.2.4 est 1954% fois plus rapide que MySQL 5.1.53

150 connexions simultanées

MySQL 5.1.53 => ERROR : Lock wait timeout exceeded; try restarting transaction

MariaDB 5.2.4 est 26% fois plus rapide que MySQL 5.5.8

Insert

40 connexions simultanées

MySQL 5.5.8 est 1595% fois plus rapide que MySQL 5.1.53

MariaDB 5.2.4 est 1731% fois plus rapide que MySQL 5.1.53

150 connexions simultanées

MySQL 5.5.8 est 4106% fois plus rapide que MySQL 5.1.53

MariaDB 5.2.4 est 4625% fois plus rapide que MySQL 5.1.53

Insert + Select

40 connexions simultanées

MySQL 5.5.8 est 1452% fois plus rapide que MySQL 5.1.53

MariaDB 5.2.4 est 1714% fois plus rapide que MySQL 5.1.53

150 connexions simultanées

MySQL 5.5.8 et MariaDB 5.2.4 sont 2400% fois plus rapide que MySQL 5.1.53

Select

40 connexions simultanées

MySQL 5.1.53 est 8% plus rapide que MariaDB 5.2.4.

MySQL 5.1.53 est 9% plus rapide que MySQL 5.5.8.

150 connexions simultanées

MySQL 5.1.53 et MariaDB 5.2.4 sont 15% plus rapide que MySQL 5.5.8.

Select on primary key

40 connexions simultanées

MySQL 5.1.53 est 4% plus rapide que MariaDB 5.2.4.

MySQL 5.1.53 est 10% plus rapide que MySQL 5.5.8.

150 connexions simultanées

MySQL 5.1.53 et MariaDB 5.2.4 sont 7% plus rapide que MySQL 5.5.8.


Résumé

MariaDB 5.2.4 et MySQL 5.5.8 ont de façon particulièrement significative, de meilleures performances en écritures que MySQL 5.1.53 (avantage à MariaDB 5.2.4).

En ce qui concerne, les lectures, les performances de MariaDB 5.2.4 et de MySQL 5.1.53 sont très proches (léger avantage à MySQL 5.1.53). MySQL 5.5.8 est un peu en retrait.

En fonction des résultats des benchs, mon classement est le suivant :

  1. MariaDB 5.2.4
  2. MySQL 5.5.8
  3. MySQL 5.1.53

Je dois avouer, que je suis surpris par l’ampleur des écarts, notamment en écritures ! D’autres tests seront fait sur une machine plus costaud et dans un environnement plus proche de notre production.

Fichiers

Configuration de MySQL 5.1.53

Configuration de MySQL 5.5.8

Configuration de MariaDB 5.2.4

Résultats brut

3
août

Benchmark MySQL 5.4

   Posted by: freshdaz Tags: ,

Dimitri KRAVTCHUK nous démontre, avec une batterie de tests, les évolutions en matière de performance apportées par MySQL 5.4:

  • Huge performance improvement on InnoDB engine!
  • MySQL 5.4.0 /Perf Version seems to be the most performant InnoDB implementation for the moment! (only except on the Read-Only workload @8cores where InnoDB plugin-1.0.3 is leading!)
  • MySQL is outperforming PostgreSQL on my tests now!
  • Regarding scalability, get a look at 8 vs 16 cores graphs, and you’ll see it’s the big step forward – no performance degradation on 16 cores is a very positive sign! and there is only 3 months distance between tests!
  • LOCK_open needs a fix ASAP! :-)
  • Analyzing my test results, it’s too early to say InnoDB is scaling up to 16 cores, but the test results on 16 cores are already outperforming 8 cores, and I’m absolutely sure now – very quickly it’ll perform even better! so see you soon! :-) )

http://dimitrik.free.fr/db_STRESS_MySQL_540_and_others_Apr2009.html