getQueryStats - Export query statistics
Use case
You can use this endpoint to get the list of the top queries by % of runtime, in order to do analysis on which queries have been newly introduced into the system.
You can use this data to e.g. export new slow queries to ticketing systems, or to compare the frequency and impact of queries over time.
API
Arguments for getQueryStats
:
databaseId
(string)
Database ID for which to retrieve query statistics forstartTs
(integer)
Start Unix timestamp in seconds (optional, defaults to 24 hours ago)endTs
(integer)
End Unix timestamp in seconds (optional, defaults to now)
Fields returned:
id
(number)
Unique identifier for this query in the pganalyze systemqueryUrl
(string)
URL to the pganalyze query pagetruncatedQuery
(string)
Shortened query text up to 100 characters (same as displayed in "Query Performance" overview)queryComment
(string)
First comment contained in the query (this is taken from the full query string, not just the truncated one)statementType
(array of strings)
List of statement type(s) used in this querytotalCalls
(integer)
Total number of calls for this queryavgTime
(float)
Average runtime in milliseconds for this queryavgIoTime
(float)
Average time spent in I/O operations for this query (this requirestrack_io_timing
to be enabled on the database)bufferHitRatio
(float)
% of query data that was returned from the buffer cache, instead of the disk or page cachepctOfTotal
(float)
% of runtime this query represents compared to the cumulative runtime of all queries
Note that the data returned reflects the statistics of the previous 24 hours, from the time the API request was run.
Example
GraphQL query:
query {
getQueryStats(databaseId: 12345) {
id
queryUrl
truncatedQuery
statementType
totalCalls
avgTime
bufferHitRatio
pctOfTotal
}
}
Using curl
:
curl -XPOST -H 'Authorization: Token XXXXXXX' \
-F 'query=query { getQueryStats(databaseId: 12345) { id, queryUrl, truncatedQuery, statementType, totalCalls, avgTime, bufferHitRatio, pctOfTotal } }' \
https://app.pganalyze.com/graphql
{
"data": {
"getQueryStats": [
{
"id":"678910",
"queryUrl": "https://app.pganalyze.com/databases/12345/queries/678910",
"truncatedQuery": "UPDATE \"pgbench_accounts\" SET abalance = $1 WHERE \"aid\" = $2",
"statementType": [
"UPDATE"
],
"totalCalls": 1887313,
"avgTime": 35.3024511808419,
"bufferHitRatio": 69.50736528891339,
"pctOfTotal": 96.0880225982751
},
[ ... ]
}
}
}
CSV Export
In case you are looking for a CSV export instead of the JSON output for this API call, the following Ruby script can be used:
require 'csv'
require 'json'
require 'net/http'
DATABASE_ID = 12345
API_TOKEN = 'XXXXXX'
API_ENDPOINT = 'https://app.pganalyze.com/graphql'
QUERY = '''
query {
getQueryStats(databaseId: %d) {
id
queryUrl
truncatedQuery
statementType
totalCalls
avgTime
bufferHitRatio
pctOfTotal
}
}
'''
uri = URI(API_ENDPOINT)
req = Net::HTTP::Post.new(uri.path)
req['authorization'] = 'Token ' + API_TOKEN
req.form_data = { 'query' => format(QUERY, DATABASE_ID) }
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
res = https.request(req)
stats = JSON.parse(res.body)['data']['getQueryStats']
exit(1) if stats.empty?
csv_output = CSV.generate do |csv|
csv << stats[0].keys
stats.each do |d|
csv << d.values
end
end
puts csv_output
This will output the following on stdout:
id,queryUrl,truncatedQuery,statementType,totalCalls,avgTime,bufferHitRatio,pctOfTotal
678910,https://app.pganalyze.com/databases/12345/queries/678910,"UPDATE ""pgbench_accounts"" SET abalance = $1 WHERE ""aid"" = $2","[""UPDATE""]","[""pgbench_accounts""]",1887313,35.3024511808419,69.50736528891339,96.0880225982751
...
Couldn't find what you were looking for or want to talk about something specific?
Start a conversation with us →