docs: add how-to for Query Identifier
This commit is contained in:
committed by
Steve Chavez
parent
ad790baefb
commit
4df0654998
@@ -0,0 +1,62 @@
|
|||||||
|
.. _debugging_performance_pg_stat_statements:
|
||||||
|
|
||||||
|
Debugging Performance with pg_stat_statements
|
||||||
|
=============================================
|
||||||
|
|
||||||
|
This how-to shows how to get a query identifier through PostgREST and then use it to inspect the same query in ``pg_stat_statements``.
|
||||||
|
|
||||||
|
.. important::
|
||||||
|
|
||||||
|
- :ref:`db-plan-enabled` must be enabled in PostgREST.
|
||||||
|
- PostgreSQL 14 or newer with ``pg_stat_statements`` available.
|
||||||
|
|
||||||
|
Get the Query Identifier from PostgREST
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Request the plan in JSON format with the ``verbose`` option:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
curl "http://localhost:3000/projects?select=id,name&order=id" \
|
||||||
|
-H "Accept: application/vnd.pgrst.plan+json; options=verbose"
|
||||||
|
|
||||||
|
The response will contain a top-level ``Query Identifier`` field:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"Plan": {
|
||||||
|
"Node Type": "Aggregate"
|
||||||
|
},
|
||||||
|
"Query Identifier": -432192689578025496
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
Look up the query in pg_stat_statements
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Use that identifier against ``pg_stat_statements``:
|
||||||
|
|
||||||
|
.. code-block:: postgres
|
||||||
|
|
||||||
|
select
|
||||||
|
calls,
|
||||||
|
total_exec_time,
|
||||||
|
mean_exec_time,
|
||||||
|
rows,
|
||||||
|
query
|
||||||
|
from pg_stat_statements
|
||||||
|
where queryid = -432192689578025496;
|
||||||
|
|
||||||
|
.. csv-table::
|
||||||
|
:header: "calls", "total_exec_time", "mean_exec_time", "rows", "query"
|
||||||
|
|
||||||
|
"13", "0.6355850000000001", "0.04889115384615385", "13", "WITH pgrst_source AS (...)"
|
||||||
|
|
||||||
|
This lets you correlate a PostgREST request with PostgreSQL runtime statistics such as:
|
||||||
|
|
||||||
|
- how often the query ran
|
||||||
|
- total and average execution time
|
||||||
|
- how many rows it produced
|
||||||
|
- the normalized SQL text recorded by PostgreSQL
|
||||||
@@ -430,6 +430,8 @@ By default the plan is assumed to generate the JSON representation of a resource
|
|||||||
|
|
||||||
The other available parameters are ``analyze``, ``verbose``, ``settings``, ``buffers`` and ``wal``, which correspond to the `EXPLAIN command options <https://www.postgresql.org/docs/current/sql-explain.html>`_. To use the ``analyze`` and ``wal`` parameters for example, you would add them like ``Accept: application/vnd.pgrst.plan; options=analyze|wal``.
|
The other available parameters are ``analyze``, ``verbose``, ``settings``, ``buffers`` and ``wal``, which correspond to the `EXPLAIN command options <https://www.postgresql.org/docs/current/sql-explain.html>`_. To use the ``analyze`` and ``wal`` parameters for example, you would add them like ``Accept: application/vnd.pgrst.plan; options=analyze|wal``.
|
||||||
|
|
||||||
|
For a workflow that takes the ``Query Identifier`` from a verbose PostgREST plan and uses it to inspect the same query in ``pg_stat_statements``, see :ref:`debugging_performance_pg_stat_statements`.
|
||||||
|
|
||||||
Note that akin to the EXPLAIN command, the changes will be committed when using the ``analyze`` option. To avoid this, you can use the :ref:`db-tx-end` and the ``Prefer: tx=rollback`` header.
|
Note that akin to the EXPLAIN command, the changes will be committed when using the ``analyze`` option. To avoid this, you can use the :ref:`db-tx-end` and the ``Prefer: tx=rollback`` header.
|
||||||
|
|
||||||
Securing the Execution Plan
|
Securing the Execution Plan
|
||||||
|
|||||||
Reference in New Issue
Block a user