Last active
November 29, 2022 11:50
-
-
Save minrk/ea0c2102ffe3f09165f8970e647b9976 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "06b749e1-90f2-4aa3-9471-77bb564c7f96", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import glob\n", | |
"import pandas as pd\n", | |
"import altair as alt\n", | |
"from altair.expr import datum" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "52b0e009-6038-4a3a-afb2-01f1da94c871", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"frames = []\n", | |
"for pkl in glob.glob(\"*-main.pkl\"):\n", | |
" df = pd.read_pickle(pkl)\n", | |
" df[\"has_index\"] = \"no index\"\n", | |
" frames.append(df)\n", | |
"\n", | |
"for pkl in glob.glob(\"*-metricssss.pkl\"):\n", | |
" df = pd.read_pickle(pkl)\n", | |
" df[\"has_index\"] = \"index\"\n", | |
" frames.append(df)\n", | |
"\n", | |
"df = pd.concat(frames)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "0993e86c-b7be-4a81-8fb4-c470ef1ca91c", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>24h</th>\n", | |
" <th>7d</th>\n", | |
" <th>30d</th>\n", | |
" <th>time</th>\n", | |
" <th>users</th>\n", | |
" <th>db</th>\n", | |
" <th>has_index</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>16</td>\n", | |
" <td>51</td>\n", | |
" <td>73</td>\n", | |
" <td>0.012844</td>\n", | |
" <td>100</td>\n", | |
" <td>postgres</td>\n", | |
" <td>no index</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>16</td>\n", | |
" <td>51</td>\n", | |
" <td>73</td>\n", | |
" <td>0.005290</td>\n", | |
" <td>100</td>\n", | |
" <td>postgres</td>\n", | |
" <td>no index</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>16</td>\n", | |
" <td>51</td>\n", | |
" <td>73</td>\n", | |
" <td>0.003802</td>\n", | |
" <td>100</td>\n", | |
" <td>postgres</td>\n", | |
" <td>no index</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>22</td>\n", | |
" <td>67</td>\n", | |
" <td>107</td>\n", | |
" <td>0.009735</td>\n", | |
" <td>150</td>\n", | |
" <td>postgres</td>\n", | |
" <td>no index</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>22</td>\n", | |
" <td>67</td>\n", | |
" <td>107</td>\n", | |
" <td>0.005233</td>\n", | |
" <td>150</td>\n", | |
" <td>postgres</td>\n", | |
" <td>no index</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>49</th>\n", | |
" <td>11269</td>\n", | |
" <td>29956</td>\n", | |
" <td>49099</td>\n", | |
" <td>0.016288</td>\n", | |
" <td>65409</td>\n", | |
" <td>postgres</td>\n", | |
" <td>index</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>50</th>\n", | |
" <td>11269</td>\n", | |
" <td>29956</td>\n", | |
" <td>49099</td>\n", | |
" <td>0.016571</td>\n", | |
" <td>65409</td>\n", | |
" <td>postgres</td>\n", | |
" <td>index</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>51</th>\n", | |
" <td>16991</td>\n", | |
" <td>45051</td>\n", | |
" <td>73623</td>\n", | |
" <td>0.055377</td>\n", | |
" <td>98113</td>\n", | |
" <td>postgres</td>\n", | |
" <td>index</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>52</th>\n", | |
" <td>16991</td>\n", | |
" <td>45051</td>\n", | |
" <td>73623</td>\n", | |
" <td>0.031337</td>\n", | |
" <td>98113</td>\n", | |
" <td>postgres</td>\n", | |
" <td>index</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>53</th>\n", | |
" <td>16991</td>\n", | |
" <td>45051</td>\n", | |
" <td>73623</td>\n", | |
" <td>0.024112</td>\n", | |
" <td>98113</td>\n", | |
" <td>postgres</td>\n", | |
" <td>index</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>318 rows × 7 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" 24h 7d 30d time users db has_index\n", | |
"0 16 51 73 0.012844 100 postgres no index\n", | |
"1 16 51 73 0.005290 100 postgres no index\n", | |
"2 16 51 73 0.003802 100 postgres no index\n", | |
"3 22 67 107 0.009735 150 postgres no index\n", | |
"4 22 67 107 0.005233 150 postgres no index\n", | |
".. ... ... ... ... ... ... ...\n", | |
"49 11269 29956 49099 0.016288 65409 postgres index\n", | |
"50 11269 29956 49099 0.016571 65409 postgres index\n", | |
"51 16991 45051 73623 0.055377 98113 postgres index\n", | |
"52 16991 45051 73623 0.031337 98113 postgres index\n", | |
"53 16991 45051 73623 0.024112 98113 postgres index\n", | |
"\n", | |
"[318 rows x 7 columns]" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "f4ba80fd-cfb1-4e8b-b405-df564215dd0e", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
"<div id=\"altair-viz-e2aec5d272cf4c989b1f0bde79cf9051\"></div>\n", | |
"<script type=\"text/javascript\">\n", | |
" var VEGA_DEBUG = (typeof VEGA_DEBUG == \"undefined\") ? {} : VEGA_DEBUG;\n", | |
" (function(spec, embedOpt){\n", | |
" let outputDiv = document.currentScript.previousElementSibling;\n", | |
" if (outputDiv.id !== \"altair-viz-e2aec5d272cf4c989b1f0bde79cf9051\") {\n", | |
" outputDiv = document.getElementById(\"altair-viz-e2aec5d272cf4c989b1f0bde79cf9051\");\n", | |
" }\n", | |
" const paths = {\n", | |
" \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n", | |
" \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n", | |
" \"vega-lite\": \"https://cdn.jsdelivr.net/npm//vega-lite@4.17.0?noext\",\n", | |
" \"vega-embed\": \"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\",\n", | |
" };\n", | |
"\n", | |
" function maybeLoadScript(lib, version) {\n", | |
" var key = `${lib.replace(\"-\", \"\")}_version`;\n", | |
" return (VEGA_DEBUG[key] == version) ?\n", | |
" Promise.resolve(paths[lib]) :\n", | |
" new Promise(function(resolve, reject) {\n", | |
" var s = document.createElement('script');\n", | |
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n", | |
" s.async = true;\n", | |
" s.onload = () => {\n", | |
" VEGA_DEBUG[key] = version;\n", | |
" return resolve(paths[lib]);\n", | |
" };\n", | |
" s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n", | |
" s.src = paths[lib];\n", | |
" });\n", | |
" }\n", | |
"\n", | |
" function showError(err) {\n", | |
" outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n", | |
" throw err;\n", | |
" }\n", | |
"\n", | |
" function displayChart(vegaEmbed) {\n", | |
" vegaEmbed(outputDiv, spec, embedOpt)\n", | |
" .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n", | |
" }\n", | |
"\n", | |
" if(typeof define === \"function\" && define.amd) {\n", | |
" requirejs.config({paths});\n", | |
" require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n", | |
" } else {\n", | |
" maybeLoadScript(\"vega\", \"5\")\n", | |
" .then(() => maybeLoadScript(\"vega-lite\", \"4.17.0\"))\n", | |
" .then(() => maybeLoadScript(\"vega-embed\", \"6\"))\n", | |
" .catch(showError)\n", | |
" .then(() => displayChart(vegaEmbed));\n", | |
" }\n", | |
" })({\"config\": {\"view\": {\"continuousWidth\": 400, \"continuousHeight\": 300}}, \"hconcat\": [{\"layer\": [{\"mark\": \"point\", \"encoding\": {\"color\": {\"field\": \"has_index\", \"type\": \"nominal\"}, \"x\": {\"field\": \"users\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}, \"y\": {\"field\": \"time\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}}, \"selection\": {\"selector001\": {\"type\": \"interval\", \"bind\": \"scales\", \"encodings\": [\"x\", \"y\"]}}, \"transform\": [{\"filter\": \"(datum.db === 'postgres')\"}]}, {\"mark\": \"line\", \"encoding\": {\"color\": {\"field\": \"has_index\", \"type\": \"nominal\"}, \"x\": {\"field\": \"users\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}, \"y\": {\"aggregate\": \"mean\", \"field\": \"time\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}}, \"transform\": [{\"filter\": \"(datum.db === 'postgres')\"}]}, {\"mark\": {\"type\": \"errorbar\", \"extent\": \"ci\"}, \"encoding\": {\"color\": {\"field\": \"has_index\", \"type\": \"nominal\"}, \"x\": {\"field\": \"users\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}, \"y\": {\"field\": \"time\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}}, \"transform\": [{\"filter\": \"(datum.db === 'postgres')\"}]}]}, {\"layer\": [{\"mark\": \"point\", \"encoding\": {\"color\": {\"field\": \"has_index\", \"type\": \"nominal\"}, \"x\": {\"field\": \"users\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}, \"y\": {\"field\": \"time\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}}, \"selection\": {\"selector002\": {\"type\": \"interval\", \"bind\": \"scales\", \"encodings\": [\"x\", \"y\"]}}, \"transform\": [{\"filter\": \"(datum.db === 'sqlite')\"}]}, {\"mark\": \"line\", \"encoding\": {\"color\": {\"field\": \"has_index\", \"type\": \"nominal\"}, \"x\": {\"field\": \"users\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}, \"y\": {\"aggregate\": \"mean\", \"field\": \"time\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}}, \"transform\": [{\"filter\": \"(datum.db === 'sqlite')\"}]}, {\"mark\": {\"type\": \"errorbar\", \"extent\": \"ci\"}, \"encoding\": {\"color\": {\"field\": \"has_index\", \"type\": \"nominal\"}, \"x\": {\"field\": \"users\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}, \"y\": {\"field\": \"time\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}}, \"transform\": [{\"filter\": \"(datum.db === 'sqlite')\"}]}]}, {\"layer\": [{\"mark\": \"point\", \"encoding\": {\"color\": {\"field\": \"has_index\", \"type\": \"nominal\"}, \"x\": {\"field\": \"users\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}, \"y\": {\"field\": \"time\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}}, \"selection\": {\"selector003\": {\"type\": \"interval\", \"bind\": \"scales\", \"encodings\": [\"x\", \"y\"]}}, \"transform\": [{\"filter\": \"(datum.db === 'mysql')\"}]}, {\"mark\": \"line\", \"encoding\": {\"color\": {\"field\": \"has_index\", \"type\": \"nominal\"}, \"x\": {\"field\": \"users\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}, \"y\": {\"aggregate\": \"mean\", \"field\": \"time\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}}, \"transform\": [{\"filter\": \"(datum.db === 'mysql')\"}]}, {\"mark\": {\"type\": \"errorbar\", \"extent\": \"ci\"}, \"encoding\": {\"color\": {\"field\": \"has_index\", \"type\": \"nominal\"}, \"x\": {\"field\": \"users\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}, \"y\": {\"field\": \"time\", \"scale\": {\"type\": \"log\"}, \"type\": \"quantitative\"}}, \"transform\": [{\"filter\": \"(datum.db === 'mysql')\"}]}]}], \"data\": {\"name\": \"data-67f4062ec9ac7928e6d51e1b14580d9b\"}, \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.17.0.json\", \"datasets\": {\"data-67f4062ec9ac7928e6d51e1b14580d9b\": [{\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.012843667005654424, \"users\": 100, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.005289707973133773, \"users\": 100, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.0038022090448066592, \"users\": 100, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.009734584018588066, \"users\": 150, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.005233333038631827, \"users\": 150, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.004675332980696112, \"users\": 150, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.010936207952909172, \"users\": 225, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.005112209008075297, \"users\": 225, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.0035445839748717844, \"users\": 225, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.008604458009358495, \"users\": 337, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.01086529198801145, \"users\": 337, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.005835750023834407, \"users\": 337, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.013131749990861863, \"users\": 505, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.009577083983458579, \"users\": 505, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.00720183301018551, \"users\": 505, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.01225595799041912, \"users\": 757, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.009528666036203504, \"users\": 757, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.004614833975210786, \"users\": 757, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.014452959003392607, \"users\": 1135, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.009743374946992844, \"users\": 1135, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.0042396250064484775, \"users\": 1135, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.010093166958540678, \"users\": 1702, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.00518162501975894, \"users\": 1702, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.004529666970483959, \"users\": 1702, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.013398083974607289, \"users\": 2553, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.00623374996939674, \"users\": 2553, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.004885458038188517, \"users\": 2553, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.011349832988344133, \"users\": 3829, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.006824959011282772, \"users\": 3829, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.006040458043571562, \"users\": 3829, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.014654458966106176, \"users\": 5743, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.006333041994366795, \"users\": 5743, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.006043542001862079, \"users\": 5743, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.015325875021517277, \"users\": 8614, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.016909833007957786, \"users\": 8614, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.008298999979160726, \"users\": 8614, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.022731333039700985, \"users\": 12921, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.008890791970770806, \"users\": 12921, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.004533958970569074, \"users\": 12921, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.03041758295148611, \"users\": 19381, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.010044958966318518, \"users\": 19381, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.009212708042468876, \"users\": 19381, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 5078, \"7d\": 13333, \"30d\": 21777, \"time\": 0.02614600001834333, \"users\": 29071, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 5078, \"7d\": 13333, \"30d\": 21777, \"time\": 0.012053249985910952, \"users\": 29071, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 5078, \"7d\": 13333, \"30d\": 21777, \"time\": 0.008057250001002103, \"users\": 29071, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.030276292003691196, \"users\": 43606, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.014779041986912489, \"users\": 43606, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.013044958002865314, \"users\": 43606, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.041675625019706786, \"users\": 65409, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.025886624993290752, \"users\": 65409, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.019721042015589774, \"users\": 65409, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.02581541595282033, \"users\": 98113, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.023692125047091395, \"users\": 98113, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.024885040998924524, \"users\": 98113, \"db\": \"postgres\", \"has_index\": \"no index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.008231541025452316, \"users\": 100, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.002342541003599763, \"users\": 100, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.0015039159916341305, \"users\": 100, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.003997166990302503, \"users\": 150, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.003740791988093406, \"users\": 150, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.0018049160134978592, \"users\": 150, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.00456195801962167, \"users\": 225, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.001422208035364747, \"users\": 225, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.000773874984588474, \"users\": 225, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.004389166017062962, \"users\": 337, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.005074125016108155, \"users\": 337, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.0037083749775774777, \"users\": 337, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.00976545800222084, \"users\": 505, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.003579457988962531, \"users\": 505, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.002043417014647275, \"users\": 505, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.004379916994366795, \"users\": 757, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.00435150001430884, \"users\": 757, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.0026199999847449362, \"users\": 757, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.006762458011507988, \"users\": 1135, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.0036988339852541685, \"users\": 1135, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.003747709037270397, \"users\": 1135, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.006396999990101904, \"users\": 1702, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.007404875010251999, \"users\": 1702, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.005000000004656613, \"users\": 1702, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.0026250830269418657, \"users\": 2553, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.001327292004134506, \"users\": 2553, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.0012699170038104057, \"users\": 2553, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.007807209040038288, \"users\": 3829, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.0036741250078193843, \"users\": 3829, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.003038708004169166, \"users\": 3829, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.008116749988403171, \"users\": 5743, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.0044797079754062, \"users\": 5743, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.00366024998947978, \"users\": 5743, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.00981479202164337, \"users\": 8614, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.005887208040803671, \"users\": 8614, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.004705666971858591, \"users\": 8614, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.014196333009749651, \"users\": 12921, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.00688558304682374, \"users\": 12921, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.005589500011410564, \"users\": 12921, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.016114500002004206, \"users\": 19381, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.010393749980721623, \"users\": 19381, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.007671166968066245, \"users\": 19381, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 5078, \"7d\": 13334, \"30d\": 21777, \"time\": 0.018047792022116482, \"users\": 29071, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 5078, \"7d\": 13334, \"30d\": 21777, \"time\": 0.014385083981323987, \"users\": 29071, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 5078, \"7d\": 13334, \"30d\": 21777, \"time\": 0.012417041987646371, \"users\": 29071, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.03098049998516217, \"users\": 43606, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.011616583971772343, \"users\": 43606, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.01032691600266844, \"users\": 43606, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.047620999976061285, \"users\": 65409, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.027140291989780962, \"users\": 65409, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.020772291987668723, \"users\": 65409, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.04228962503839284, \"users\": 98113, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.02541458304040134, \"users\": 98113, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.027521709038410336, \"users\": 98113, \"db\": \"sqlite\", \"has_index\": \"no index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.02012974995886907, \"users\": 100, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.009462542016990483, \"users\": 100, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.004953292023856193, \"users\": 100, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.02186645899200812, \"users\": 150, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.014920375018846244, \"users\": 150, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.006263917020987719, \"users\": 150, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.01663562498288229, \"users\": 225, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.010903458984103054, \"users\": 225, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.004166708036791533, \"users\": 225, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.009180666995234787, \"users\": 337, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.0038546250434592366, \"users\": 337, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.0031573750311508775, \"users\": 337, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.01642041699960828, \"users\": 505, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.006988083012402058, \"users\": 505, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.0059792090323753655, \"users\": 505, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.013448000012431294, \"users\": 757, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.007735000050161034, \"users\": 757, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.006568249955307692, \"users\": 757, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.015092208981513977, \"users\": 1135, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.012273708009161055, \"users\": 1135, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.004919791012071073, \"users\": 1135, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.022743457986507565, \"users\": 1702, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.012511625012848526, \"users\": 1702, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.007747832976747304, \"users\": 1702, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.015792749996762723, \"users\": 2553, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.009011916990857571, \"users\": 2553, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.005243708030320704, \"users\": 2553, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.019527791999280453, \"users\": 3829, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.011052750051021576, \"users\": 3829, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.005651749961543828, \"users\": 3829, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.02382420899812132, \"users\": 5743, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.007202124979812652, \"users\": 5743, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.009812749980483204, \"users\": 5743, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.024399208021350205, \"users\": 8614, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.011009124980773777, \"users\": 8614, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.010884749994147569, \"users\": 8614, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 2246, \"7d\": 5919, \"30d\": 9632, \"time\": 0.03966875001788139, \"users\": 12921, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 2246, \"7d\": 5919, \"30d\": 9632, \"time\": 0.015100083022844046, \"users\": 12921, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 2246, \"7d\": 5919, \"30d\": 9632, \"time\": 0.015021749946754426, \"users\": 12921, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 3419, \"7d\": 8968, \"30d\": 14526, \"time\": 0.0328315410297364, \"users\": 19381, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 3419, \"7d\": 8968, \"30d\": 14526, \"time\": 0.009937708964571357, \"users\": 19381, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 3419, \"7d\": 8968, \"30d\": 14526, \"time\": 0.01012079103384167, \"users\": 19381, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 5078, \"7d\": 13332, \"30d\": 21777, \"time\": 0.04196258296724409, \"users\": 29071, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 5078, \"7d\": 13332, \"30d\": 21777, \"time\": 0.013925999985076487, \"users\": 29071, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 5078, \"7d\": 13332, \"30d\": 21777, \"time\": 0.015405583952087909, \"users\": 29071, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 7613, \"7d\": 19975, \"30d\": 32746, \"time\": 0.03377762500895187, \"users\": 43606, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 7613, \"7d\": 19975, \"30d\": 32746, \"time\": 0.019002916989848018, \"users\": 43606, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 7613, \"7d\": 19975, \"30d\": 32746, \"time\": 0.019351291994098574, \"users\": 43606, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 11266, \"7d\": 29955, \"30d\": 49099, \"time\": 0.06047366600250825, \"users\": 65409, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 11266, \"7d\": 29955, \"30d\": 49099, \"time\": 0.028661083022598177, \"users\": 65409, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 11266, \"7d\": 29955, \"30d\": 49099, \"time\": 0.026058084040414542, \"users\": 65409, \"db\": \"mysql\", \"has_index\": \"no index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.017057291988749057, \"users\": 100, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.015185625001322478, \"users\": 100, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.005766749964095652, \"users\": 100, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.02419512497726828, \"users\": 150, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.009647667000535876, \"users\": 150, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.004497499961871654, \"users\": 150, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.0164794169832021, \"users\": 225, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.009613666974473745, \"users\": 225, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.003981333982665092, \"users\": 225, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.013173542043659836, \"users\": 337, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.015185499971266836, \"users\": 337, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.009183208050671965, \"users\": 337, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.023248500016052276, \"users\": 505, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.007299874967429787, \"users\": 505, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.005273541028145701, \"users\": 505, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.012964166991878301, \"users\": 757, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.013975874986499548, \"users\": 757, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.0068764169700443745, \"users\": 757, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.014371833007317036, \"users\": 1135, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.01485691696871072, \"users\": 1135, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.007145625015255064, \"users\": 1135, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.013635832990985364, \"users\": 1702, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.014084333961363882, \"users\": 1702, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.007330333988647908, \"users\": 1702, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.019423708028625697, \"users\": 2553, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.007118000008631498, \"users\": 2553, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.006539749971125275, \"users\": 2553, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.016329584002960473, \"users\": 3829, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.013820791034959257, \"users\": 3829, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.005647375015541911, \"users\": 3829, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.020517167053185403, \"users\": 5743, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.013150000013411045, \"users\": 5743, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.009497750026639551, \"users\": 5743, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.014630999998189509, \"users\": 8614, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.009062749973963946, \"users\": 8614, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.0072395000024698675, \"users\": 8614, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 2246, \"7d\": 5919, \"30d\": 9632, \"time\": 0.015222708985675126, \"users\": 12921, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 2246, \"7d\": 5919, \"30d\": 9632, \"time\": 0.025280000001657754, \"users\": 12921, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 2246, \"7d\": 5919, \"30d\": 9632, \"time\": 0.016783208993729204, \"users\": 12921, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 3419, \"7d\": 8968, \"30d\": 14526, \"time\": 0.034462165960576385, \"users\": 19381, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 3419, \"7d\": 8968, \"30d\": 14526, \"time\": 0.0108477080357261, \"users\": 19381, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 3419, \"7d\": 8968, \"30d\": 14526, \"time\": 0.012077083985786885, \"users\": 19381, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 5078, \"7d\": 13332, \"30d\": 21777, \"time\": 0.03240308299427852, \"users\": 29071, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 5078, \"7d\": 13332, \"30d\": 21777, \"time\": 0.014124499983154237, \"users\": 29071, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 5078, \"7d\": 13332, \"30d\": 21777, \"time\": 0.0199479169677943, \"users\": 29071, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 7613, \"7d\": 19975, \"30d\": 32746, \"time\": 0.03588929201941937, \"users\": 43606, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 7613, \"7d\": 19975, \"30d\": 32746, \"time\": 0.019090000016149133, \"users\": 43606, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 7613, \"7d\": 19975, \"30d\": 32746, \"time\": 0.01901574997464195, \"users\": 43606, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 11266, \"7d\": 29955, \"30d\": 49099, \"time\": 0.03871183400042355, \"users\": 65409, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 11266, \"7d\": 29955, \"30d\": 49099, \"time\": 0.025891542027238756, \"users\": 65409, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 11266, \"7d\": 29955, \"30d\": 49099, \"time\": 0.025851375015918165, \"users\": 65409, \"db\": \"mysql\", \"has_index\": \"index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.008508790982887149, \"users\": 100, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.0037886250065639615, \"users\": 100, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.0026087500154972076, \"users\": 100, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.005397667002398521, \"users\": 150, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.0072695419657975435, \"users\": 150, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.004964583029504865, \"users\": 150, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.004344249959103763, \"users\": 225, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.006877249979879707, \"users\": 225, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.0029992919880896807, \"users\": 225, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.009180874971207231, \"users\": 337, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.005461416963953525, \"users\": 337, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.001895208959467709, \"users\": 337, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.003902749973349273, \"users\": 505, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.004036792030092329, \"users\": 505, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.00242770800832659, \"users\": 505, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.004270999983418733, \"users\": 757, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.005842790997121483, \"users\": 757, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.0020999579573981464, \"users\": 757, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.0055364169529639184, \"users\": 1135, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.004172709013801068, \"users\": 1135, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.0031876250286586583, \"users\": 1135, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.006969375011976808, \"users\": 1702, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.0045607080101035535, \"users\": 1702, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.0026064160047098994, \"users\": 1702, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.00554033403750509, \"users\": 2553, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.0013543330132961273, \"users\": 2553, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.000981291988864541, \"users\": 2553, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.0069720830069854856, \"users\": 3829, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.00375670799985528, \"users\": 3829, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.003010915999766439, \"users\": 3829, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.0074817080167122185, \"users\": 5743, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.0032760000322014093, \"users\": 5743, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.0042409999878145754, \"users\": 5743, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.009753290971275419, \"users\": 8614, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.011837958008982241, \"users\": 8614, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.00270175002515316, \"users\": 8614, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.01298812497407198, \"users\": 12921, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.012166291999164969, \"users\": 12921, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.0027546670171432197, \"users\": 12921, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.021597417013254017, \"users\": 19381, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.007079041970428079, \"users\": 19381, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.004895542049780488, \"users\": 19381, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 5078, \"7d\": 13334, \"30d\": 21777, \"time\": 0.029842625022865832, \"users\": 29071, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 5078, \"7d\": 13334, \"30d\": 21777, \"time\": 0.009944749996066093, \"users\": 29071, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 5078, \"7d\": 13334, \"30d\": 21777, \"time\": 0.007455291983205825, \"users\": 29071, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.032064541010186076, \"users\": 43606, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.012670124997384846, \"users\": 43606, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.011471124948002398, \"users\": 43606, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.034576875041238964, \"users\": 65409, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.016963667003437877, \"users\": 65409, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.017853249970357865, \"users\": 65409, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.0459270830033347, \"users\": 98113, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.027495416987221688, \"users\": 98113, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.03038291702978313, \"users\": 98113, \"db\": \"sqlite\", \"has_index\": \"index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.023458124953322113, \"users\": 100, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.007882750011049211, \"users\": 100, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 16, \"7d\": 51, \"30d\": 73, \"time\": 0.003377332992386073, \"users\": 100, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.013373875000979751, \"users\": 150, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.00882620899938047, \"users\": 150, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 22, \"7d\": 67, \"30d\": 107, \"time\": 0.0024486250476911664, \"users\": 150, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.02832550002494827, \"users\": 225, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.007987999997567385, \"users\": 225, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 34, \"7d\": 105, \"30d\": 164, \"time\": 0.004329416959080845, \"users\": 225, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.010411291965283453, \"users\": 337, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.02338441595202312, \"users\": 337, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 51, \"7d\": 157, \"30d\": 249, \"time\": 0.00324887502938509, \"users\": 337, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.010650999960489571, \"users\": 505, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.008848708996083587, \"users\": 505, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 80, \"7d\": 237, \"30d\": 370, \"time\": 0.004833749961107969, \"users\": 505, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.01700058300048113, \"users\": 757, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.01559020800050348, \"users\": 757, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 124, \"7d\": 357, \"30d\": 550, \"time\": 0.004346291010733694, \"users\": 757, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.01703216601163149, \"users\": 1135, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.007270333997439593, \"users\": 1135, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 190, \"7d\": 514, \"30d\": 823, \"time\": 0.002885500027332455, \"users\": 1135, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.014060165965929627, \"users\": 1702, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.0066904170089401305, \"users\": 1702, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 296, \"7d\": 788, \"30d\": 1250, \"time\": 0.004143750004004687, \"users\": 1702, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.015731207968201488, \"users\": 2553, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.016034958011005074, \"users\": 2553, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 464, \"7d\": 1169, \"30d\": 1890, \"time\": 0.004813916981220245, \"users\": 2553, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.012364082969725132, \"users\": 3829, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.009491249977145344, \"users\": 3829, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 694, \"7d\": 1723, \"30d\": 2856, \"time\": 0.005638000031467527, \"users\": 3829, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.014649915974587202, \"users\": 5743, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.009989832993596792, \"users\": 5743, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 1046, \"7d\": 2645, \"30d\": 4281, \"time\": 0.004334541969001293, \"users\": 5743, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.0184612920274958, \"users\": 8614, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.010720833030063659, \"users\": 8614, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 1532, \"7d\": 3935, \"30d\": 6400, \"time\": 0.006161042023450136, \"users\": 8614, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.018070375022944063, \"users\": 12921, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.012882125040050596, \"users\": 12921, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 2246, \"7d\": 5920, \"30d\": 9632, \"time\": 0.004490624996833503, \"users\": 12921, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.022482374974060804, \"users\": 19381, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.006214249995537102, \"users\": 19381, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 3419, \"7d\": 8969, \"30d\": 14526, \"time\": 0.006355832971166819, \"users\": 19381, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 5078, \"7d\": 13334, \"30d\": 21777, \"time\": 0.025967374967876822, \"users\": 29071, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 5078, \"7d\": 13334, \"30d\": 21777, \"time\": 0.009381291980389506, \"users\": 29071, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 5078, \"7d\": 13334, \"30d\": 21777, \"time\": 0.007859999954234809, \"users\": 29071, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.033447083027567714, \"users\": 43606, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.012083083973266184, \"users\": 43606, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 7614, \"7d\": 19977, \"30d\": 32746, \"time\": 0.011778624961152673, \"users\": 43606, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.037195916986092925, \"users\": 65409, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.016287750040646642, \"users\": 65409, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 11269, \"7d\": 29956, \"30d\": 49099, \"time\": 0.016570958017837256, \"users\": 65409, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.055376833013724536, \"users\": 98113, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.031336708983872086, \"users\": 98113, \"db\": \"postgres\", \"has_index\": \"index\"}, {\"24h\": 16991, \"7d\": 45051, \"30d\": 73623, \"time\": 0.024112499959301203, \"users\": 98113, \"db\": \"postgres\", \"has_index\": \"index\"}]}}, {\"mode\": \"vega-lite\"});\n", | |
"</script>" | |
], | |
"text/plain": [ | |
"alt.HConcatChart(...)" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"charts = alt.hconcat()\n", | |
"base_chart = alt.Chart(df).encode(\n", | |
" x=alt.X(\"users\", scale=alt.Scale(type=\"log\")),\n", | |
" y=alt.Y(\"time\", scale=alt.Scale(type=\"log\")),\n", | |
" color=\"has_index\",\n", | |
")\n", | |
"for db in df.db.unique():\n", | |
" chart = base_chart.transform_filter(datum.db == db)\n", | |
" points = chart.mark_point().encode()\n", | |
" line = chart.mark_line().encode(\n", | |
" y=alt.Y(\"mean(time)\", scale=alt.Scale(type=\"log\")),\n", | |
" )\n", | |
" bar = chart.mark_errorbar(extent=\"ci\")\n", | |
" charts |= (points + line + bar).interactive()\n", | |
"charts" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.10.4" | |
}, | |
"widgets": { | |
"application/vnd.jupyter.widget-state+json": { | |
"state": {}, | |
"version_major": 2, | |
"version_minor": 0 | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
Run with: | |
export PGHOST=127.0.0.1 | |
export MYSQL_HOST=127.0.0.1 | |
export PGUSER=user | |
export PGPASSWORD=pass | |
for DB in postgres mysql; do | |
export DB | |
bash ci/docker-db.sh | |
bash ci/init-db.sh | |
done | |
for branch in main metricssss; do | |
git switch $branch | |
for DB in sqlite postgres mysql; do | |
export DB | |
if [ $DB != sqlite ]; then | |
bash ci/docker-db.sh | |
bash ci/init-db.sh | |
fi | |
python profile_index.py -f ${DB}-${branch}.pkl | |
done | |
done | |
""" | |
import os | |
import tempfile | |
import time | |
from datetime import datetime, timedelta | |
from functools import partial | |
from urllib.parse import quote | |
import click | |
import numpy as np | |
import pandas as pd | |
from jupyterhub import orm | |
# user distribution: | |
# 30% chance uniformly in the last 2 days | |
# 20% chance uniformly in the last 2 weeks | |
# 50% chance uniformly in the last 2 months | |
# that should gives return counts: | |
# 30-day: 75% of users | |
# 7-day: 46% | |
# 1-day: 32% | |
HOURS = 3600 | |
DAYS = 24 * HOURS | |
WEEKS = 7 * DAYS | |
MONTHS = 30 * DAYS | |
ago_weights = { | |
2 * DAYS: 0.3, | |
2 * WEEKS: 0.2, | |
2 * MONTHS: 0.5, | |
} | |
user_counter = 0 | |
np.random.seed(1) | |
def populate_db(db, user_count): | |
global user_counter | |
have_users = db.query(orm.User).count() | |
# rely on dict ordering | |
offset_choices = list(ago_weights.keys()) | |
weights = list(ago_weights.values()) | |
new_users = user_count - have_users | |
offsets = np.random.choice( | |
offset_choices, size=new_users, p=weights | |
) * np.random.random(size=new_users) | |
now = datetime.utcnow() | |
for offset in offsets: | |
user = orm.User(name=f"test-{user_counter}") | |
user_counter += 1 | |
seconds = offset | |
user.last_activity = now - timedelta(seconds=int(offset)) | |
db.add(user) | |
db.commit() | |
def run_query(db): | |
now = datetime.utcnow() | |
cutoffs = { | |
"24h": now - timedelta(hours=24), | |
"7d": now - timedelta(days=7), | |
"30d": now - timedelta(days=30), | |
} | |
sample = {} | |
for period, cutoff in cutoffs.items(): | |
value = db.query(orm.User).filter(orm.User.last_activity >= cutoff).count() | |
sample[period] = value | |
return sample | |
def time_one(f, min_samples=3, max_time=1, max_samples=20): | |
start = toc = time.perf_counter() | |
samples = 0 | |
while samples < min_samples and samples < max_samples and toc - start < max_time: | |
tic = time.perf_counter() | |
sample = f() | |
toc = time.perf_counter() | |
t = toc - tic | |
sample["time"] = t | |
yield sample | |
samples += 1 | |
def collect_data(max_n=100_000, max_runtime=60, scale=1.5): | |
records = [] | |
start = time.perf_counter() | |
start_users = total_users = 100 | |
db_type = os.environ.get("DB", "sqlite") | |
try: | |
with tempfile.TemporaryDirectory() as td: | |
# db and env initialized via jupyterhub ci/docker-db.sh | |
if db_type == "sqlite": | |
db_url = f"sqlite:///{td}/test.sqlite" | |
elif db_type == "postgres": | |
db_url = f"postgresql://{os.environ['PGUSER']}:{quote(os.environ['PGPASSWORD'])}@{os.environ['PGHOST']}:5432/jupyterhub" | |
elif db_type == "mysql": | |
db_url = f"mysql+mysqlconnector://root@{os.environ['MYSQL_HOST']}:3306/jupyterhub" | |
db = orm.new_session_factory(db_url)() | |
# delete all users to start | |
have_users = db.query(orm.User).count() | |
if have_users: | |
print(f"Deleting {have_users} users") | |
sql = orm.User.__table__.delete() | |
db.execute(sql) | |
have_users = db.query(orm.User).count() | |
assert have_users == 0 | |
f = partial(run_query, db) | |
while time.perf_counter() - start < max_runtime and total_users < max_n: | |
populate_db(db, total_users) | |
time.sleep(1) | |
for sample in time_one(f): | |
sample["users"] = total_users | |
sample["db"] = db_type | |
print(f"{sample}") | |
records.append(sample) | |
total_users = int(scale * total_users) | |
except KeyboardInterrupt: | |
return records | |
return records | |
@click.command() | |
@click.option( | |
"--fname", "-f", default="samples.pkl", help="filename to save dataframe to" | |
) | |
@click.option("--max-n", "-n", default=100_000, help="Max number of users") | |
@click.option("--max-runtime", "-t", default=60, help="Max time to run") | |
@click.option( | |
"--scale", | |
"-s", | |
default=1.5, | |
help="Scale number of users between samples (1.5 = increase by 50% each run)", | |
) | |
def main(fname, max_n, max_runtime, scale): | |
db = os.environ.get("DB", "sqlite") | |
print(f"{fname=}, {max_n=}, {max_runtime=}, {scale=}, {db=}") | |
records = collect_data(max_n=max_n, max_runtime=max_runtime, scale=scale) | |
df = pd.DataFrame.from_dict(records) | |
df.to_pickle(fname) | |
print(f"Wrote {fname}, read with `pandas.from_pickle('{fname}')") | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment