|
Bas de page | |
---|---|
Auteur | Sujet : Bench de moteurs de bases de données |
el muchacho Comfortably Numb | Salut @ tous, Je suis en train de faire un bench de comparaison de perfs sur diverses bases de données open source et commerciales, à partir du soft Java PolePosition, que je modifie et remets à jour pour l'occasion. En lice: Les mesures sont réalisées pour le moment via JDBC et via une version d'Hibernate qu'il faut que je mette à jour car trop ancienne (une v2.1.7 alors qu'on en est à 3.4), avec le pool de connexions ehcache-1.2.3. Un bref test de charge montre que Derby ne tient pas la route au niveau perf pour le moment. Environnement: Nota: Les tests portent sur des bases de 1000, 5000, 30 000, 200 000 et 500 000 éléments. Les benchs étant ce qu'ils sont, il faut les prendre avec des pincettes, mais ils permettent de donner des indications sur les points forts et faibles des différents produits. Celui-ci est destiné à évoluer, au fur et à mesure de ma compréhension des problèmes, de leur optimisation, etc.
Message édité par el muchacho le 16-05-2008 à 17:16:19 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
![]() Publicité | Posté le 03-05-2008 à 10:48:25 ![]() ![]() |
el muchacho Comfortably Numb | Problème MySQL: url=jdbc:mysql://localhost:3306/dbbench user=dbbench passwd=dbbench Remplacer avec le "MySQL Query Browser" la valeur '%' par 'localhost' dans le user dbbench créé et ça repart. Bizarre ce %. Le bench fonctionne maintenant avec MySQL. \o/ Message édité par el muchacho le 03-05-2008 à 13:25:36 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
el muchacho Comfortably Numb | Problème Grand schtroumpf 2005:
--------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
el muchacho Comfortably Numb | Bon, et là, j'ai encore un pb, Quand à OXE, il me sort régulièrement un : Message édité par el muchacho le 16-05-2008 à 17:18:06 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
el muchacho Comfortably Numb | J'ai mis les deux, je crois, mais j'ai pas créé de login windows dbbench. Par contre, j'ai une base et un user dbbench. --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
el muchacho Comfortably Numb |
Pour l'instant, c'est pas du tout ce que je vois. Je vois des pertes de perf drastiques, d'un facteur parfois supérieur à 10, voire plus. (le test tourne avec Hibernate 2 avec ehcache, je compte le faire passer en Hibernate 3.2, et un autre pool de connexions, pour voir) Par exemple, ici, 1000 selects retournant chacun un objet, les temps (en ms) sont quadruplés. Les bases de donnée Java embarquées (db4o, HSQLDB, H2) sortent grandes gagnantes sur la recherche de données indexées, que ce soit des entier ou des chaînes. Elles sont par contre moins performantes que les bases traditionnelles sur les données non indexées. H2 a un vrai point faible dans ce type de recherche alors qu'OXE reste performante sans index. HSQLDB est extrêmement rapide à peu près partout sauf sur les hiérarchies d'objets, où il montre une grosse faiblesse. Il devrait se montrer efficace sur les bases de données simples, du style forums, CMS, etc. Ainsi, si les données sont en RAM, 1000 select retournant chacun un objet simple ne prennent que 24 ms...
MySQL n'est pas dans ce tableau, mais disons que les perfs observées, pour une config standard, sont similaires à celles de PostgreSQL (config par défaut aussi). Message édité par el muchacho le 16-05-2008 à 17:19:20 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
akizan Eye Sca Zi | et t'utilise pas ça plutôt :
Message édité par akizan le 13-05-2008 à 16:51:07 |
el muchacho Comfortably Numb | Je ne connaissais pas, mais ce bench est assez ancien. PolePosition est un peu plus récent, même s'il y a encore pas mal de boulot pour le compléter afin qu'il soit plus représentatif. J'ai lancé un test avec Postgres, MySQL et OXE, sous Hibernate 2.1 et en JDBC pur, avec 1000, 5000, 30 000, 200 000 et 1 million d'enregistrements. J'ai été un peu ambitieux, je l'ai lancé ce matin à 8h40 et il n'est tjrs pas terminé... Message édité par el muchacho le 13-05-2008 à 21:27:50 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
![]() Publicité | Posté le 13-05-2008 à 21:12:23 ![]() ![]() |
el muchacho Comfortably Numb | Bon, je ne donne pas encore de résultats pour deux raisons: ########################################### Le disque a qq Go de libres. Sur la doc, j'ai cru comprendre qu'en AUTO, il n'y avait pas à gérer l'espace soi-même. Or ça n'a pas l'air de fonctionner. Je suis d'ailleurs étonné que l'espace de 500Mo déjà alloué soit insuffisant pour 500 000 Message édité par el muchacho le 15-05-2008 à 23:46:30 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
el muchacho Comfortably Numb | Pour le problème 2, je tente un doublement de taille: http://www.dbmotive.com/oracle_err [...] 6&type=ORA Message édité par el muchacho le 16-05-2008 à 00:01:45 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
el muchacho Comfortably Numb | J'ai déjà commencé à bidouiller les fichiers de config pour MySQL et Postgres, histoire d'éviter de gros bottlenecks. Je crois que j'ai un peu gagné. Pour OXE, c'est plus chiant. En lisant les pages sur l'optimisation d'OXE, j'ai l'impression qu'il n'y a finalement pas tellement de paramètres à bidouiller. Par ex, puis-je utiliser l'écriture différée ou devrais-je m'en tenir à une synchro après chaque commit (ce qui ralentit fortement les écritures) ? Pour une hiérarchie d'objets, je pourrais utiliser la clause INHERITS de Postgres et d'OXE plutôt que de la simuler avec des références. Ce genre de tuning, c'est tentant, mais on peut facilement fausser un bench comme ça. Message cité 1 fois Message édité par el muchacho le 16-05-2008 à 17:12:49 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
masklinn í dag viðrar vel til loftárása |
--------------- Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody |
el muchacho Comfortably Numb | L'avantage principal que j'ai sur tous ces benchs, c'est que j'ai pas de pognon à gagner, moi. D'autre part, mon bench reflète une utilisation "standard", pas forcément optimisée aux petits oignons, mais c'est en réalité le cas d'une majorité de bases, d'après ce que je vois. --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
MagicBuzz |
|
el muchacho Comfortably Numb | Il est toujours possible de passer le bench dans différents cas d'utilisation, par ex. une utilisation ACID où la sécurité des transactions est maximale, et un cas d'utilisation où l'on veut maximiser la rapidité de la base, en laissant les transactions se faire en mémoire, avec une écriture régulière sur disque en différé, mais où l'on risque en revanche de perdre des données. Cela fait deux benchs et non un seul. Et un bench avec une config standard, où seul la RAM allouée est augmentée par rapport à la config d'origine. (Pour l'instant, les bases qui pulvérisent les autres en terme de perfs sont HSQLDB et H2.) Ce qui est certains, c'est qu'avec Oracle, j'ai bcp plus de soucis pour faire fonctionner le bench correctement qu'avec les autres bases. En plus, elle occupe 630 Mo de RAM en permanence. Message cité 2 fois Message édité par el muchacho le 27-05-2008 à 08:09:25 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
masklinn í dag viðrar vel til loftárása |
--------------- Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody |
MagicBuzz |
Message cité 1 fois Message édité par MagicBuzz le 27-05-2008 à 19:17:03 |
el muchacho Comfortably Numb |
Là, j'ai régulièreement des plantages divers et variés avec JDBC. Depuis le listener qui "n'accroche" pas si le test est trop rapide (!) à "resultset épuisé". Le même code fonctionne parfaitement avec les 6 autres bases testées (MySQL, Postgres, H2, HSQL, Derby, McKoi). Je ne sais pas si c'est le driver Oracle qui est pourri ou si c'est la base elle-même qui gonfle, mais la conclusion est qu'il ne faut pas faire du JDBC avec Oracle, il fait nettement plus suer que les autres bases. Message cité 1 fois Message édité par el muchacho le 28-05-2008 à 08:08:29 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
MagicBuzz |
|
el muchacho Comfortably Numb | C'est Oracle XE dernière version téléchargée sur le site d'Oracle, install standard sous XP, sans modif, antivirus et firewall désactivés, driver officiel. Ben ça roule quand tu le stresses pas trop, mais si tu y vas franchement, il se met à merder. J'imagine qu'il y a une config particulière à réaliser, mais là, ça foire sur certains tests (à partir d'un certains niveau de stress, pas sur d'autres), et c'est systématique.
Message cité 1 fois Message édité par el muchacho le 28-05-2008 à 13:57:58 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
MagicBuzz |
|
el muchacho Comfortably Numb | Ouais, je pense aussi que XE n'est pas configuré pour des tests de charge. Ca me gavait un peu de télécharger des Go, sans parler de l'espace qu'il s'arroge sur le disque. J'hésite à tester la 11, qui s'autoconfigure bcp mieux que la 10g mais est moins répandue. L'inconvénient de mon bench, c'est que les tests se passent sur toutes les bases "en même temps", cad test 1 sur chacune des bases, puis test2 sur chacune des bases, etc. Ce qui nécessite d'avoir les différents serveurs en même temps en RAM, donc une RAM plus limitée pour chacun d'entre eux. Ainsi, sur 2Go, XE s'arroge déjà 630 Mo, un peu plus de 300Mo pour MySQL, et bcp moins pour Postgres (il semble gérer très bien la RAM). Quand aux bases Java, elles sont dans la JVM, et ça peut monter à plus de 1Go (vu que les MEMORY tables sont en RAM, bien que les changements de données soient écrits sur disque). Message édité par el muchacho le 29-05-2008 à 09:02:39 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
el muchacho Comfortably Numb | Alors hier, j'ai fait la petite modif ci-dessus, - j'ai mis le nombre de PROCESSES à 200 -, et ça roule (presque). J'en ai profité pour modifier la config de HSQLDB, de façon à ce que par défaut, les tables soient en CACHED et non en MEMORY. Autrement dit, les plus grosses tables ne sont plus entièrement en mémoire. Du coup les perfs sont comparables, voire légèrement inférieures à H2, qui devient finalement plus intéressant. Elles restent plus rapides que les autres. Message édité par el muchacho le 30-05-2008 à 17:21:05 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
![]() Publicité | Posté le ![]() ![]() |