Search Postgresql Archives

Re: unreliable behaviour of track_functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 04/01/2018 06:02 AM, pinker wrote:
I mean this part describing track_function:

https://www.postgresql.org/docs/10/static/runtime-config-statistics.html

Enables tracking of function call counts and time used. Specify pl to track
only procedural-language functions, all to also track SQL and C language
functions. The default is none, which disables function statistics tracking.
Only superusers can change this setting.

Note
SQL-language functions that are simple enough to be “inlined” into the
calling query will not be tracked, regardless of this setting.

Only case described here, that exclude function from being tracked it's
inlining, not the time and not the place in the query.

The below might help:

https://wiki.postgresql.org/wiki/Inlining_of_SQL_functions

In particular for your second case(place in query):

" Table functions

A table function call is any instance where func(args) appears where a table is expected. (This is, for most functions, a PostgreSQL extension to the SQL standard.) For example:

select * from func(123);
"

For your first case:

Inlining conditions for scalar functions

"the function body consists of a single, simple, SELECT expression"

So from your OP:

CREATE FUNCTION a(a bigint)
  RETURNS bigint
STABLE
LANGUAGE SQL
AS $$
SELECT $1
$$;

If you change to:

CREATE FUNCTION a(a bigint)
  RETURNS bigint
STABLE
LANGUAGE SQL
AS $$
SELECT 'test';
SELECT $1
$$;

then before change:

test=> select * from pg_stat_user_functions ;
 funcid  | schemaname | funcname | calls | total_time | self_time
---------+------------+----------+-------+------------+-----------
 1386647 | public     | a        |     2 |   1251.598 |  1251.598
(1 row)


after change:

test=> select * from pg_stat_user_functions ;
 funcid  | schemaname | funcname | calls | total_time | self_time
---------+------------+----------+-------+------------+-----------
 1386647 | public     | a        |     3 |   1251.682 |  1251.682





So I would expect that pg_stat_user_function will show me that my function
was executed. Good that are other ways to do it, but changing
track_functions to 'all' I would expect all calls will be tracked...



--
Sent from: http://www.postgresql-archive.org/PostgreSQL-general-f1843780.html




--
Adrian Klaver
adrian.klaver@xxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux