Microbenchmarking XQuery DBSeminar HWS 2006 Daniel Rihm <drihm@rumms.uni-mannheim.de> 10. November 2006
Microbenchmarks Ziel ist das Überprüfen der Features: Zeit für das Vorbereiten der Query Zeit für das Ausführen der Query Resourcenverbrauch Korrektheit Vollständigkeit
Featurebasiertes Benchmarking Testet Features des Anfrageauswerters isoliert voneinander Helfen die Feature-Implementation zu testen Unterschiede werden sichtbar die bei Applicationsbenchmarks evtl. verloren gehen
Präzision: Anforderungen Parameter müssen justierbar sein Parameter einzeln untersuchen Ein Feature pro Anfrage Vollständigkeit: Parameter (und deren Einfluss) beschreiben Eine Anfrage pro Feature
Einflussparameter Daten-Parameter Dokumentengröße (Vorsicht!) Dokumenten-Baumtiefe Fan-out Schema und Constraints Query-Parameter Selektivität Anfrageformulierung Ressourcen-Parameter Arbeitsspeicher Prozessorleistung
Struktur des Repository Kategorien Micro-benchmarks Ergebnisse Daten und Datengeneratoren Querygeneratoren
Der Michigan Benchmark
Daten (1) Dokumentengröße = 500MB * SF (für SF {0.1, 1, 10, 100} ) 2 Knotentypen: enest, eoccasional Level Fanout # der Knoten % der Knoten 1 2 1 0.0 2 2 2 0.0 3 2 4 0.0 4 2 8 0.0 5 13 16 0.0 6 13 208 0.0 7 13 2,704 0.4 8 1/13 35,152 4.8 9 2 2,704 0.4 10 2 5,408 0.7 11 2 10,816 1.5 12 2 21,632 3.0 13 2 43,264 6.0 14 2 86,528 11.9 15 2 173,056 23.8 16 0 346,112 47.6
Daten (2) Attribute: aunique1 aunique2 alevel Nummer des Knotens im Baum (breadthfirst) zufälliges (deterministisches) Integer Tiefe des Knoten afour aunique2 mod 4 asixteen aunique1 + aunique2 mod 16 asixtyfour aunique2 mod 64 astring String mit durchschnittlicher Länge von 32 Bytes Inhalt der Knoten besteht aus generiertem Text welcher sich an der englischen Sprache orientiert. Wahrscheinlichkeit für eoccasional Sohn: 1/64
Anfragen 46 Anfragen 4 Returned Structure (QR1-QR4) 12 Simple Selection (QS1-QS12) 21 Structural Selection (QS15-QS35) 2 Value-Based Join (QJ1, QJ2) 2 Pointer-Based Join (QJ3, QJ4) 5 Aggregation (QA1, QA2, QA4-QA6)
Ausführung System AMD Athlon XP 2600+ 515940 kb of RAM Linux version 2.6.15. Engines Galax Version 0.5 MonetDB/XQuery Server-Version 4.16, XQuery-Version 0.12 SaxonB Version 8.8 Laufzeit 52:06:00 (hh:mm:ss)
Übersicht Alle Queries 100000 XCheck output (data analysis phase), Experiment: mbench, Document: d0.1 (46.69 MB) Galax MonetDB SaxonB Log Total execution time (sec) 10000 1000 100 10 QR1 QS1 QS15 Query QJ1 QA1
Anfrage QS12 for $e in doc()//enest where contains(string($e), "oneb4") return <enest aunique1="{$e/@aunique1}"></enest> 100 80 XCheck output (data analysis phase), Experiment: mbench, Query: QS12 Galax MonetDB SaxonB Total execution time (sec) 60 40 20 0 d0.1 46.69 MB Document
Anfrage QA4 <maxfanout aunique1 = "{ for $e in doc()//enest[@alevel = 11] return for $p in doc()//enest[@alevel = 11] where count($e/enest) = max(count($p/enest)) return $e/@aunique1 }"></maxfanout> XCheck output (data analysis phase), Experiment: mbench, Query: QA4 4000 Galax SaxonB 3500 3000 Total execution time (sec) 2500 2000 1500 1000 500 0 d0.1 46.69 MB Document
Anfrage QA4b <maxfanout aunique1 = "{ for $e in doc()//enest[@alevel = 11] let $maxfan := fn:max( for $p in doc()//enest[@alevel = 11] return count($p/enest) ) where count($e/enest) = $maxfan return $e/@aunique1 }"></maxfanout> XCheck output (data analysis phase), Experiment: qa4, Document: d0.1 (46.69 MB) 90 Galax SaxonB 80 70 Total execution time (sec) 60 50 40 30 20 10 0 QA4b Query
+ Sehr ausführlich für einige Aspekte + Dokumentstruktur gut gewählt + Selektivitäten wurden angegeben - Viele XQuery Features werden nicht getestet - Stellenweise fehlerhaft