> 13 марта 2016 г., в 20:39, Artem Tomyuk <ad...@leboutique.com> написал(а):
> 
> Hi all.
> 
> Is there any way of how to retrieve information from pg_stat_activity (its 
> not very comfort to get it from iotop, because its not showing full text of 
> query) which query generates or consumes the most IO load or time. 

Probably this can be done with pg_stat_kcache. Installing it with 
pg_stat_statements and querying it something like below will give stats per 
query:

rpopdb01d/postgres R # SELECT rolname, queryid, round(total_time::numeric, 2) 
AS total_time, calls,
    pg_size_pretty(shared_blks_hit*8192) AS shared_hit,
    pg_size_pretty(int8larger(0, (shared_blks_read*8192 - reads))) AS 
page_cache_hit,
    pg_size_pretty(reads) AS physical_read,
    round(blk_read_time::numeric, 2) AS blk_read_time,
    round(user_time::numeric, 2) AS user_time,
    round(system_time::numeric, 2) AS system_time
FROM pg_stat_statements s
    JOIN pg_stat_kcache() k USING (userid, dbid, queryid)
    JOIN pg_database d ON s.dbid = d.oid
    JOIN pg_roles r ON r.oid = userid
WHERE datname != 'postgres' AND datname NOT LIKE 'template%'
ORDER BY reads DESC LIMIT 1;
 rolname |  queryid   |  total_time  |  calls   | shared_hit | page_cache_hit | 
physical_read | blk_read_time | user_time | system_time
---------+------------+--------------+----------+------------+----------------+---------------+---------------+-----------+-------------
 rpop    | 3183006759 | 309049021.97 | 38098195 | 276 TB     | 27 TB          | 
22 TB         |   75485646.81 | 269508.98 |    35635.96
(1 row)

Time: 18.605 ms
rpopdb01d/postgres R #

Query text may be resolved by queryid something like SELECT query FROM 
pg_stat_statements WHERE queryid = 3183006759.

Works only with 9.4+ and gives you statistics per query for all the time, not 
the current state.

> 
> Thanks for any advice.


--
May the force be with you…
https://simply.name

Reply via email to