Import some libraries
from dbmsbenchmarker import *
import pandas as pd
pd.set_option("display.max_rows", None)
pd.set_option('display.max_colwidth', None)
# Some plotly figures
import plotly.graph_objects as go
import plotly.figure_factory as ff
# Some nice output
from IPython.display import display, Markdown
import logging
logging.basicConfig(level=logging.INFO)
# path of folder containing experiment results
resultfolder = "/results/"
# create evaluation object for result folder
evaluate = inspector.inspector(resultfolder)
# list of all experiments in folder
# evaluate.list_experiments
# dataframe of experiments
evaluate.get_experiments_preview()
connections | info | intro | name | queries | time | |
---|---|---|---|---|---|---|
1625255968 | 8 | This experiment compares run time and resource consumption of TPC-H queries in different DBMS. | This includes the reading queries of TPC-H. | TPC-H Queries SF=10 | 22 | 2022-06-01 11:55:45 |
# last Experiment
code = evaluate.list_experiments[len(evaluate.list_experiments)-1]
# Specific Experiment
code = '1625255968'
# load it
evaluate.load_experiment(code)
Benchmarking in folder docresult//1625255968 Connections: MariaDB-2-1 PostgreSQL-1-1 MonetDB-1-1 MySQL-1-1 MariaDB-1-1 MySQL-2-1 PostgreSQL-2-1 MonetDB-2-1 Queries: 0: Q1 = Pricing Summary Report (TPC-H Q1) 1: Q2 = Minimum Cost Supplier Query (TPC-H Q2) 2: Q3 = Shipping Priority (TPC-H Q3) 3: Q4 = Order Priority Checking Query (TPC-H Q4) 4: Q5 = Local Supplier Volume (TPC-H Q5) 5: Q6 = Forecasting Revenue Change (TPC-H Q6) 6: Q7 = Forecasting Revenue Change (TPC-H Q7) 7: Q8 = National Market Share (TPC-H Q8) 8: Q9 = Product Type Profit Measure (TPC-H Q9) 9: Q10 = Forecasting Revenue Change (TPC-H Q10) 10: Q11 = Important Stock Identification (TPC-H Q11) 11: Q12 = Shipping Modes and Order Priority (TPC-H Q12) 12: Q13 = Customer Distribution (TPC-H Q13) 13: Q14 = Forecasting Revenue Change (TPC-H Q14) 14: Q15 = Top Supplier Query (TPC-H Q15) 15: Q16 = Parts/Supplier Relationship (TPC-H Q16) 16: Q17 = Small-Quantity-Order Revenue (TPC-H Q17) 17: Q18 = Large Volume Customer (TPC-H Q18) 18: Q19 = Discounted Revenue (TPC-H Q19) 19: Q20 = Potential Part Promotion (TPC-H Q20) 20: Q21 = Suppliers Who Kept Orders Waiting Query (TPC-H Q21) 21: Q22 = Global Sales Opportunity Query (TPC-H Q22) Load Evaluation
# get experiment workflow
df = evaluate.get_experiment_workflow()
#print(df)
# get workload properties
workload_properties = evaluate.get_experiment_workload_properties()
print(workload_properties['name'])
print(workload_properties['info'])
# list queries
list_queries = evaluate.get_experiment_list_queries()
# list connections
list_nodes = evaluate.get_experiment_list_nodes()
list_dbms = evaluate.get_experiment_list_dbms()
list_connections = evaluate.get_experiment_list_connections()
list_connections_node = evaluate.get_experiment_list_connections_by_node()
list_connections_dbms = evaluate.get_experiment_list_connections_by_dbms()
list_connections_clients = evaluate.get_experiment_list_connections_by_connectionmanagement('numProcesses')
list_connections_gpu = evaluate.get_experiment_list_connections_by_hostsystem('GPU')
list_connections_dockerimage = evaluate.get_experiment_list_connections_by_parameter('dockerimage')
# colors by dbms
list_connections_dbms = evaluate.get_experiment_list_connections_by_dbms()
connection_colors = evaluate.get_experiment_list_connection_colors(list_connections_dbms)
# fix some examples:
# first connection, first query, first run
connection = list_connections[0]
numQuery = 1
numRun = 0
TPC-H Queries SF=10 This experiment compares run time and resource consumption of TPC-H queries in different DBMS.
connection = 'MonetDB-1-1'
display(Markdown("### Properties of {}".format(connection)))
evaluator.pretty(evaluate.get_experiment_connection_properties(connection))
name:MonetDB-1-1 script:SF10-index docker:MonetDB docker_alias:Columnwise version:11.37.11 info:[] connectionmanagement numProcesses:1 runsPerConnection:Unlimited timeout:3600 hostsystem RAM:1082007052288 CPU:AMD EPYC 7742 64-Core Processor GPU: GPUIDs:[] Cores:256 host:5.4.0-74-generic node:cl-worker28 disk:623220008 datadisk:10687696 cuda: requests_cpu:4 requests_memory:16Gi limits_cpu:0 limits_memory:0 worker:[] times load_ms:251632.57140340284 benchmark_ms:316155.41979367845 prices perHour_usd:0.0 benchmark_usd:0.0 hardwaremetrics total_cpu_memory:0 total_cpu_memory_cached:0 total_cpu_util:0 total_gpu_util:0 total_gpu_power:0 total_gpu_memory:0 total_cpu_throttled:0 total_cpu_util_others:0 total_cpu_util_s:0 total_cpu_util_user_s:0 total_cpu_util_sys_s:0 total_cpu_throttled_s:0 total_cpu_util_others_s:0 total_network_rx:0 total_network_tx:0 total_fs_read:0 total_fs_write:0 total_gpu_energy:0.0 metrics totaltime_ms:3470.0931945159236 throughput_run_total_ps:0.8645300952554098 throughput_run_total_ph:3112.308342919476 throughput_session_total_ps:0.28817669841846993 throughput_session_total_ph:1037.436114306492 throughput_run_mean_ps:0.924158961737484 throughput_run_mean_ph:3326.972262254943 latency_run_mean_ms:1082.0649275747212 throughput_session_mean_ps:0.30805298724582797 throughput_session_mean_ph:1108.990754084981 latency_session_mean_ms:3246.194782724164 queuesize_run:0.9354776949087117 queuesize_run_percent:93.54776949087119 queuesize_session:0.9354776949087117 queuesize_session_percent:93.54776949087118
connection = list_connections[0]
numQuery = 1
numRun = 0
list_errors = evaluate.get_error(numQuery)
display(Markdown("### Errors of Query {}".format(numQuery)))
pd.DataFrame.from_dict(list_errors, orient='index').sort_index()
0 | |
---|---|
MariaDB-1-1 | |
MariaDB-2-1 | |
MonetDB-1-1 | |
MonetDB-2-1 | |
MySQL-1-1 | |
MySQL-2-1 | |
PostgreSQL-1-1 | |
PostgreSQL-2-1 |
list_errors = evaluate.get_warning(numQuery)
display(Markdown("### Warnings of Query {}".format(numQuery)))
pd.DataFrame.from_dict(list_errors, orient='index').sort_index()
0 | |
---|---|
MariaDB-1-1 | |
MariaDB-2-1 | |
MonetDB-1-1 | Different at run #1 |
MonetDB-2-1 | Different at run #1 |
MySQL-1-1 | |
MySQL-2-1 | |
PostgreSQL-1-1 | |
PostgreSQL-2-1 |
query_properties = evaluate.get_experiment_query_properties()
display(Markdown("#### Show Query Template {} - {}".format(numQuery, query_properties[str(numQuery)]['config']['title'])))
print(query_properties[str(numQuery)]['config']['query'])
select l_returnflag, l_linestatus, cast(sum(l_quantity) as bigint) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice*(1-l_discount)) as sum_disc_price, sum(l_extendedprice*(1-l_discount)*(1+l_tax)) as sum_charge, avg(l_quantity) as avg_qty, avg(l_extendedprice) as avg_price, avg(l_discount) as avg_disc, count(*) as count_order from lineitem where l_shipdate <= date '1998-12-01' - interval '{DELTA}' day group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus
display(Markdown("#### Show Parameters of Query {} - {}".format(numQuery, query_properties[str(numQuery)]['config']['title'])))
df = evaluate.get_parameter_df(numQuery)
df
DELTA | numRun | |
---|---|---|
1 | 71 | 0 |
2 | 97 | 1 |
3 | 73 | 2 |
display(Markdown("#### Show Query {} as run by {} - Run number {}".format(numQuery, connection, numRun)))
query_string = evaluate.get_querystring(numQuery, connection, numRun)
print(query_string)
select l_returnflag, l_linestatus, cast(sum(l_quantity) as unsigned int) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice*(1-l_discount)) as sum_disc_price, sum(l_extendedprice*(1-l_discount)*(1+l_tax)) as sum_charge, avg(l_quantity) as avg_qty, avg(l_extendedprice) as avg_price, avg(l_discount) as avg_disc, count(*) as count_order from lineitem where l_shipdate <= date('1998-12-01') - interval '71' day group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus limit 10000000
display(Markdown("#### Show Query {} as run by {} - Run number {}".format(numQuery, "MonetDB-1-1", numRun)))
query_string = evaluate.get_querystring(numQuery, connection, numRun)
print(query_string)
select l_returnflag, l_linestatus, cast(sum(l_quantity) as unsigned int) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice*(1-l_discount)) as sum_disc_price, sum(l_extendedprice*(1-l_discount)*(1+l_tax)) as sum_charge, avg(l_quantity) as avg_qty, avg(l_extendedprice) as avg_price, avg(l_discount) as avg_disc, count(*) as count_order from lineitem where l_shipdate <= date('1998-12-01') - interval '71' day group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus limit 10000000
display(Markdown("#### Show Result Set of Query {} as run by {} - Run number {}".format(numQuery, connection, numRun)))
df = evaluate.get_datastorage_df(numQuery, numRun)
df
L_RETURNFLAG | L_LINESTATUS | SUM_QTY | SUM_BASE_PRICE | SUM_DISC_PRICE | SUM_CHARGE | AVG_QTY | AVG_PRICE | AVG_DISC | COUNT_ORDER | |
---|---|---|---|---|---|---|---|---|---|---|
1 | A | F | 377518399 | 566065727797.0 | 537759104278.0 | 559276670892.0 | 26.0 | 38237.0 | 0.0 | 14804077 |
2 | N | F | 9851614 | 14767438399.0 | 14028805792.0 | 14590490998.0 | 26.0 | 38258.0 | 0.0 | 385998 |
3 | N | O | 751203243 | 1126406784135.0 | 1070081467451.0 | 1112897846350.0 | 25.0 | 38234.0 | 0.0 | 29460795 |
4 | R | F | 377732830 | 566431054976.0 | 538110922665.0 | 559634780885.0 | 26.0 | 38251.0 | 0.0 | 14808183 |
display(Markdown("#### Show Result Set of Query {} as run by {} - Run number {}".format(numQuery, "MonetDB-1-1", numRun)))
df = evaluate.get_resultset_df(numQuery, "MonetDB-1-1", numRun)
df
L_RETURNFLAG | L_LINESTATUS | SUM_QTY | SUM_BASE_PRICE | SUM_DISC_PRICE | SUM_CHARGE | AVG_QTY | AVG_PRICE | AVG_DISC | COUNT_ORDER | |
---|---|---|---|---|---|---|---|---|---|---|
1 | A | F | 377518399 | 566065727797.0 | 537759104278.0 | 559276670892.0 | 26.0 | 38237.0 | 0.0 | 14804077 |
2 | N | F | 9851614 | 14767438399.0 | 14028805792.0 | 14590490998.0 | 26.0 | 38258.0 | 0.0 | 385998 |
3 | N | O | 751203243 | 1126406784135.0 | 1070081467451.0 | 1112897846350.0 | 26.0 | 38234.0 | 0.0 | 29460795 |
4 | R | F | 377732830 | 566431054976.0 | 538110922665.0 | 559634780885.0 | 26.0 | 38251.0 | 0.0 | 14808183 |
display(Markdown("### Hardware Metrics"))
pd.DataFrame(monitor.metrics.metrics).T
query | title | |
---|---|---|
total_cpu_memory | (node_memory_MemTotal_bytes-node_memory_MemFree_bytes-node_memory_Buffers_bytes-node_memory_Cached_bytes)/1024/1024 | CPU Memory [MiB] |
total_cpu_memory_cached | (node_memory_Cached_bytes)/1024/1024 | CPU Memory Cached [MiB] |
total_cpu_util | 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) | CPU Util [%] |
total_gpu_util | sum(dcgm_gpu_utilization) | GPU Util [%] |
total_gpu_power | sum(dcgm_power_usage) | GPU Power Usage [W] |
total_gpu_memory | sum(dcgm_fb_used) | GPU Memory [MiB] |
total_cpu_throttled | sum(rate(container_cpu_cfs_throttled_seconds_total{{job="monitor-node", container_label_io_kubernetes_container_name="dbms"}}[1m])) | CPU Throttle [%] |
total_cpu_util_others | sum(irate(container_cpu_usage_seconds_total{{job="monitor-node", container_label_io_kubernetes_container_name!="dbms",id!="/"}}[1m])) | CPU Others [%] |
total_cpu_util_s | sum(container_cpu_usage_seconds_total{{job="monitor-node", container_label_io_kubernetes_container_name="dbms"}}) | CPU Util [s] |
total_cpu_util_user_s | sum(container_cpu_user_seconds_total{{job="monitor-node", container_label_io_kubernetes_container_name="dbms"}}) | CPU Util User [s] |
total_cpu_util_sys_s | sum(container_cpu_system_seconds_total{{job="monitor-node", container_label_io_kubernetes_container_name="dbms"}}) | CPU Util Sys [s] |
total_cpu_throttled_s | sum(container_cpu_cfs_throttled_seconds_total{{job="monitor-node", container_label_io_kubernetes_container_name="dbms"}}) | CPU Throttle [s] |
total_cpu_util_others_s | sum(container_cpu_usage_seconds_total{{job="monitor-node", container_label_io_kubernetes_container_name!="dbms",id!="/"}}) | CPU Util Others [s] |
total_network_rx | sum(container_network_receive_bytes_total{{container_label_app="dbmsbenchmarker", job="monitor-node"}}) | Net Rx [b] |
total_network_tx | sum(container_network_transmit_bytes_total{{container_label_app="dbmsbenchmarker", job="monitor-node"}}) | Net Tx [b] |
total_fs_read | sum(container_fs_reads_bytes_total{{job="monitor-node", container_label_io_kubernetes_container_name="dbms"}}) | FS Read [b] |
total_fs_write | sum(container_fs_writes_bytes_total{{job="monitor-node", container_label_io_kubernetes_container_name="dbms"}}) | FS Write [b] |
df = evaluate.get_loading_metrics('total_cpu_memory')
df = evaluate.get_loading_metrics('total_cpu_util_s')
df = df.T.max().sort_index() - df.T.min().sort_index() # compute difference of counter
display(Markdown("### CPU of Ingestion (via counter)"))
pd.DataFrame(df)
0 | |
---|---|
DBMS | |
MariaDB-1 | 1526.198404 |
MariaDB-2 | 1526.198404 |
MonetDB-1 | 1931.119997 |
MonetDB-2 | 1931.119997 |
MySQL-1 | 1963.867765 |
MySQL-2 | 1963.867765 |
PostgreSQL-1 | 472.864693 |
PostgreSQL-2 | 472.864693 |
df = evaluate.get_loading_metrics('total_cpu_util')
df = df.T.sum().sort_index() # computer sum of rates
display(Markdown("### CPU of Ingestion (via rate)"))
pd.DataFrame(df)
0 | |
---|---|
DBMS | |
MariaDB-1 | 1526.761004 |
MariaDB-2 | 1526.761004 |
MonetDB-1 | 1887.024304 |
MonetDB-2 | 1887.024304 |
MySQL-1 | 1962.119638 |
MySQL-2 | 1962.119638 |
PostgreSQL-1 | 464.746812 |
PostgreSQL-2 | 464.746812 |
df = evaluate.get_streaming_metrics('total_cpu_memory')
df = evaluate.get_streaming_metrics('total_cpu_util_s')
df = df.T.max().sort_index() - df.T.min().sort_index() # compute difference of counter
display(Markdown("### CPU of Stream (via counter)"))
pd.DataFrame(df)
0 | |
---|---|
DBMS | |
MariaDB-1-1 | 5564.712371 |
MariaDB-2-1 | 5497.702421 |
MonetDB-1-1 | 1356.184954 |
MonetDB-2-1 | 1218.550218 |
MySQL-1-1 | 3011.705555 |
MySQL-2-1 | 2896.443679 |
PostgreSQL-1-1 | 1436.189579 |
PostgreSQL-2-1 | 1278.603392 |
df = evaluate.get_streaming_metrics('total_cpu_util')
df = df.T.sum().sort_index() # computer sum of rates
display(Markdown("### CPU of Stream (via rate)"))
pd.DataFrame(df)
0 | |
---|---|
DBMS | |
MariaDB-1-1 | 5580.313389 |
MariaDB-2-1 | 5519.121645 |
MonetDB-1-1 | 1508.432769 |
MonetDB-2-1 | 1368.634461 |
MySQL-1-1 | 3029.972219 |
MySQL-2-1 | 2915.922365 |
PostgreSQL-1-1 | 1492.224116 |
PostgreSQL-2-1 | 1331.659788 |
df = evaluate.get_aggregated_experiment_statistics(type='timer', name='run', query_aggregate='Mean', total_aggregate='Mean')
df = (df/1000.0).sort_index()
display(Markdown("### Mean of Means of Timer Run [s]"))
df
total_timer_run | |
---|---|
DBMS | |
MariaDB-1-1 | 84.432242 |
MariaDB-2-1 | 83.348424 |
MonetDB-1-1 | 4.717192 |
MonetDB-2-1 | 4.458597 |
MySQL-1-1 | 45.625206 |
MySQL-2-1 | 43.901729 |
PostgreSQL-1-1 | 14.941245 |
PostgreSQL-2-1 | 11.454957 |
df = evaluate.get_aggregated_experiment_statistics(type='timer', name='run', query_aggregate='Median', total_aggregate='Geo')
df = (df/1000.0).sort_index()
display(Markdown("### Geometric Mean of Medians of Timer Run [s]"))
df
total_timer_run | |
---|---|
DBMS | |
MariaDB-1-1 | 31.517934 |
MariaDB-2-1 | 31.257281 |
MonetDB-1-1 | 0.752332 |
MonetDB-2-1 | 0.792416 |
MySQL-1-1 | 23.157694 |
MySQL-2-1 | 22.424075 |
PostgreSQL-1-1 | 7.769965 |
PostgreSQL-2-1 | 7.347514 |
%matplotlib inline
df = evaluate.get_aggregated_experiment_statistics(type='timer', name='run', query_aggregate='Median', total_aggregate='Geo')
df = df.sort_index()
fig = go.Figure()
for i in range(len(df.index)):
t = fig.add_trace(go.Bar(x=[df.index[i]], y=df.iloc[i], name=df.index[i], marker=dict(color=connection_colors[df.index[i]])))
fig.update_layout(title_text='Geometric Mean of Medians of Timer Run [s]')
fig.show()
df = evaluate.get_aggregated_query_statistics(type='timer', name='run', query_aggregate='Mean').sort_index().T
display(Markdown("### Means of Timer Runs [ms]"))
df
DBMS | MariaDB-1-1 | MariaDB-2-1 | MonetDB-1-1 | MonetDB-2-1 | MySQL-1-1 | MySQL-2-1 | PostgreSQL-1-1 | PostgreSQL-2-1 |
---|---|---|---|---|---|---|---|---|
Q1 | 115989.630678 | 113481.054475 | 5563.435273 | 4517.950883 | 139965.852845 | 139650.894833 | 20039.383417 | 19866.305729 |
Q2 | 13202.835330 | 13171.131305 | 423.855536 | 351.280993 | 1790.965649 | 1577.399513 | 7225.602556 | 17500.866503 |
Q3 | 58803.801925 | 55998.118738 | 1121.951630 | 286.680120 | 60652.883762 | 60329.661458 | 15167.515143 | 19752.016812 |
Q4 | 10906.610491 | 10700.938849 | 167.959029 | 157.038979 | 10353.898270 | 10227.802497 | 63276.056357 | 3660.092083 |
Q5 | 43173.049879 | 41958.968865 | 369.634689 | 383.102751 | 44849.054096 | 40186.950882 | 5783.143584 | 6885.665454 |
Q6 | 19219.394048 | 19288.650417 | 1785.649381 | 129.628404 | 24070.415718 | 24026.994607 | 2917.860596 | 2886.094683 |
Q7 | 35227.129593 | 33578.747254 | 2198.463472 | 3050.601307 | 27260.769050 | 24198.993758 | 11244.580511 | 13545.375023 |
Q8 | 74788.585443 | 73309.150578 | 1092.181380 | 3154.597746 | 117483.457010 | 106573.850883 | 12783.577640 | 13338.918216 |
Q9 | 141097.449787 | 139187.680818 | 4918.470218 | 3963.573644 | 124488.035032 | 112492.537863 | 44068.426727 | 42587.264411 |
Q10 | 141403.858324 | 142090.442053 | 908.977431 | 803.503769 | 20992.730243 | 20748.897447 | 20831.573940 | 16731.910749 |
Q11 | 4148.042627 | 4293.732452 | 567.795084 | 415.515498 | 5663.032641 | 5696.939546 | 3892.319345 | 2169.532531 |
Q12 | 132080.983062 | 128807.095058 | 3773.747000 | 191.421537 | 34564.011301 | 34269.547826 | 15897.897638 | 7168.397244 |
Q13 | 114272.807927 | 115454.660663 | 3590.687924 | 3181.238493 | 161980.722418 | 160750.343010 | 18784.685568 | 7771.261669 |
Q14 | 511364.874354 | 497102.462734 | 181.559546 | 136.743135 | 29699.836106 | 29359.513897 | 8136.222391 | 3260.906603 |
Q15 | 38717.798192 | 38992.169477 | 270.773724 | 282.713636 | 53015.246627 | 52652.230879 | 10828.831254 | 7963.955605 |
Q16 | 4946.922447 | 4957.202488 | 1839.745415 | 1857.860934 | 5847.584373 | 5991.898077 | 7068.259177 | 6408.576533 |
Q17 | 1276.979283 | 1253.035080 | 1891.926599 | 2360.170470 | 13071.677511 | 12453.737342 | 11935.246834 | 13523.998653 |
Q18 | 126016.121606 | 129203.891398 | 479.290318 | 490.452279 | 30790.192968 | 30442.444819 | 33132.461344 | 29488.654058 |
Q19 | 2384.714820 | 2344.720237 | 251.887020 | 248.384294 | 3420.121102 | 3349.518520 | 568.638627 | 492.559332 |
Q20 | 20530.713325 | 20667.318521 | 263.041606 | 233.055218 | 10182.912607 | 9965.629668 | 7626.458291 | 9463.541198 |
Q21 | 246130.899464 | 245986.749306 | 71514.882144 | 70924.262200 | 81238.430244 | 78553.948823 | 6737.272611 | 6798.701014 |
Q22 | 1826.111431 | 1837.417374 | 602.300994 | 969.356511 | 2372.703644 | 2338.294653 | 761.376779 | 744.457357 |
df = (evaluate.get_aggregated_query_statistics(type='throughput', name='run', query_aggregate='Max')).sort_index().T
display(Markdown("### Maximum of Run Throughput [1/s]"))
df
DBMS | MariaDB-1-1 | MariaDB-2-1 | MonetDB-1-1 | MonetDB-2-1 | MySQL-1-1 | MySQL-2-1 | PostgreSQL-1-1 | PostgreSQL-2-1 |
---|---|---|---|---|---|---|---|---|
Q1 | 0.008810 | 0.008846 | 0.220207 | 0.231232 | 0.007174 | 0.007189 | 0.050163 | 0.050691 |
Q2 | 0.076588 | 0.076907 | 2.789275 | 3.175859 | 0.566798 | 0.639963 | 0.139435 | 0.061638 |
Q3 | 0.017364 | 0.018087 | 3.736227 | 3.912092 | 0.016533 | 0.016633 | 0.082372 | 0.052391 |
Q4 | 0.092310 | 0.094059 | 6.605401 | 6.746199 | 0.097566 | 0.098876 | 0.407549 | 0.294164 |
Q5 | 0.023296 | 0.023917 | 3.608333 | 3.462481 | 0.022400 | 0.024953 | 0.247183 | 0.159519 |
Q6 | 0.052784 | 0.052485 | 7.631666 | 8.164754 | 0.041805 | 0.041873 | 0.344342 | 0.349700 |
Q7 | 0.028540 | 0.029938 | 0.563871 | 0.485066 | 0.038508 | 0.043290 | 0.099798 | 0.078069 |
Q8 | 0.013432 | 0.013729 | 0.959255 | 0.387856 | 0.008518 | 0.009407 | 0.091922 | 0.087958 |
Q9 | 0.007132 | 0.007206 | 0.782999 | 0.323114 | 0.008129 | 0.009099 | 0.023413 | 0.023625 |
Q10 | 0.007085 | 0.007049 | 1.238689 | 1.262583 | 0.047705 | 0.048243 | 0.050442 | 0.068517 |
Q11 | 0.243337 | 0.234186 | 1.938101 | 2.797194 | 0.177257 | 0.177560 | 0.306996 | 0.467223 |
Q12 | 0.007574 | 0.007771 | 4.941322 | 5.652018 | 0.029141 | 0.029371 | 0.075461 | 0.145088 |
Q13 | 0.008790 | 0.008695 | 0.322902 | 0.343424 | 0.006207 | 0.006254 | 0.054629 | 0.138944 |
Q14 | 0.001958 | 0.002015 | 7.144495 | 7.884286 | 0.034125 | 0.034448 | 0.160541 | 0.309416 |
Q15 | 0.025941 | 0.025866 | 3.821016 | 3.587965 | 0.019004 | 0.019073 | 0.117023 | 0.126468 |
Q16 | 0.205247 | 0.203905 | 0.555683 | 0.565030 | 0.173094 | 0.169006 | 0.147405 | 0.156668 |
Q17 | 0.788392 | 0.809581 | 0.695906 | 0.457047 | 0.081641 | 0.084269 | 0.083890 | 0.075591 |
Q18 | 0.007945 | 0.007753 | 2.198075 | 2.107396 | 0.032550 | 0.033012 | 0.032164 | 0.036029 |
Q19 | 0.429370 | 0.433899 | 4.087997 | 4.146425 | 0.300284 | 0.304113 | 2.180537 | 2.117862 |
Q20 | 0.048879 | 0.048549 | 4.019059 | 4.688444 | 0.098711 | 0.100542 | 0.132065 | 0.106847 |
Q21 | 0.004067 | 0.004068 | 0.014502 | 0.014320 | 0.012437 | 0.012804 | 0.148926 | 0.149333 |
Q22 | 0.550611 | 0.550844 | 1.988697 | 1.171185 | 0.429374 | 0.434330 | 1.372679 | 1.436696 |
df = evaluate.get_aggregated_query_statistics(type='latency', name='execution', query_aggregate='Mean').sort_index().T
display(Markdown("### Latency of Timer Execution [ms]"))
df
DBMS | MariaDB-1-1 | MariaDB-2-1 | MonetDB-1-1 | MonetDB-2-1 | MySQL-1-1 | MySQL-2-1 | PostgreSQL-1-1 | PostgreSQL-2-1 |
---|---|---|---|---|---|---|---|---|
Q1 | 115984.029097 | 113477.396985 | 5559.138363 | 4515.038655 | 139963.454816 | 139644.360665 | 20034.833936 | 19861.297945 |
Q2 | 13189.844139 | 13157.687652 | 413.282013 | 340.652305 | 1782.370459 | 1560.817159 | 7211.191122 | 17486.172169 |
Q3 | 58800.386259 | 55994.774677 | 1118.389753 | 283.285230 | 60650.473856 | 60324.399922 | 15162.580179 | 19747.151356 |
Q4 | 10906.366797 | 10700.690025 | 167.731983 | 156.817029 | 10353.680159 | 10227.460235 | 63275.764168 | 3659.762128 |
Q5 | 43172.769596 | 41958.683499 | 369.404377 | 382.882849 | 44848.791658 | 40186.573100 | 5782.834073 | 6885.320396 |
Q6 | 19219.304236 | 19288.558926 | 1785.574434 | 129.571968 | 24070.314904 | 24026.849064 | 2917.765952 | 2885.997845 |
Q7 | 35226.790069 | 33578.401355 | 2198.102969 | 3050.271067 | 27260.520071 | 24198.575423 | 11244.196273 | 13544.882668 |
Q8 | 74788.269761 | 73308.950132 | 1091.897862 | 3154.334292 | 117483.286765 | 106573.598974 | 12783.235100 | 13338.417255 |
Q9 | 141087.924653 | 139178.495053 | 4908.692492 | 3954.063788 | 124482.944844 | 112482.017125 | 44059.743012 | 42577.751900 |
Q10 | 141401.555155 | 142088.174021 | 906.461463 | 801.192185 | 20991.290802 | 20745.993865 | 20828.577831 | 16729.723187 |
Q11 | 3943.081469 | 4038.932427 | 260.222192 | 114.384230 | 5474.876384 | 5460.062068 | 3688.202220 | 1934.406897 |
Q12 | 132080.785154 | 128806.873278 | 3773.600698 | 191.276890 | 34563.874573 | 34269.322594 | 15897.675939 | 7168.201096 |
Q13 | 114271.550681 | 115453.225490 | 3589.015730 | 3179.584549 | 161979.926707 | 160748.794775 | 18783.155397 | 7769.695470 |
Q14 | 511364.784783 | 497102.376689 | 181.431396 | 136.607647 | 29699.769745 | 29359.402171 | 8135.799106 | 3260.492730 |
Q15 | 38717.798192 | 38992.169477 | 270.773724 | 282.713636 | 53015.246627 | 52652.230879 | 10828.831254 | 7963.955605 |
Q16 | 4027.831425 | 4120.540270 | 686.746840 | 691.220624 | 5078.042286 | 5088.938285 | 6058.316758 | 5587.771454 |
Q17 | 1276.899524 | 1252.970511 | 1891.844391 | 2360.095346 | 13071.609235 | 12453.614161 | 11934.943291 | 13523.710171 |
Q18 | 126002.332541 | 129191.025399 | 465.953219 | 477.032062 | 30781.519091 | 30425.720738 | 33115.222733 | 29473.692810 |
Q19 | 2384.642124 | 2344.654581 | 251.829252 | 248.328930 | 3420.048188 | 3349.401808 | 568.557070 | 492.506636 |
Q20 | 20484.981706 | 20624.654693 | 230.338829 | 208.398596 | 10160.403924 | 9924.714682 | 7587.395355 | 9418.309655 |
Q21 | 246127.850226 | 245983.909848 | 71511.727077 | 70921.302693 | 81236.928218 | 78550.780588 | 6734.338372 | 6795.589572 |
Q22 | 1825.728476 | 1837.013443 | 600.653826 | 967.767178 | 2372.459627 | 2337.835912 | 761.021456 | 744.030803 |
df = evaluate.get_aggregated_query_statistics(type='latency', name='execution', query_aggregate='Mean').sort_index()
df = evaluate.get_aggregated_by_connection(df, list_connections_dbms, connection_aggregate='Mean').T
display(Markdown("### Mean of Latency of Timer Execution per DBMS [ms]"))
df
MariaDB | MonetDB | MySQL | PostgreSQL | |
---|---|---|---|---|
Q1 | 114730.713041 | 5037.088509 | 139803.907740 | 19948.065941 |
Q2 | 13173.765895 | 376.967159 | 1671.593809 | 12348.681645 |
Q3 | 57397.580468 | 700.837491 | 60487.436889 | 17454.865768 |
Q4 | 10803.528411 | 162.274506 | 10290.570197 | 33467.763148 |
Q5 | 42565.726548 | 376.143613 | 42517.682379 | 6334.077235 |
Q6 | 19253.931581 | 957.573201 | 24048.581984 | 2901.881899 |
Q7 | 34402.595712 | 2624.187018 | 25729.547747 | 12394.539471 |
Q8 | 74048.609946 | 2123.116077 | 112028.442870 | 13060.826178 |
Q9 | 140133.209853 | 4431.378140 | 118482.480984 | 43318.747456 |
Q10 | 141744.864588 | 853.826824 | 20868.642333 | 18779.150509 |
Q11 | 3991.006948 | 187.303211 | 5467.469226 | 2811.304559 |
Q12 | 130443.829216 | 1982.438794 | 34416.598583 | 11532.938518 |
Q13 | 114862.388085 | 3384.300139 | 161364.360741 | 13276.425433 |
Q14 | 504233.580736 | 159.019522 | 29529.585958 | 5698.145918 |
Q15 | 38854.983834 | 276.743680 | 52833.738753 | 9396.393429 |
Q16 | 4074.185848 | 688.983732 | 5083.490285 | 5823.044106 |
Q17 | 1264.935018 | 2125.969868 | 12762.611698 | 12729.326731 |
Q18 | 127596.678970 | 471.492640 | 30603.619914 | 31294.457771 |
Q19 | 2364.648353 | 250.079091 | 3384.724998 | 530.531853 |
Q20 | 20554.818200 | 219.368712 | 10042.559303 | 8502.852505 |
Q21 | 246055.880037 | 71216.514885 | 79893.854403 | 6764.963972 |
Q22 | 1831.370959 | 784.210502 | 2355.147769 | 752.526129 |
df = evaluate.get_aggregated_query_statistics(type='latency', name='execution', query_aggregate='Mean').sort_index()
df = evaluate.get_aggregated_by_connection(df, list_connections_dbms, connection_aggregate='cv [%]').T
display(Markdown("### CV of Latency of Timer Execution per DBMS [%]"))
df
MariaDB | MonetDB | MySQL | PostgreSQL | |
---|---|---|---|---|
Q1 | 1.092398 | 10.364119 | 0.114122 | 0.434969 |
Q2 | 0.122047 | 9.633426 | 6.627008 | 41.603555 |
Q3 | 2.444016 | 59.579042 | 0.269539 | 13.132645 |
Q4 | 0.951896 | 3.363114 | 0.613280 | 89.064814 |
Q5 | 1.426131 | 1.791666 | 5.482682 | 8.702817 |
Q6 | 0.179846 | 86.468714 | 0.090371 | 0.547371 |
Q7 | 2.395733 | 16.236802 | 5.950250 | 9.281048 |
Q8 | 0.998884 | 48.570977 | 4.869160 | 2.125372 |
Q9 | 0.681291 | 10.771239 | 5.064431 | 1.710566 |
Q10 | 0.242202 | 6.164557 | 0.587717 | 10.913312 |
Q11 | 1.200837 | 38.930983 | 0.135477 | 31.191841 |
Q12 | 1.254913 | 90.351435 | 0.427921 | 37.845840 |
Q13 | 0.514387 | 6.048979 | 0.381476 | 41.477505 |
Q14 | 1.414266 | 14.093788 | 0.576316 | 42.779761 |
Q15 | 0.353071 | 2.157215 | 0.343545 | 15.244549 |
Q16 | 1.137759 | 0.324665 | 0.107170 | 4.040372 |
Q17 | 0.945859 | 11.012643 | 2.421115 | 6.240577 |
Q18 | 1.249520 | 1.174869 | 0.581301 | 5.818171 |
Q19 | 0.845528 | 0.699843 | 1.043606 | 7.167377 |
Q20 | 0.339757 | 5.000766 | 1.173452 | 10.766471 |
Q21 | 0.029250 | 0.414528 | 1.681073 | 0.452709 |
Q22 | 0.308102 | 23.406557 | 0.735065 | 1.128908 |
df = evaluate.get_aggregated_query_statistics(type='timer', name='connection', query_aggregate='Mean').T
display(Markdown("### Latency of Timer Connection [ms]"))
df
df = evaluate.get_aggregated_query_statistics(type='timer', name='datatransfer', query_aggregate='Mean').T
display(Markdown("### Latency of Timer Data Transfer [ms]"))
df
df = evaluate.get_aggregated_query_statistics(type='timer', name='run', query_aggregate='factor').sort_index().T
display(Markdown("### Latency of Timer Run - normalized to 1 per Query"))
df
DBMS | MariaDB-1-1 | MariaDB-2-1 | MonetDB-1-1 | MonetDB-2-1 | MySQL-1-1 | MySQL-2-1 | PostgreSQL-1-1 | PostgreSQL-2-1 |
---|---|---|---|---|---|---|---|---|
Q1 | 25.6731 | 25.1178 | 1.2314 | 1.0000 | 30.9799 | 30.9102 | 4.4355 | 4.3972 |
Q2 | 37.5848 | 37.4946 | 1.2066 | 1.0000 | 5.0984 | 4.4904 | 20.5693 | 49.8201 |
Q3 | 205.1199 | 195.3331 | 3.9136 | 1.0000 | 211.5699 | 210.4424 | 52.9075 | 68.8992 |
Q4 | 69.4516 | 68.1419 | 1.0695 | 1.0000 | 65.9320 | 65.1291 | 402.9322 | 23.3069 |
Q5 | 116.7992 | 113.5147 | 1.0000 | 1.0364 | 121.3335 | 108.7207 | 15.6456 | 18.6283 |
Q6 | 148.2653 | 148.7996 | 13.7751 | 1.0000 | 185.6878 | 185.3529 | 22.5094 | 22.2644 |
Q7 | 16.0235 | 15.2737 | 1.0000 | 1.3876 | 12.3999 | 11.0072 | 5.1147 | 6.1613 |
Q8 | 68.4763 | 67.1218 | 1.0000 | 2.8883 | 107.5677 | 97.5789 | 11.7046 | 12.2131 |
Q9 | 35.5985 | 35.1167 | 1.2409 | 1.0000 | 31.4080 | 28.3816 | 11.1184 | 10.7447 |
Q10 | 175.9841 | 176.8386 | 1.1313 | 1.0000 | 26.1265 | 25.8230 | 25.9259 | 20.8237 |
Q11 | 9.9829 | 10.3335 | 1.3665 | 1.0000 | 13.6289 | 13.7105 | 9.3674 | 5.2213 |
Q12 | 690.0006 | 672.8976 | 19.7143 | 1.0000 | 180.5649 | 179.0266 | 83.0518 | 37.4482 |
Q13 | 35.9209 | 36.2924 | 1.1287 | 1.0000 | 50.9175 | 50.5307 | 5.9048 | 2.4428 |
Q14 | 3739.6018 | 3635.3011 | 1.3277 | 1.0000 | 217.1943 | 214.7056 | 59.5000 | 23.8469 |
Q15 | 142.9895 | 144.0028 | 1.0000 | 1.0441 | 195.7917 | 194.4510 | 39.9922 | 29.4118 |
Q16 | 2.6889 | 2.6945 | 1.0000 | 1.0098 | 3.1785 | 3.2569 | 3.8420 | 3.4834 |
Q17 | 1.0191 | 1.0000 | 1.5099 | 1.8836 | 10.4320 | 9.9389 | 9.5251 | 10.7930 |
Q18 | 262.9223 | 269.5733 | 1.0000 | 1.0233 | 64.2412 | 63.5157 | 69.1282 | 61.5257 |
Q19 | 9.6009 | 9.4399 | 1.0141 | 1.0000 | 13.7695 | 13.4852 | 2.2894 | 1.9831 |
Q20 | 88.0938 | 88.6799 | 1.1287 | 1.0000 | 43.6931 | 42.7608 | 32.7238 | 40.6064 |
Q21 | 36.5327 | 36.5113 | 10.6148 | 10.5271 | 12.0581 | 11.6596 | 1.0000 | 1.0091 |
Q22 | 3.0319 | 3.0507 | 1.0000 | 1.6094 | 3.9394 | 3.8823 | 1.2641 | 1.2360 |
df = evaluate.get_total_resultsize().T
display(Markdown("### Size of Result Sets per Query"))
df
MariaDB-1-1 | MariaDB-2-1 | MonetDB-1-1 | MonetDB-2-1 | MySQL-1-1 | MySQL-2-1 | PostgreSQL-1-1 | PostgreSQL-2-1 | |
---|---|---|---|---|---|---|---|---|
Q1 | 1344 | 1344 | 1344 | 1344 | 1344 | 1344 | 1344 | 1344 |
Q2 | 19584 | 19584 | 19584 | 19584 | 19584 | 19584 | 19584 | 19584 |
Q3 | 1344 | 1344 | 1344 | 1344 | 1344 | 1344 | 1344 | 1344 |
Q4 | 624 | 624 | 624 | 624 | 624 | 624 | 624 | 624 |
Q5 | 624 | 624 | 624 | 624 | 624 | 624 | 624 | 624 |
Q6 | 408 | 408 | 408 | 408 | 408 | 408 | 408 | 408 |
Q7 | 768 | 768 | 768 | 768 | 768 | 768 | 768 | 768 |
Q8 | 480 | 480 | 480 | 480 | 480 | 480 | 480 | 480 |
Q9 | 12984 | 12984 | 12984 | 12984 | 12984 | 12984 | 12984 | 12984 |
Q10 | 4224 | 4224 | 4224 | 4224 | 4224 | 4224 | 4224 | 4224 |
Q11 | 455728 | 455728 | 455728 | 455728 | 455728 | 455728 | 455728 | 455728 |
Q12 | 528 | 528 | 528 | 528 | 528 | 528 | 528 | 528 |
Q13 | 2544 | 2544 | 2544 | 2544 | 2544 | 2544 | 2544 | 2544 |
Q14 | 408 | 408 | 408 | 408 | 408 | 408 | 408 | 408 |
Q15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Q16 | 2746656 | 2746656 | 2746656 | 2746656 | 2746656 | 2746656 | 2746656 | 2746656 |
Q17 | 408 | 408 | 408 | 408 | 408 | 408 | 408 | 408 |
Q18 | 13488 | 13488 | 13488 | 13488 | 13488 | 13488 | 13488 | 13488 |
Q19 | 408 | 408 | 408 | 408 | 408 | 408 | 408 | 408 |
Q20 | 85568 | 85568 | 85568 | 85568 | 85568 | 85568 | 85568 | 85568 |
Q21 | 5184 | 5184 | 5184 | 5184 | 5184 | 5184 | 5184 | 5184 |
Q22 | 888 | 888 | 888 | 888 | 888 | 888 | 888 | 888 |
df = evaluate.get_total_resultsize_normalized()
display(Markdown("### Size of Result Sets per Query - normalized to 1"))
df
Q1 | Q2 | Q3 | Q4 | Q5 | Q6 | Q7 | Q8 | Q9 | Q10 | ... | Q13 | Q14 | Q15 | Q16 | Q17 | Q18 | Q19 | Q20 | Q21 | Q22 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
MariaDB-1-1 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | ... | 1.0 | 1.0 | NaN | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
MariaDB-2-1 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | ... | 1.0 | 1.0 | NaN | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
MonetDB-1-1 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | ... | 1.0 | 1.0 | NaN | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
MonetDB-2-1 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | ... | 1.0 | 1.0 | NaN | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
MySQL-1-1 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | ... | 1.0 | 1.0 | NaN | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
MySQL-2-1 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | ... | 1.0 | 1.0 | NaN | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
PostgreSQL-1-1 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | ... | 1.0 | 1.0 | NaN | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
PostgreSQL-2-1 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | ... | 1.0 | 1.0 | NaN | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
8 rows × 22 columns
df = evaluate.get_total_errors().T
display(Markdown("### Table of Errors"))
df
MariaDB-1-1 | MariaDB-2-1 | MonetDB-1-1 | MonetDB-2-1 | MySQL-1-1 | MySQL-2-1 | PostgreSQL-1-1 | PostgreSQL-2-1 | |
---|---|---|---|---|---|---|---|---|
Q1 | False | False | False | False | False | False | False | False |
Q2 | False | False | False | False | False | False | False | False |
Q3 | False | False | False | False | False | False | False | False |
Q4 | False | False | False | False | False | False | False | False |
Q5 | False | False | False | False | False | False | False | False |
Q6 | False | False | False | False | False | False | False | False |
Q7 | False | False | False | False | False | False | False | False |
Q8 | False | False | False | False | False | False | False | False |
Q9 | False | False | False | False | False | False | False | False |
Q10 | False | False | False | False | False | False | False | False |
Q11 | False | False | False | False | False | False | False | False |
Q12 | False | False | False | False | False | False | False | False |
Q13 | False | False | False | False | False | False | False | False |
Q14 | False | False | False | False | False | False | False | False |
Q15 | False | False | False | False | False | False | False | False |
Q16 | False | False | False | False | False | False | False | False |
Q17 | False | False | False | False | False | False | False | False |
Q18 | False | False | False | False | False | False | False | False |
Q19 | False | False | False | False | False | False | False | False |
Q20 | False | False | False | False | False | False | False | False |
Q21 | False | False | False | False | False | False | False | False |
Q22 | False | False | False | False | False | False | False | False |
df = evaluate.get_total_warnings().T
display(Markdown("### Table of Warnings"))
df
MariaDB-1-1 | MariaDB-2-1 | MonetDB-1-1 | MonetDB-2-1 | MySQL-1-1 | MySQL-2-1 | PostgreSQL-1-1 | PostgreSQL-2-1 | |
---|---|---|---|---|---|---|---|---|
Q1 | False | False | True | True | False | False | False | False |
Q2 | False | False | False | False | False | False | False | False |
Q3 | False | False | False | False | False | False | False | False |
Q4 | False | False | False | False | False | False | False | False |
Q5 | False | False | False | False | False | False | False | False |
Q6 | False | False | False | False | False | False | False | False |
Q7 | False | False | False | False | False | False | False | False |
Q8 | False | False | False | False | False | False | False | False |
Q9 | False | False | False | False | False | False | False | False |
Q10 | False | False | False | False | False | False | False | False |
Q11 | False | False | False | False | False | False | False | False |
Q12 | False | False | False | False | False | False | False | False |
Q13 | False | False | False | False | False | False | False | False |
Q14 | False | False | False | False | False | False | False | False |
Q15 | True | False | True | True | True | True | True | True |
Q16 | False | False | False | False | False | False | False | False |
Q17 | False | False | False | False | False | False | False | False |
Q18 | False | False | False | False | False | False | False | False |
Q19 | False | False | False | False | False | False | False | False |
Q20 | False | False | False | False | False | False | False | False |
Q21 | False | False | False | False | False | False | False | False |
Q22 | False | False | False | False | False | False | False | False |
df = evaluate.get_total_times().T/1000.0
display(Markdown("### Total Time [s] per Query"))
df
MariaDB-1-1 | MariaDB-2-1 | MonetDB-1-1 | MonetDB-2-1 | MySQL-1-1 | MySQL-2-1 | PostgreSQL-1-1 | PostgreSQL-2-1 | |
---|---|---|---|---|---|---|---|---|
Q1 | 347.973955 | 340.447334 | 16.845194 | 13.651159 | 419.900614 | 418.959277 | 60.128597 | 59.610011 |
Q2 | 39.615576 | 39.520509 | 1.823718 | 1.384478 | 5.376375 | 4.740327 | 21.686897 | 52.512813 |
Q3 | 176.414484 | 167.996884 | 3.498522 | 0.976042 | 181.960522 | 180.991944 | 45.508243 | 59.262894 |
Q4 | 32.722405 | 32.105238 | 0.549320 | 0.513998 | 31.063408 | 30.685955 | 189.832833 | 10.984629 |
Q5 | 129.521532 | 125.879449 | 1.155652 | 1.228914 | 134.548819 | 120.563560 | 17.351747 | 20.659699 |
Q6 | 57.660592 | 57.868211 | 5.364403 | 0.395960 | 72.212753 | 72.083435 | 8.756129 | 8.660637 |
Q7 | 105.684266 | 100.738883 | 6.706806 | 12.678075 | 81.784196 | 72.600099 | 33.736559 | 40.639116 |
Q8 | 224.372421 | 219.930033 | 3.325128 | 9.827672 | 352.452032 | 319.723975 | 38.353090 | 40.019183 |
Q9 | 423.299235 | 417.569854 | 15.697046 | 15.665570 | 373.467877 | 337.484744 | 132.212075 | 127.769052 |
Q10 | 424.215546 | 426.275221 | 3.142779 | 3.154876 | 62.980595 | 62.250786 | 62.501992 | 50.201007 |
Q11 | 12.636782 | 13.036927 | 1.998065 | 1.483094 | 17.120079 | 17.255366 | 11.835612 | 6.707820 |
Q12 | 396.245450 | 386.423815 | 11.375542 | 0.624792 | 103.693792 | 102.811258 | 47.698360 | 21.510053 |
Q13 | 342.821134 | 346.367399 | 10.778061 | 9.548804 | 485.944128 | 482.254182 | 56.357074 | 23.317058 |
Q14 | 1534.097118 | 1491.309947 | 0.554613 | 0.420054 | 89.101176 | 88.081257 | 24.410784 | 9.784663 |
Q15 | 116.154487 | 116.977704 | 0.821195 | 0.856493 | 159.046659 | 157.957757 | 32.487656 | 23.893080 |
Q16 | 15.720677 | 15.581426 | 6.722981 | 6.640638 | 18.174277 | 18.795835 | 22.066576 | 19.974487 |
Q17 | 3.832843 | 3.760958 | 5.683618 | 7.087494 | 39.216798 | 37.363785 | 35.808117 | 40.574290 |
Q18 | 378.056357 | 387.620047 | 1.627102 | 3.110095 | 92.376161 | 91.482406 | 99.406812 | 88.473750 |
Q19 | 7.156457 | 7.036084 | 0.770288 | 0.758979 | 10.261899 | 10.050805 | 1.708093 | 1.479426 |
Q20 | 61.613432 | 62.027928 | 0.891396 | 0.792113 | 30.721453 | 30.143051 | 23.013910 | 28.578599 |
Q21 | 738.396596 | 737.964908 | 214.951881 | 214.146436 | 243.717694 | 235.666268 | 20.215939 | 20.400054 |
Q22 | 5.480514 | 5.514622 | 1.872112 | 3.753415 | 7.119875 | 7.017448 | 2.286109 | 2.236404 |
df = evaluate.get_total_times_normalized().T
display(Markdown("### Total Time per Query - normalized to 100%"))
df
MariaDB-1-1 | MariaDB-2-1 | MonetDB-1-1 | MonetDB-2-1 | MySQL-1-1 | MySQL-2-1 | PostgreSQL-1-1 | PostgreSQL-2-1 | |
---|---|---|---|---|---|---|---|---|
Q1 | 20.743404 | 20.294728 | 1.004175 | 0.813772 | 25.031092 | 24.974977 | 3.584383 | 3.553469 |
Q2 | 23.770197 | 23.713155 | 1.094270 | 0.830717 | 3.225941 | 2.844298 | 13.012605 | 31.508817 |
Q3 | 21.603285 | 20.572486 | 0.428420 | 0.119524 | 22.282439 | 22.163829 | 5.572828 | 7.257189 |
Q4 | 9.962439 | 9.774540 | 0.167242 | 0.156488 | 9.457352 | 9.342435 | 57.795200 | 3.344305 |
Q5 | 23.510497 | 22.849393 | 0.209772 | 0.223070 | 24.423041 | 21.884463 | 3.149655 | 3.750109 |
Q6 | 20.374615 | 20.447978 | 1.895534 | 0.139914 | 25.516683 | 25.470988 | 3.094016 | 3.060273 |
Q7 | 23.249385 | 22.161455 | 1.475424 | 2.789038 | 17.991631 | 15.971230 | 7.421675 | 8.940162 |
Q8 | 18.573822 | 18.206075 | 0.275258 | 0.813547 | 29.176407 | 26.467139 | 3.174915 | 3.312837 |
Q9 | 22.965884 | 22.655039 | 0.851635 | 0.849927 | 20.262309 | 18.310062 | 7.173099 | 6.932045 |
Q10 | 38.750956 | 38.939101 | 0.287084 | 0.288190 | 5.753109 | 5.686443 | 5.709390 | 4.585728 |
Q11 | 15.396863 | 15.884406 | 2.434475 | 1.807026 | 20.859386 | 21.024221 | 14.420704 | 8.172919 |
Q12 | 37.019032 | 36.101451 | 1.062754 | 0.058371 | 9.687540 | 9.605090 | 4.456195 | 2.009566 |
Q13 | 19.507426 | 19.709218 | 0.613300 | 0.543352 | 27.651502 | 27.441534 | 3.206866 | 1.326802 |
Q14 | 47.381440 | 46.059934 | 0.017130 | 0.012974 | 2.751939 | 2.720438 | 0.753941 | 0.302205 |
Q15 | 19.098230 | 19.233584 | 0.135022 | 0.140825 | 26.150602 | 25.971563 | 5.341651 | 3.928523 |
Q16 | 12.711086 | 12.598494 | 5.435923 | 5.369344 | 14.694965 | 15.197531 | 17.842116 | 16.150540 |
Q17 | 2.211325 | 2.169851 | 3.279113 | 4.089067 | 22.625785 | 21.556705 | 20.659177 | 23.408978 |
Q18 | 33.100333 | 33.937672 | 0.142459 | 0.272301 | 8.087899 | 8.009647 | 8.703460 | 7.746228 |
Q19 | 18.246015 | 17.939112 | 1.963916 | 1.935083 | 26.163610 | 25.625407 | 4.354933 | 3.771925 |
Q20 | 25.911744 | 26.086061 | 0.374880 | 0.333126 | 12.920014 | 12.676765 | 9.678580 | 12.018829 |
Q21 | 30.443572 | 30.425774 | 8.862315 | 8.829107 | 10.048309 | 9.716354 | 0.833489 | 0.841080 |
Q22 | 15.534117 | 15.630793 | 5.306365 | 10.638782 | 20.180767 | 19.890444 | 6.479809 | 6.338923 |
df = evaluate.get_total_times_relative().T
display(Markdown("### Total Time per Query - normalized to 100%"))
df
MariaDB-1-1 | MariaDB-2-1 | MonetDB-1-1 | MonetDB-2-1 | MySQL-1-1 | MySQL-2-1 | PostgreSQL-1-1 | PostgreSQL-2-1 | |
---|---|---|---|---|---|---|---|---|
Q1 | 165.947234 | 162.357822 | 8.033398 | 6.510177 | 200.248739 | 199.799819 | 28.675061 | 28.427749 |
Q2 | 190.161578 | 189.705241 | 8.754162 | 6.645734 | 25.807525 | 22.754386 | 104.100838 | 252.070536 |
Q3 | 172.826279 | 164.579890 | 3.427363 | 0.956189 | 178.259513 | 177.310635 | 44.582622 | 58.057509 |
Q4 | 79.699508 | 78.196322 | 1.337938 | 1.251906 | 75.658813 | 74.739478 | 462.361598 | 26.754437 |
Q5 | 188.083977 | 182.795146 | 1.678173 | 1.784561 | 195.384324 | 175.075706 | 25.197243 | 30.000868 |
Q6 | 162.996918 | 163.583822 | 15.164276 | 1.119312 | 204.133462 | 203.767902 | 24.752124 | 24.482184 |
Q7 | 185.995083 | 177.291640 | 11.803393 | 22.312305 | 143.933047 | 127.769837 | 59.373398 | 71.521296 |
Q8 | 148.590573 | 145.648602 | 2.202065 | 6.508373 | 233.411259 | 211.737113 | 25.399323 | 26.502692 |
Q9 | 183.727070 | 181.240313 | 6.813082 | 6.799420 | 162.098471 | 146.480499 | 57.384788 | 55.456357 |
Q10 | 310.007644 | 311.512811 | 2.296676 | 2.305516 | 46.024871 | 45.491542 | 45.675118 | 36.685822 |
Q11 | 123.174905 | 127.075251 | 19.475797 | 14.456209 | 166.875087 | 168.193769 | 115.365632 | 65.383349 |
Q12 | 296.152257 | 288.811606 | 8.502034 | 0.466967 | 77.500324 | 76.840721 | 35.649562 | 16.076527 |
Q13 | 156.059409 | 157.673743 | 4.906400 | 4.346817 | 221.212014 | 219.532272 | 25.654928 | 10.614417 |
Q14 | 379.051518 | 368.479474 | 0.137036 | 0.103789 | 22.015514 | 21.763508 | 6.031525 | 2.417638 |
Q15 | 152.785842 | 153.868675 | 1.080173 | 1.126603 | 209.204813 | 207.772505 | 42.733208 | 31.428182 |
Q16 | 101.688692 | 100.787949 | 43.487385 | 42.954751 | 117.559722 | 121.580250 | 142.736932 | 129.204320 |
Q17 | 17.690600 | 17.358810 | 26.232903 | 32.712534 | 181.006278 | 172.453643 | 165.273412 | 187.271821 |
Q18 | 264.802664 | 271.501376 | 1.139674 | 2.178409 | 64.703193 | 64.077179 | 69.627684 | 61.969821 |
Q19 | 145.968117 | 143.512895 | 15.711325 | 15.480666 | 209.308878 | 205.003257 | 34.839461 | 30.175402 |
Q20 | 207.293950 | 208.688491 | 2.999039 | 2.665008 | 103.360114 | 101.414122 | 77.428642 | 96.150635 |
Q21 | 243.548577 | 243.406191 | 70.898518 | 70.632855 | 80.386472 | 77.730835 | 6.667912 | 6.728639 |
Q22 | 124.272938 | 125.046343 | 42.450923 | 85.110253 | 161.446139 | 159.123549 | 51.838470 | 50.711385 |
df = (evaluate.get_aggregated_query_statistics(type='timer', name='run', query_aggregate='Mean').T/1000.0).round(2)
#.sort_index(ascending=False)
#df=df.T
#df=df.round(2)
fig1 = ff.create_annotated_heatmap(
x=list(df.columns),
y=list(df.index),
z=df.values.tolist(),
showscale=True,
colorscale='Reds',
xgap=1,
ygap=1,
)
fig1.update_layout(title_text='Timer Run - Mean per Query [s]')
fig1.layout.xaxis.type = 'category'
fig1.layout.yaxis.type = 'category'
fig1.show()
df = (evaluate.get_aggregated_query_statistics(type='timer', name='run', query_aggregate='Std Dev').T/1000.0).round(2)
#.sort_index(ascending=False)
#df=df.T
#df=df.round(2)
fig1 = ff.create_annotated_heatmap(
x=list(df.columns),
y=list(df.index),
z=df.values.tolist(),
showscale=True,
colorscale='Reds',
xgap=1,
ygap=1,
)
fig1.update_layout(title_text='Timer Run - Std Dev per Query [s]')
fig1.layout.xaxis.type = 'category'
fig1.layout.yaxis.type = 'category'
fig1.show()
df = evaluate.get_aggregated_query_statistics(type='timer', name='run', query_aggregate='factor').round(2)
df=df.sort_index(ascending=True).T
#df=df.T
#df=df.round(2)
fig1 = ff.create_annotated_heatmap(
x=list(df.columns),
y=list(df.index),
z=df.values.tolist(),
showscale=True,
colorscale='Reds',
xgap=1,
ygap=1,
)
fig1.update_layout(title_text='Timer Run - Factor per Query [s]')
fig1.layout.xaxis.type = 'category'
fig1.layout.yaxis.type = 'category'
fig1.show()
numQuery = 4
df1, df2 = evaluate.get_measures_and_statistics(numQuery, type='timer', name='execution')
display(Markdown("### Measures of Execution Times - {} Runs of Query {}".format(len(df1.columns), numQuery)))
df1.sort_index()
0 | 1 | 2 | |
---|---|---|---|
DBMS | |||
MariaDB-1-1 | 10832.749509 | 10974.072207 | 10912.278674 |
MariaDB-2-1 | 10631.296530 | 10786.618634 | 10684.154912 |
MonetDB-1-1 | 188.181439 | 151.178077 | 163.836433 |
MonetDB-2-1 | 167.151919 | 148.022101 | 155.277067 |
MySQL-1-1 | 10249.201583 | 10490.168055 | 10321.670839 |
MySQL-2-1 | 10113.206561 | 10378.973982 | 10190.200162 |
PostgreSQL-1-1 | 184856.501106 | 2517.352709 | 2453.438690 |
PostgreSQL-2-1 | 3520.991707 | 3399.093443 | 4059.201233 |
display(Markdown("### Statistics of Execution Times - {} Runs of Query {}".format(len(df1.columns), numQuery)))
df2.sort_index()
factor | n | Mean | Std Dev | cv [%] | Median | iqr | qcod [%] | Min | Max | Range | Geo | 1st | Last | Sum | P25 | P75 | P90 | P95 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DBMS | |||||||||||||||||||
MariaDB-1-1 | 69.5484 | 3.0 | 10906.366797 | 57.845996 | 0.530387 | 10912.278674 | 70.661349 | 0.323902 | 10832.749509 | 10974.072207 | 141.322698 | 10906.213308 | 10832.749509 | 10912.278674 | 32719.100390 | 10872.514091 | 10943.175440 | 10961.713500 | 10967.892854 |
MariaDB-2-1 | 68.2368 | 3.0 | 10700.690025 | 64.478919 | 0.602568 | 10684.154912 | 77.661052 | 0.363019 | 10631.296530 | 10786.618634 | 155.322104 | 10700.496044 | 10631.296530 | 10684.154912 | 32102.070076 | 10657.725721 | 10735.386773 | 10766.125890 | 10776.372262 |
MonetDB-1-1 | 1.0696 | 3.0 | 167.731983 | 15.355643 | 9.154869 | 163.836433 | 18.501681 | 5.547461 | 151.178077 | 188.181439 | 37.003362 | 167.041877 | 188.181439 | 163.836433 | 503.195949 | 157.507255 | 176.008936 | 183.312438 | 185.746938 |
MonetDB-2-1 | 1.0000 | 3.0 | 156.817029 | 7.885265 | 5.028322 | 155.277067 | 9.564909 | 3.057209 | 148.022101 | 167.151919 | 19.129818 | 156.620432 | 167.151919 | 155.277067 | 470.451087 | 151.649584 | 161.214493 | 164.776949 | 165.964434 |
MySQL-1-1 | 66.0240 | 3.0 | 10353.680159 | 100.944399 | 0.974962 | 10321.670839 | 120.483236 | 0.582288 | 10249.201583 | 10490.168055 | 240.966472 | 10353.189470 | 10249.201583 | 10321.670839 | 31061.040476 | 10285.436211 | 10405.919447 | 10456.468611 | 10473.318333 |
MySQL-2-1 | 65.2191 | 3.0 | 10227.460235 | 111.652184 | 1.091690 | 10190.200162 | 132.883710 | 0.650234 | 10113.206561 | 10378.973982 | 265.767421 | 10226.852806 | 10113.206561 | 10190.200162 | 30682.380705 | 10151.703362 | 10284.587072 | 10341.219218 | 10360.096600 |
PostgreSQL-1-1 | 403.5006 | 3.0 | 63275.764168 | 85970.567510 | 135.866502 | 2517.352709 | 91201.531208 | 94.831370 | 2453.438690 | 184856.501106 | 182403.062416 | 10451.645460 | 184856.501106 | 2453.438690 | 189827.292505 | 2485.395700 | 93686.926907 | 148388.671427 | 166622.586266 |
PostgreSQL-2-1 | 23.3378 | 3.0 | 3659.762128 | 286.796671 | 7.836484 | 3520.991707 | 330.053895 | 4.552380 | 3399.093443 | 4059.201233 | 660.107790 | 3648.851839 | 3520.991707 | 4059.201233 | 10979.286383 | 3460.042575 | 3790.096470 | 3951.559328 | 4005.380280 |
df1,df2=evaluate.get_measures_and_statistics(numQuery, type='timer', name='run', warmup=0)
df1 = df1.sort_index()
# Plots
fig = go.Figure()
for i in range(len(df1.index)):
t = fig.add_trace(go.Scatter(x=df1.T.index, y=df1.iloc[i], name=df1.index[i], line=dict(color=connection_colors[df1.index[i]], width=1)))
fig.update_layout(title_text='Timer Run [ms] - Query {} ({} Measures)'.format(numQuery, len(df1.columns)))
fig.show()
# Bar
df1, df2 = evaluate.get_measures_and_statistics(numQuery, type='timer', name='run')
df = tools.dataframehelper.collect(df2, 'Mean', 'timer_run_mean').sort_index()
fig = go.Figure()
for i in range(len(df.index)):
t = fig.add_trace(go.Bar(x=[df.index[i]], y=df.iloc[i], name=df.index[i], marker=dict(color=connection_colors[df.index[i]])))
fig.update_layout(title_text='Mean of Timer Run [s] - Query {}'.format(numQuery))
fig.show()
# Boxplots
df1, df2 = evaluate.get_measures_and_statistics(numQuery, type='timer', name='run')
df1 = df1.sort_index()
fig = go.Figure()
for i in range(len(df1.index)):
t = fig.add_trace(go.Box(y=df1.iloc[i], name=df1.index[i], line=dict(color=connection_colors[df1.index[i]], width=1), boxmean='sd'))
fig.update_layout(title_text='Timer Run [ms] - Query {}'.format(numQuery))
fig.show()
# Histogram
numQuery = 1
df1, df2 = evaluate.get_measures_and_statistics(numQuery, type='timer', name='run')
df1=df1.sort_index()
fig = go.Figure(layout = go.Layout(barmode='overlay'))
for i in range(len(df1.index)):
t = fig.add_trace(go.Histogram(x=df1.iloc[i], name=df1.index[i], opacity=0.75, marker=dict(color=connection_colors[df1.index[i]])))
fig.update_layout(title_text='Timer Run Histogram - Query {}'.format(numQuery))
fig.show()