graphql-engine/server/bench-wrk/queries.graphql
nizar-m f8a7312a30
Regression benchmarks setup (#3310)
* Benchmark GraphQL queries using wrk

* fix console assets dir

* Store wrk parameters as well

* Add details about storing results in Readme

* Remove files in bench-wrk while computing server shasum

* Instead of just getting maximum throughput per query per version,
create plots using wrk2 for a given set of requests per second.
The maximum throughput is used to see what values of requests per second are feasible.

* Add id for version dropdown

* Allow specifiying env and args for GraphQL Engine

1) Arguments defined after -- will be applied as arguments to Hasura GraphQL Engine
2) Script will also pass the environmental variables to Hasura GraphQL Engine instances

Hasura GraphQL engine can be run with the given environmental variables and arguments as follows

$ export HASURA_GRAPHQL_...=....
$ python3 hge_wrk_bench.py -- --hge_arg1 val1 --hge_arg2 val2 ...

* Use matplotlib instead of plotly for figures

* Show throughput graph also.

It maybe useful in checking performance regression across versions

* Support storing results in s3

Use --upload-root-uri 's3://bucket/path' to upload results inside the
given path.When specified, the results will be uploaded to the bucket,
including latencies, latency histogram, and the test setup info.
The s3 credentials should be provided as given in AWS boto3 documentation.

* Allow specifying a name for the test scenario

* Fix open latency uri bug

* Update wrk docker image

* Keep ylim a little higher than maximum so that the throughput plot is clearly visible

* Show throughput plots for multiple queries at the same time

* 1) Adjust size of dropdowns
2) Make label for requests/sec invisible when plot type is throughput

* 1) Adding boto3 to requirements.txt
2) Removing CPU Key print line
3) Adding info about the tests that will be run with wrk2

* Docker builder fo wrk-websocket-server

* Make it optional to setup remote graphql-engine

* Listen on all interfaces and enable ping thread

* Add bench_scripts to wrk-websocket-server docker

* Use 127.0.0.1 instead of 'localhost' to address local hge

For some reason it seems wrk was hanging trying to resolve 'localhost'.
ping was able to fine from the same container, so I'm not sure what the
deal was. Probably some local misconfiguration on my machine, but maybe
this change will also help others.

* Store latency samples in subdirectory, server_shasum just once at start, additional docs

* Add a note on running the benchmarks in the simplest way

* Add a new section on how to run benchmarks on a new linux hosted instance

Co-authored-by: Nizar Malangadan <nizar-m@users.noreply.github.com>
Co-authored-by: Brandon Simmons <brandon.m.simmons@gmail.com>
Co-authored-by: Karthikeyan Chinnakonda <karthikeyan@hasura.io>
Co-authored-by: Brandon Simmons <brandon@hasura.io>
Co-authored-by: Vamshi Surabhi <0x777@users.noreply.github.com>
2020-06-19 22:40:17 +05:30

129 lines
2.1 KiB
GraphQL

# A query which carries a lot of data
query rows_50_nesting_level_1 {
hge_events(limit: 50){
event_status
last_update
affiliations_events_by_event_id(limit: 2) {
affiliation{
publisher{
publisher_name
}
}
}
}
}
# Simple query which returns one row with its object foreign key relationship
query one_row_nesting_level_1 {
hge_events_by_pk(id: 1) {
id
attendance
duration
event_status
last_update
publisher {
id
publisher_name
}
}
}
# Query with nesting level of 4
query one_row_nesting_level_4 {
hge_baseball_action_plays_by_pk(id: 1) {
play_type
baseball_event_state {
current_state
pitcher {
person_key
publisher {
publisher_key
}
}
}
}
}
# Query with nesting level of 7
query one_row_nesting_level_7 {
hge_baseball_action_plays_by_pk(id: 1) {
play_type
baseball_event_state {
current_state
pitcher {
person_key
publisher {
publisher_key
persons_by_publisher_id(limit: 1){
person_key
baseball_event_states_by_batter_id {
current_state
event {
event_status
}
}
}
}
}
}
}
}
# Remote query
query remote_one_row {
remote_hge_events_by_pk(id: 1) {
id
attendance
duration
event_status
last_update
publisher {
id
publisher_name
}
}
}
# Remote query with two top level fields
query remote_two_fields {
events_1: remote_hge_events_by_pk(id: 1) {
id
attendance
duration
event_status
last_update
publisher {
id
publisher_name
}
}
events_2: remote_hge_events_by_pk(id: 2) {
id
attendance
duration
event_status
last_update
publisher {
id
publisher_name
}
}
}
# Remote query lot of data
query remote_50_rows {
remote_hge_events(limit: 50){
event_status
last_update
affiliations_events_by_event_id(limit: 2) {
affiliation{
publisher{
publisher_name
}
}
}
}
}