PostgreSQL
 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 का उपयोग कर सकते हैं - मैं उत्पादों पर अप्रचलित उपयोग का समर्थन करने के लिए मिश्रण का उपयोग करता हूं... यदि आपके पास कोई नोट नहीं है, तो बस इसे अनदेखा करें...)

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

अब हम pg_stat_statements . के साथ pgbouncer व्यू में शामिल हो सकते हैं :

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 इसका मतलब है कि यह पिड pgbouncer से है, और pgbouncer से यह 0.10.10.10

. से जुड़ा है


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में सिस्टम और त्रुटि संदेशों की भाषा बदलें

  2. Django - मॉडल मौजूद नहीं हैं, लेकिन Django अभी भी उन्हें लोड करता है

  3. लार्वा और पोस्टग्रेज में दो क्षेत्रों की तुलना कैसे करें

  4. PostgreSql में JDBCTemplate बैचअपडेट का उपयोग करके त्रुटि रिकॉर्ड कैसे कैप्चर करें?

  5. क्यों सबसे प्राकृतिक क्वेरी (यानी इनर जॉइन (बाएं जॉइन के बजाय) का उपयोग करना) बहुत धीमी है