sql >> データベース >  >> RDS >> PostgreSQL

pgbouncerを介してクエリのソースを見つける

    pgbouncerからクライアントを追跡し続けるために使用する方法は、pg_stat_statementsに参加することです。 pgbouncerを使用show clients 指図。次に例を示します。

    t=# create extension "postgres_fdw";
    CREATE EXTENSION
    t=# CREATE SERVER pgbouncer FOREIGN DATA WRAPPER postgres_fdw OPTIONS ( host '10.10.10.10', port '6432', dbname 'pgbouncer');
    CREATE SERVER
    

    (どうしても、dblinkだけまたはpostgres_fdwだけを使用できます-私はmixを使用して、prodでの廃止された使用法をサポートしています...メモがない場合は、無視してください...)

    t=# create extension "dblink";
    CREATE EXTENSION
    t=#  create view bnc_client AS SELECT _.type,
            _."user",
            _.database,
            _.state,
            _.addr,
            _.port,
            _.local_addr,
            _.local_port,
            _.connect_time,
            _.request_time,
            _.ptr,
            _.link,
            _.remote_pid,
            _.tls
           FROM dblink('pgbouncer'::text, 'show clients'::text) _(type text, "user" text, database text, state text, addr text, port integer, local_addr text, local_port integer, connect_time timestamp with time zone, request_time timestamp with time zone, ptr text, link text, remote_pid smallint, tls text);
    CREATE VIEW
    t=# create user mapping FOR vao server pgbouncer options (user 'pgbouncer_known_user', password 'password_here');
    CREATE USER MAPPING
    

    これで、pgbouncerビューをpg_stat_statementsと結合できます。 :

    t=# select
            datname
          , usename
          , p.state
          , case when b.user is not null then 'pgBouncer' else application_name end app
          , case when b.user is null then client_addr else addr::inet end ip
          , b.user
          , b.state "bState"
          , case when waiting then true else null end w
          , b.connect_time
          , query_start
          , md5(query)::uuid
          , pid
        from pg_stat_activity p
        left outer join bnc_client b
          on addr||':'||b.port = regexp_replace(p.application_name,'^.{0,}(- )','')
        where pid <> pg_backend_pid()
      ;
     datname | usename | state |          app           |      ip      | user | bState | w | connect_time |          query_start
    |                 md5                  |  pid
    ---------+---------+-------+------------------------+--------------+------+--------+---+--------------+-------------------------------
    +--------------------------------------+-------
     dbn  | usr   | idle  |                        | 192.168.0.1 |      |        |   |              | 2017-03-09 17:19:46.206643+00
    | d1730c52-dffd-3650-a399-23f4dd4aa456 | 12614
     dbn  | usr   | idle  | app - 10.10.10.10:24514 | 10.10.10.10  |      |        |   |              | 2017-03-10 11:24:34.999174+00
    | 92a0340c-9ecc-9375-37c0-e70e8b225db4 | 22563
    (2 rows)
    

    ここでapp - 10.10.10.10:24514 これは、このpidがpgbouncerからのものであり、pgbouncerに0.10.10.10から接続されていることを意味します




    1. クエリ、ストアドプロシージャ、およびトリガー用のSQLServerパフォーマンスインジケーターの実装

    2. GROUPBYを使用してSQLServerで文字列を連結するにはどうすればよいですか?

    3. SQLServer2008のシンボルの前の文字列内のサブ文字列を分離する

    4. 要素IDをPHP変数に取り込む方法