Skip to content

Instantly share code, notes, and snippets.

@minrk
Last active November 29, 2022 11:50
Show Gist options
  • Save minrk/ea0c2102ffe3f09165f8970e647b9976 to your computer and use it in GitHub Desktop.
Save minrk/ea0c2102ffe3f09165f8970e647b9976 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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-6dfe741a383044dfa920b8855f929e5a\"></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-6dfe741a383044dfa920b8855f929e5a\") {\n",
" outputDiv = document.getElementById(\"altair-viz-6dfe741a383044dfa920b8855f929e5a\");\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\"]}}, \"title\": \"postgres\", \"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\"}}, \"title\": \"postgres\", \"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\"}}, \"title\": \"postgres\", \"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\"]}}, \"title\": \"sqlite\", \"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\"}}, \"title\": \"sqlite\", \"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\"}}, \"title\": \"sqlite\", \"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\"]}}, \"title\": \"mysql\", \"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\"}}, \"title\": \"mysql\", \"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\"}}, \"title\": \"mysql\", \"transform\": [{\"filter\": \"(datum.db === 'mysql')\"}]}]}], \"data\": {\"name\": \"data-67f4062ec9ac7928e6d51e1b14580d9b\"}, \"resolve\": {\"scale\": {\"y\": \"shared\"}}, \"$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().resolve_scale(y='shared')\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",
" chart.title = 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
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
"""
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