From 903a7d61c5e406fe0bda4e4adc881dc28802bad3 Mon Sep 17 00:00:00 2001 From: Ayush Goyal Date: Thu, 5 Nov 2020 14:08:16 +0530 Subject: [PATCH 1/2] Support adding explain output for slow query in JSON report as well --- bin/pt-query-digest | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/pt-query-digest b/bin/pt-query-digest index 8716e94b..7d3f4a4f 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -8073,6 +8073,7 @@ override query_report => sub { : undef; my $fingerprint = substr($item, 0, $self->max_fingerprint_length); my $checksum = make_checksum($item); + my $explain = $self->explain_report($sample->{arg}, $sample->{db}); my $class = { checksum => $checksum, fingerprint => $fingerprint, @@ -8084,6 +8085,8 @@ override query_report => sub { query => substr($sample->{arg}, 0, $self->max_query_length), ts => $sample->{ts} ? parse_timestamp($sample->{ts}) : undef, Query_time => $sample->{Query_time}, + $explain ? + ( explain => $explain ): (), }, ), }; From 17820dbf23fbc744e31e12272b66e38f8f1dc951 Mon Sep 17 00:00:00 2001 From: Sveta Smirnova Date: Mon, 6 Nov 2023 17:21:28 +0300 Subject: [PATCH 2/2] PR-471 - Support adding explain output for slow query in JSON report as well - Put fix into the proper place - Added test cases --- bin/pt-query-digest | 2 +- lib/JSONReportFormatter.pm | 3 + t/pt-query-digest/explain.t | 41 ++++ .../samples/slow007_explain_json_1-57.txt | 216 ++++++++++++++++++ .../samples/slow007_explain_json_1-80.txt | 216 ++++++++++++++++++ .../samples/slow007_explain_json_2-57.txt | 216 ++++++++++++++++++ .../samples/slow007_explain_json_2-80.txt | 216 ++++++++++++++++++ 7 files changed, 909 insertions(+), 1 deletion(-) create mode 100644 t/pt-query-digest/samples/slow007_explain_json_1-57.txt create mode 100644 t/pt-query-digest/samples/slow007_explain_json_1-80.txt create mode 100644 t/pt-query-digest/samples/slow007_explain_json_2-57.txt create mode 100644 t/pt-query-digest/samples/slow007_explain_json_2-80.txt diff --git a/bin/pt-query-digest b/bin/pt-query-digest index 8cc7b4d6..5d9480df 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -8080,7 +8080,7 @@ override query_report => sub { ts => $sample->{ts} ? parse_timestamp($sample->{ts}) : undef, Query_time => $sample->{Query_time}, $explain ? - ( explain => $explain ): (), + ( explain => $explain ): (), }, ), }; diff --git a/lib/JSONReportFormatter.pm b/lib/JSONReportFormatter.pm index 4de5ce48..8e4fab85 100644 --- a/lib/JSONReportFormatter.pm +++ b/lib/JSONReportFormatter.pm @@ -241,6 +241,7 @@ override query_report => sub { : undef; my $fingerprint = substr($item, 0, $self->max_fingerprint_length); my $checksum = make_checksum($item); + my $explain = $self->explain_report($sample->{arg}, $sample->{db}); my $class = { checksum => $checksum, fingerprint => $fingerprint, @@ -252,6 +253,8 @@ override query_report => sub { query => substr($sample->{arg}, 0, $self->max_query_length), ts => $sample->{ts} ? parse_timestamp($sample->{ts}) : undef, Query_time => $sample->{Query_time}, + $explain ? + ( explain => $explain ): (), }, ), }; diff --git a/t/pt-query-digest/explain.t b/t/pt-query-digest/explain.t index 52e8b82d..01ec86d1 100644 --- a/t/pt-query-digest/explain.t +++ b/t/pt-query-digest/explain.t @@ -45,6 +45,27 @@ ok( ), 'Analysis for slow007 with --explain, no rows', ); + +# output=json + +SKIP: { + skip "output=json tests require 5.7" unless $sandbox_version ge '5.7'; + my $jq = `which jq`; + chomp $jq; + skip "output=json tests require jq" unless -x "$jq"; + + ok( + no_diff( + sub { pt_query_digest::main(@args, '--output=json', + "$trunk/t/lib/samples/slowlogs/slow007.txt") }, + ( $sandbox_version ge '8.0' ? "t/pt-query-digest/samples/slow007_explain_json_1-80.txt" + : "t/pt-query-digest/samples/slow007_explain_json_1-57.txt"), + post_pipe => 'jq -S .', + ), + 'Analysis for slow007 with --explain and --output=json, no rows', + ); +} + # Normalish output from EXPLAIN. $dbh->do("insert into trees values ('apple'),('orange'),('banana')"); @@ -60,6 +81,26 @@ ok( 'Analysis for slow007 with --explain', ); +# output=json + +SKIP: { + skip "output=json tests require 5.7" unless $sandbox_version ge '5.7'; + my $jq = `which jq`; + chomp $jq; + skip "output=json tests require jq" unless -x "$jq"; + + ok( + no_diff( + sub { pt_query_digest::main(@args, '--output=json', + "$trunk/t/lib/samples/slowlogs/slow007.txt") }, + ( $sandbox_version ge '8.0' ? "t/pt-query-digest/samples/slow007_explain_json_2-80.txt" + : "t/pt-query-digest/samples/slow007_explain_json_2-57.txt"), + post_pipe => 'jq -S .', + ), + 'Analysis for slow007 with --explain and --output=json', + ); +} + # ############################################################################# # Issue 1141: Add "spark charts" to mk-query-digest profile # ############################################################################# diff --git a/t/pt-query-digest/samples/slow007_explain_json_1-57.txt b/t/pt-query-digest/samples/slow007_explain_json_1-57.txt new file mode 100644 index 00000000..154d8436 --- /dev/null +++ b/t/pt-query-digest/samples/slow007_explain_json_1-57.txt @@ -0,0 +1,216 @@ +{ + "classes": [ + { + "attribute": "fingerprint", + "checksum": "88F3D65BE48113F18E306CDB7A800841", + "distillate": "SELECT trees", + "example": { + "Query_time": "0.000012", + "explain": "# *************************** 1. row ***************************\n# id: 1\n# select_type: SIMPLE\n# table: trees\n# partitions: NULL\n# type: index\n# possible_keys: NULL\n# key: fruit\n# key_len: 27\n# ref: NULL\n# rows: 1\n# filtered: 100.00\n# Extra: Using index\n", + "query": "SELECT fruit FROM trees", + "ts": "2007-12-18 11:48:27" + }, + "fingerprint": "select fruit from trees", + "histograms": { + "Query_time": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "metrics": { + "Filesort": { + "yes": "0" + }, + "Filesort_on_disk": { + "yes": "0" + }, + "Full_join": { + "yes": "0" + }, + "Full_scan": { + "yes": "0" + }, + "Lock_time": { + "avg": "0.000000", + "max": "0.000000", + "median": "0.000000", + "min": "0.000000", + "pct": "1.000000", + "pct_95": "0.000000", + "stddev": "0.000000", + "sum": "0.000000" + }, + "Merge_passes": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "QC_Hit": { + "yes": "0" + }, + "Query_length": { + "avg": "23", + "max": "23", + "median": "23", + "min": "23", + "pct": "1", + "pct_95": "23", + "stddev": "0", + "sum": "23" + }, + "Query_time": { + "avg": "0.000012", + "max": "0.000012", + "median": "0.000012", + "min": "0.000012", + "pct": "1.000000", + "pct_95": "0.000012", + "stddev": "0.000000", + "sum": "0.000012" + }, + "Rows_examined": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Rows_sent": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Tmp_table": { + "yes": "0" + }, + "Tmp_table_on_disk": { + "yes": "0" + }, + "db": { + "value": "food" + }, + "host": { + "value": "" + }, + "user": { + "value": "[SQL_SLAVE]" + } + }, + "query_count": 1, + "tables": [ + { + "create": "SHOW CREATE TABLE `food`.`trees`\\G", + "status": "SHOW TABLE STATUS FROM `food` LIKE 'trees'\\G" + } + ], + "ts_max": "2007-12-18 11:48:27", + "ts_min": "2007-12-18 11:48:27" + } + ], + "global": { + "files": [ + { + "name": "/home/sveta/src/percona/percona-toolkit/t/lib/samples/slowlogs/slow007.txt", + "size": 368 + } + ], + "metrics": { + "Filesort": { + "cnt": "0" + }, + "Filesort_on_disk": { + "cnt": "0" + }, + "Full_join": { + "cnt": "0" + }, + "Full_scan": { + "cnt": "0" + }, + "Lock_time": { + "avg": "0.000000", + "max": "0.000000", + "median": "0.000000", + "min": "0.000000", + "pct_95": "0.000000", + "stddev": "0.000000", + "sum": "0.000000" + }, + "Merge_passes": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "QC_Hit": { + "cnt": "0" + }, + "Query_length": { + "avg": "23", + "max": "23", + "median": "23", + "min": "23", + "pct_95": "23", + "stddev": "0", + "sum": "23" + }, + "Query_time": { + "avg": "0.000012", + "max": "0.000012", + "median": "0.000012", + "min": "0.000012", + "pct_95": "0.000012", + "stddev": "0.000000", + "sum": "0.000012" + }, + "Rows_examined": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Rows_sent": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Tmp_table": { + "cnt": "0" + }, + "Tmp_table_on_disk": { + "cnt": "0" + } + }, + "query_count": 1, + "unique_query_count": 1 + } +} diff --git a/t/pt-query-digest/samples/slow007_explain_json_1-80.txt b/t/pt-query-digest/samples/slow007_explain_json_1-80.txt new file mode 100644 index 00000000..40f18082 --- /dev/null +++ b/t/pt-query-digest/samples/slow007_explain_json_1-80.txt @@ -0,0 +1,216 @@ +{ + "classes": [ + { + "attribute": "fingerprint", + "checksum": "88F3D65BE48113F18E306CDB7A800841", + "distillate": "SELECT trees", + "example": { + "Query_time": "0.000012", + "explain": "# *************************** 1. row ***************************\n# id: 1\n# select_type: SIMPLE\n# table: trees\n# partitions: NULL\n# type: index\n# possible_keys: NULL\n# key: fruit\n# key_len: 99\n# ref: NULL\n# rows: 1\n# filtered: 100.00\n# Extra: Using index\n", + "query": "SELECT fruit FROM trees", + "ts": "2007-12-18 11:48:27" + }, + "fingerprint": "select fruit from trees", + "histograms": { + "Query_time": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "metrics": { + "Filesort": { + "yes": "0" + }, + "Filesort_on_disk": { + "yes": "0" + }, + "Full_join": { + "yes": "0" + }, + "Full_scan": { + "yes": "0" + }, + "Lock_time": { + "avg": "0.000000", + "max": "0.000000", + "median": "0.000000", + "min": "0.000000", + "pct": "1.000000", + "pct_95": "0.000000", + "stddev": "0.000000", + "sum": "0.000000" + }, + "Merge_passes": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "QC_Hit": { + "yes": "0" + }, + "Query_length": { + "avg": "23", + "max": "23", + "median": "23", + "min": "23", + "pct": "1", + "pct_95": "23", + "stddev": "0", + "sum": "23" + }, + "Query_time": { + "avg": "0.000012", + "max": "0.000012", + "median": "0.000012", + "min": "0.000012", + "pct": "1.000000", + "pct_95": "0.000012", + "stddev": "0.000000", + "sum": "0.000012" + }, + "Rows_examined": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Rows_sent": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Tmp_table": { + "yes": "0" + }, + "Tmp_table_on_disk": { + "yes": "0" + }, + "db": { + "value": "food" + }, + "host": { + "value": "" + }, + "user": { + "value": "[SQL_SLAVE]" + } + }, + "query_count": 1, + "tables": [ + { + "create": "SHOW CREATE TABLE `food`.`trees`\\G", + "status": "SHOW TABLE STATUS FROM `food` LIKE 'trees'\\G" + } + ], + "ts_max": "2007-12-18 11:48:27", + "ts_min": "2007-12-18 11:48:27" + } + ], + "global": { + "files": [ + { + "name": "/home/sveta/src/percona/percona-toolkit/t/lib/samples/slowlogs/slow007.txt", + "size": 368 + } + ], + "metrics": { + "Filesort": { + "cnt": "0" + }, + "Filesort_on_disk": { + "cnt": "0" + }, + "Full_join": { + "cnt": "0" + }, + "Full_scan": { + "cnt": "0" + }, + "Lock_time": { + "avg": "0.000000", + "max": "0.000000", + "median": "0.000000", + "min": "0.000000", + "pct_95": "0.000000", + "stddev": "0.000000", + "sum": "0.000000" + }, + "Merge_passes": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "QC_Hit": { + "cnt": "0" + }, + "Query_length": { + "avg": "23", + "max": "23", + "median": "23", + "min": "23", + "pct_95": "23", + "stddev": "0", + "sum": "23" + }, + "Query_time": { + "avg": "0.000012", + "max": "0.000012", + "median": "0.000012", + "min": "0.000012", + "pct_95": "0.000012", + "stddev": "0.000000", + "sum": "0.000012" + }, + "Rows_examined": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Rows_sent": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Tmp_table": { + "cnt": "0" + }, + "Tmp_table_on_disk": { + "cnt": "0" + } + }, + "query_count": 1, + "unique_query_count": 1 + } +} diff --git a/t/pt-query-digest/samples/slow007_explain_json_2-57.txt b/t/pt-query-digest/samples/slow007_explain_json_2-57.txt new file mode 100644 index 00000000..bbcf32b4 --- /dev/null +++ b/t/pt-query-digest/samples/slow007_explain_json_2-57.txt @@ -0,0 +1,216 @@ +{ + "classes": [ + { + "attribute": "fingerprint", + "checksum": "88F3D65BE48113F18E306CDB7A800841", + "distillate": "SELECT trees", + "example": { + "Query_time": "0.000012", + "explain": "# *************************** 1. row ***************************\n# id: 1\n# select_type: SIMPLE\n# table: trees\n# partitions: NULL\n# type: index\n# possible_keys: NULL\n# key: fruit\n# key_len: 27\n# ref: NULL\n# rows: 3\n# filtered: 100.00\n# Extra: Using index\n", + "query": "SELECT fruit FROM trees", + "ts": "2007-12-18 11:48:27" + }, + "fingerprint": "select fruit from trees", + "histograms": { + "Query_time": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "metrics": { + "Filesort": { + "yes": "0" + }, + "Filesort_on_disk": { + "yes": "0" + }, + "Full_join": { + "yes": "0" + }, + "Full_scan": { + "yes": "0" + }, + "Lock_time": { + "avg": "0.000000", + "max": "0.000000", + "median": "0.000000", + "min": "0.000000", + "pct": "1.000000", + "pct_95": "0.000000", + "stddev": "0.000000", + "sum": "0.000000" + }, + "Merge_passes": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "QC_Hit": { + "yes": "0" + }, + "Query_length": { + "avg": "23", + "max": "23", + "median": "23", + "min": "23", + "pct": "1", + "pct_95": "23", + "stddev": "0", + "sum": "23" + }, + "Query_time": { + "avg": "0.000012", + "max": "0.000012", + "median": "0.000012", + "min": "0.000012", + "pct": "1.000000", + "pct_95": "0.000012", + "stddev": "0.000000", + "sum": "0.000012" + }, + "Rows_examined": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Rows_sent": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Tmp_table": { + "yes": "0" + }, + "Tmp_table_on_disk": { + "yes": "0" + }, + "db": { + "value": "food" + }, + "host": { + "value": "" + }, + "user": { + "value": "[SQL_SLAVE]" + } + }, + "query_count": 1, + "tables": [ + { + "create": "SHOW CREATE TABLE `food`.`trees`\\G", + "status": "SHOW TABLE STATUS FROM `food` LIKE 'trees'\\G" + } + ], + "ts_max": "2007-12-18 11:48:27", + "ts_min": "2007-12-18 11:48:27" + } + ], + "global": { + "files": [ + { + "name": "/home/sveta/src/percona/percona-toolkit/t/lib/samples/slowlogs/slow007.txt", + "size": 368 + } + ], + "metrics": { + "Filesort": { + "cnt": "0" + }, + "Filesort_on_disk": { + "cnt": "0" + }, + "Full_join": { + "cnt": "0" + }, + "Full_scan": { + "cnt": "0" + }, + "Lock_time": { + "avg": "0.000000", + "max": "0.000000", + "median": "0.000000", + "min": "0.000000", + "pct_95": "0.000000", + "stddev": "0.000000", + "sum": "0.000000" + }, + "Merge_passes": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "QC_Hit": { + "cnt": "0" + }, + "Query_length": { + "avg": "23", + "max": "23", + "median": "23", + "min": "23", + "pct_95": "23", + "stddev": "0", + "sum": "23" + }, + "Query_time": { + "avg": "0.000012", + "max": "0.000012", + "median": "0.000012", + "min": "0.000012", + "pct_95": "0.000012", + "stddev": "0.000000", + "sum": "0.000012" + }, + "Rows_examined": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Rows_sent": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Tmp_table": { + "cnt": "0" + }, + "Tmp_table_on_disk": { + "cnt": "0" + } + }, + "query_count": 1, + "unique_query_count": 1 + } +} diff --git a/t/pt-query-digest/samples/slow007_explain_json_2-80.txt b/t/pt-query-digest/samples/slow007_explain_json_2-80.txt new file mode 100644 index 00000000..e744b740 --- /dev/null +++ b/t/pt-query-digest/samples/slow007_explain_json_2-80.txt @@ -0,0 +1,216 @@ +{ + "classes": [ + { + "attribute": "fingerprint", + "checksum": "88F3D65BE48113F18E306CDB7A800841", + "distillate": "SELECT trees", + "example": { + "Query_time": "0.000012", + "explain": "# *************************** 1. row ***************************\n# id: 1\n# select_type: SIMPLE\n# table: trees\n# partitions: NULL\n# type: index\n# possible_keys: NULL\n# key: fruit\n# key_len: 99\n# ref: NULL\n# rows: 3\n# filtered: 100.00\n# Extra: Using index\n", + "query": "SELECT fruit FROM trees", + "ts": "2007-12-18 11:48:27" + }, + "fingerprint": "select fruit from trees", + "histograms": { + "Query_time": [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "metrics": { + "Filesort": { + "yes": "0" + }, + "Filesort_on_disk": { + "yes": "0" + }, + "Full_join": { + "yes": "0" + }, + "Full_scan": { + "yes": "0" + }, + "Lock_time": { + "avg": "0.000000", + "max": "0.000000", + "median": "0.000000", + "min": "0.000000", + "pct": "1.000000", + "pct_95": "0.000000", + "stddev": "0.000000", + "sum": "0.000000" + }, + "Merge_passes": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "QC_Hit": { + "yes": "0" + }, + "Query_length": { + "avg": "23", + "max": "23", + "median": "23", + "min": "23", + "pct": "1", + "pct_95": "23", + "stddev": "0", + "sum": "23" + }, + "Query_time": { + "avg": "0.000012", + "max": "0.000012", + "median": "0.000012", + "min": "0.000012", + "pct": "1.000000", + "pct_95": "0.000012", + "stddev": "0.000000", + "sum": "0.000012" + }, + "Rows_examined": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Rows_sent": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct": "1", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Tmp_table": { + "yes": "0" + }, + "Tmp_table_on_disk": { + "yes": "0" + }, + "db": { + "value": "food" + }, + "host": { + "value": "" + }, + "user": { + "value": "[SQL_SLAVE]" + } + }, + "query_count": 1, + "tables": [ + { + "create": "SHOW CREATE TABLE `food`.`trees`\\G", + "status": "SHOW TABLE STATUS FROM `food` LIKE 'trees'\\G" + } + ], + "ts_max": "2007-12-18 11:48:27", + "ts_min": "2007-12-18 11:48:27" + } + ], + "global": { + "files": [ + { + "name": "/home/sveta/src/percona/percona-toolkit/t/lib/samples/slowlogs/slow007.txt", + "size": 368 + } + ], + "metrics": { + "Filesort": { + "cnt": "0" + }, + "Filesort_on_disk": { + "cnt": "0" + }, + "Full_join": { + "cnt": "0" + }, + "Full_scan": { + "cnt": "0" + }, + "Lock_time": { + "avg": "0.000000", + "max": "0.000000", + "median": "0.000000", + "min": "0.000000", + "pct_95": "0.000000", + "stddev": "0.000000", + "sum": "0.000000" + }, + "Merge_passes": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "QC_Hit": { + "cnt": "0" + }, + "Query_length": { + "avg": "23", + "max": "23", + "median": "23", + "min": "23", + "pct_95": "23", + "stddev": "0", + "sum": "23" + }, + "Query_time": { + "avg": "0.000012", + "max": "0.000012", + "median": "0.000012", + "min": "0.000012", + "pct_95": "0.000012", + "stddev": "0.000000", + "sum": "0.000012" + }, + "Rows_examined": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Rows_sent": { + "avg": "0", + "max": "0", + "median": "0", + "min": "0", + "pct_95": "0", + "stddev": "0", + "sum": "0" + }, + "Tmp_table": { + "cnt": "0" + }, + "Tmp_table_on_disk": { + "cnt": "0" + } + }, + "query_count": 1, + "unique_query_count": 1 + } +}