PostgreSQL์—์„œ ์›Œํฌ๋กœ๋“œ ํ”„๋กœํ•„ ๋ฐ ๋Œ€๊ธฐ ๊ธฐ๋ก์„ ๊ฐ€์ ธ์˜ค๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

๊ธฐ์‚ฌ ๊ณ„์† โ€œPostgreSQL์šฉ ASH ์•„๋‚ ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋Š” ์‹œ๋„ ".

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ํŠน์ • ์ฟผ๋ฆฌ์™€ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pg_stat_activity ๋ทฐ์˜ ๊ธฐ๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์กฐ์‚ฌํ•˜๊ณ  ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ฒฝ๊ณ 
์ฃผ์ œ์˜ ์ฐธ์‹ ํ•จ๊ณผ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ํ…Œ์ŠคํŠธ ๊ธฐ๊ฐ„์œผ๋กœ ์ธํ•ด ๊ธฐ์‚ฌ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„ํŒ๊ณผ ๋…ผํ‰์€ ์ ๊ทน ํ™˜์˜ํ•˜๊ณ  ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ ๋ฐ์ดํ„ฐ

pg_stat_statements ์ œ์ถœ ๊ธฐ๋ก

pg_stat_history

CREATE TABLE pg_stat_history ( 
id SERIAL, 
snapshot_timestamp  timestamp without time zone, 
database_id integer,
dbid oid,
userid oid,
queryid bigint,
query text,
calls bigint, 
total_time double precision, 
min_time double precision, 
max_time double precision, 
mean_time double precision,
stddev_time double precision,
rows bigint,
shared_blks_hit bigint, 
shared_blks_read bigint, 
shared_blks_dirtied bigint, 
shared_blks_written bigint, 
local_blks_hit bigint, 
local_blks_read bigint,
local_blks_dirtied bigint, 
local_blks_written bigint, 
temp_blks_read bigint,
temp_blks_written bigint,
blk_read_time double precision, 
blk_write_time double precision, 
baseline_id integer );

ํ…Œ์ด๋ธ”์€ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ dblink๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์‹œ๊ฐ„ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์žฅ ํฅ๋ฏธ๋กญ๊ณ  ์œ ์šฉํ•œ ์—ด์ž…๋‹ˆ๋‹ค. ์ฟผ๋ฆฌID.

pg_stat_activity ๋ณด๊ธฐ ๊ธฐ๋ก

archive_pg_stat_activity

CREATE TABLE archive_pg_stat_activity
(
  timepoint timestamp without time zone,
  datid             oid, 
  datname           name,
  pid               integer,
  usesysid          oid,
  usename           name,
  application_name  text,
  client_addr       inet,
  client_hostname   text,
  client_port       integer,
  backend_start     timestamp without time zone,
  xact_start        timestamp without time zone,
  query_start       timestamp without time zone,
  state_change      timestamp without time zone,
  wait_event_type   text,                     
  wait_event        text,                   
  state             text,                  
  backend_xid       xid,                 
  backend_xmin      xid,                
  query             text,               
  backend_type      text,
  queryid           bigint
);

ํ…Œ์ด๋ธ”์€ ์‹œ๊ฐ„๋ณ„๋กœ ๋ถ„ํ• ๋œ History_pg_stat_activity ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•˜์„ธ์š” - pg_stat_statements + pg_stat_activity + loq_query = pg_ash? ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ - PostgreSQL์šฉ ASH ์œ ์‚ฌ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋Š” ์‹œ๋„์ž…๋‹ˆ๋‹ค.)

์ถœ๋ ฅ

ํด๋Ÿฌ์Šคํ„ฐ CPU ์‹œ๊ฐ„(์‹œ์Šคํ…œ + ํด๋ผ์ด์–ธํŠธ)

์ฃผ์žฅ

WITH 
 t AS
 (
	SELECT 		
			date_trunc('second', timepoint)
	FROM 	activity_hist.archive_pg_stat_activity aa
	WHERE 	timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour')  AND 
			( aa.wait_event_type IS NULL  ) AND
			aa.state = 'active'
 )
 SELECT count(*) 
 INTO cpu_total
 FROM t ;

์˜ˆ

CLUSTER CPU TIME (SYSTEM + CLIENTS ) : 28:37:46

ํด๋Ÿฌ์Šคํ„ฐ ๋Œ€๊ธฐ ์‹œ๊ฐ„

์ฃผ์žฅ

WITH 
 t AS
 (
	SELECT 		
			date_trunc('second', timepoint)
	FROM 	activity_hist.archive_pg_stat_activity aa
	WHERE 	timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour')  AND 
			( aa.wait_event_type IS NOT NULL  ) AND
			aa.state = 'active'
 )
 SELECT count(*) 
 INTO cpu_total
 FROM t ;

์˜ˆ

CLUSTER WAITINGS TIME : 30:12:49

์ด pg_stat_statements ๊ฐ’

์ฃผ์žฅ

 --TOTAL pg_stat
  SELECT 
    SUM(calls) AS calls, SUM(total_time)  AS total_time, SUM(rows) AS rows ,
	SUM(shared_blks_hit)  AS shared_blks_hit,SUM(shared_blks_read) AS shared_blks_read ,
	SUM(shared_blks_dirtied) AS shared_blks_dirtied,SUM(shared_blks_written) AS shared_blks_written , 
    SUM(local_blks_hit) AS local_blks_hit , SUM(local_blks_read) AS local_blks_read , 
	SUM(local_blks_dirtied) AS local_blks_dirtied , SUM(local_blks_written)  AS local_blks_written,
	SUM(temp_blks_read) AS temp_blks_read, SUM(temp_blks_written) temp_blks_written , 
	SUM(blk_read_time) AS blk_read_time , SUM(blk_write_time) AS blk_write_time
  INTO 
    pg_total_stat_history_rec
  FROM 
    pg_stat_history
  WHERE 
 	snapshot_timestamp BETWEEN pg_stat_history_begin AND pg_stat_history_end AND 
	queryid IS NULL;

SQL DBTIME - ์ด ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„

์ฃผ์žฅ

dbtime_total = interval '1 millisecond' * pg_total_stat_history_rec.total_time ;

์˜ˆ

SQL DBTIME : 136:49:36

SQL CPU TIME - ์ฟผ๋ฆฌ ์‹คํ–‰์— ์†Œ์š”๋œ CPU ์‹œ๊ฐ„

์ฃผ์žฅ

WITH 
 t AS
 (
	SELECT 		
			date_trunc('second', timepoint)
	FROM 	activity_hist.archive_pg_stat_activity aa
	WHERE 	timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour')  AND 
			( aa.wait_event_type IS NULL  ) AND
			backend_type = 'client backend' AND 
			aa.state = 'active'
 )
 SELECT count(*) 
 INTO cpu_total
 FROM t ;

์˜ˆ

SQL CPU TIME : 27:40:15

SQL WAITINGS TIME - ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„

์ฃผ์žฅ

WITH 
 t AS
 (
	SELECT 		
			date_trunc('second', timepoint)
	FROM 	activity_hist.archive_pg_stat_activity aa
	WHERE 	timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour')  AND 
			( aa.wait_event_type IS NOT NULL  ) AND
			aa.state = 'active' AND 
		backend_type = 'client backend'
 )
 SELECT count(*) 
 INTO waiting_total
 FROM t ;

์˜ˆ

SQL WAITINGS TIME : 30:04:09

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” ๊ฐ„๋‹จํ•˜๋ฉฐ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค.

์˜ˆ

| SQL IOTIME : 19:44:50
| SQL READ TIME : 19:44:32
| SQL WRITE TIME : 00:00:17
|
| SQL CALLS : 12188248
-------------------------------------------------------------
| SQL SHARED BLOCKS READS : 7997039120
| SQL SHARED BLOCKS HITS : 8868286092
| SQL SHARED BLOCKS HITS/READS % : 110.89
| SQL SHARED BLOCKS DIRTED : 419945
| SQL SHARED BLOCKS WRITTEN : 19857
|
| SQL TEMPORARY BLOCKS READS : 7836169
| SQL TEMPORARY BLOCKS WRITTEN : 10683938

๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์„น์…˜์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

๋Œ€๊ธฐ ์‹œ๊ฐ„์€ ์ •์ ์ž…๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ์„ธ์Šค์˜ ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ธฐ์ค€ ์ƒ์œ„ 10๊ฐœ ๋Œ€๊ธฐ

์ฃผ์žฅ

SELECT 
  wait_event_type , wait_event ,
  get_system_waiting_duration( wait_event_type , wait_event ,pg_stat_history_begin+(current_hour_diff * interval '1 hour') ,pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration 
FROM
  activity_hist.archive_pg_stat_activity aa
WHERE 
  timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type != 'client backend' AND wait_event_type IS NOT NULL 
GROUP BY 
  wait_event_type, wait_event
ORDER BY 3 DESC
LIMIT 10

์˜ˆ

+------------------------------------------------- ---------------------- | ์‹œ์Šคํ…œ ํ”„๋กœ์„ธ์Šค์˜ ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ธฐ์ค€ ์ƒ์œ„ 10๊ฐœ ๋Œ€๊ธฐ +------+------------------+-- ------+--------- | #| wait_event_type| wait_event| ๊ธฐ๊ฐ„ +------+---------------+------------- -----+------------ | 1| ํ™œ๋™| ๋…ผ๋ฆฌ๋Ÿฐ์ฒ˜๋ฉ”์ธ| 10:43:28 | 2| ํ™œ๋™| ์ž๋™ ์ง„๊ณต ๋ฉ”์ธ| 10:42:49 | 3| ํ™œ๋™| WalWriter๋ฉ”์ธ| 10:28:53 | 4| ํ™œ๋™| ์ฒดํฌํฌ์ธํ„ฐ๋ฉ”์ธ| 10:23:50 | 5| ํ™œ๋™| BgWriter๋ฉ”์ธ| 09:11:59 | 6| ํ™œ๋™| BgWriter์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ| 01:37:46 | 7| IO| BufํŒŒ์ผ์“ฐ๊ธฐ| 00:02:35 | 8| LW์ž ๊ธˆ| buffer_mapping| 00:01:54 | 9| IO| ๋ฐ์ดํ„ฐํŒŒ์ผ์ฝ๊ธฐ| 00:01:23 | 10| IO| WAL์“ฐ๊ธฐ| 00:00:59 +------+------------------+------- ------------+------------

ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ์„ธ์Šค์˜ ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ธฐ์ค€ ์ƒ์œ„ 10๊ฐœ ๋Œ€๊ธฐ

์ฃผ์žฅ

SELECT 
  wait_event_type , wait_event ,
  get_clients_waiting_duration( wait_event_type , wait_event , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration
FROM 
  activity_hist.archive_pg_stat_activity aa
WHERE 
  timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type = 'client backend' AND wait_event_type IS NOT NULL 
GROUP BY wait_event_type, wait_event
ORDER BY 3 DESC
LIMIT 10

์˜ˆ

+---------+---------------+--------- --- ---------+----------+------------ | #| wait_event_type| wait_event| ๊ธฐ๊ฐ„| % dbtime +------+------------------+---------- --------+----------+---------- | 1| ์ž ๊ธˆ| ๊ฑฐ๋ž˜ID| 08:16:47| 6.05 | 2| IO| ๋ฐ์ดํ„ฐํŒŒ์ผ์ฝ๊ธฐ| 06:13:41| 4.55 | 3| ์‹œ๊ฐ„ ์ดˆ๊ณผ| Pg์ˆ˜๋ฉด| 02:53:21| 2.11 | 4| LW์ž ๊ธˆ| buffer_mapping| 00:40:42| 0.5 | 5| LW์ž ๊ธˆ| buffer_io| 00:17:17| 0.21 | 6| IO| BufํŒŒ์ผ์“ฐ๊ธฐ| 00:01:34| 0.02 | 7| ์ž ๊ธˆ| ํŠœํ”Œ| 00:01:32| 0.02 | 8| ํด๋ผ์ด์–ธํŠธ| ํด๋ผ์ด์–ธํŠธ์ฝ๊ธฐ| 00:01:19| 0.02 | 9| IO| BufํŒŒ์ผ์ฝ๊ธฐ| 00:00:37| 0.01 | 10| LW์ž ๊ธˆ| ๋ฒ„ํผ ๋‚ด์šฉ| 00:00:08| 0 +------+---------------+------------- --------+------------+----------

์‹œ์Šคํ…œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„๋ณ„ ๋Œ€๊ธฐ ์œ ํ˜•

์ฃผ์žฅ

SELECT 
  wait_event_type ,
  get_system_waiting_type_duration( wait_event_type , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration
FROM
  activity_hist.archive_pg_stat_activity aa
WHERE 
  timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND  backend_type != 'client backend' AND wait_event_type IS NOT NULL 
GROUP BY wait_event_type
ORDER BY 2 DESC

์˜ˆ

+---------+---------------+--------- --- -------- | #| wait_event_type| ๊ธฐ๊ฐ„ +------+---------------+------------- ------- | 1| ํ™œ๋™| 53:08:45 | 2| IO| 00:06:24 | 3| LW์ž ๊ธˆ| 00:03:02 +------+-------------------+------- -------------

ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„๋ณ„ ๋Œ€๊ธฐ ์œ ํ˜•

์ฃผ์žฅ

SELECT 
  wait_event_type ,
  get_clients_waiting_type_duration( wait_event_type , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration
FROM
  activity_hist.archive_pg_stat_activity aa
WHERE 
  timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type = 'client backend' AND wait_event_type IS NOT NULL 
GROUP BY wait_event_type
ORDER BY 2 DESC

์˜ˆ

+---------+---------------+--------- --- -------+---------- | #| wait_event_type| ๊ธฐ๊ฐ„| % dbtime +------+------------------+---------- --------+--------- | 1| ์ž ๊ธˆ| 08:18:19| 6.07 | 2| IO| 06:16:01| 4.58 | 3| ์‹œ๊ฐ„ ์ดˆ๊ณผ| 02:53:21| 2.11 | 4| LW์ž ๊ธˆ| 00:58:12| 0.71 | 5| ํด๋ผ์ด์–ธํŠธ| 00:01:19| 0.02 | 6| IPC| 00:00:04| 0 +------+---------------+------------- -----+---------

์‹œ์Šคํ…œ ํ”„๋กœ์„ธ์Šค ๋ฐ ๊ฐœ๋ณ„ ์š”์ฒญ์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘

์ฃผ์žฅ

SELECT 
  backend_type , datname , wait_event_type , wait_event , get_backend_type_waiting_duration( backend_type , wait_event_type , wait_event , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration 
FROM 
  activity_hist.archive_pg_stat_activity aa
WHERE 
  timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type != 'client backend' AND wait_event_type IS NOT NULL 
GROUP BY backend_type , datname , wait_event_type , wait_event
ORDER BY 5 DESC

์˜ˆ

+-----+-----------------------------+----------+--------------------+----------------------+--------------------
|    #|                 backend_type|    dbname|     wait_event_type|            wait_event|            duration
+-----+-----------------------------+----------+--------------------+----------------------+--------------------
|    1| logical replication launcher|          |            Activity|   LogicalLauncherMain|            10:43:28
|    2|          autovacuum launcher|          |            Activity|        AutoVacuumMain|            10:42:49
|    3|                    walwriter|          |            Activity|         WalWriterMain|            10:28:53
|    4|                 checkpointer|          |            Activity|      CheckpointerMain|            10:23:50
|    5|            background writer|          |            Activity|          BgWriterMain|            09:11:59
|    6|            background writer|          |            Activity|     BgWriterHibernate|            01:37:46
|    7|              parallel worker|      tdb1|                  IO|          BufFileWrite|            00:02:35
|    8|              parallel worker|      tdb1|              LWLock|        buffer_mapping|            00:01:41
|    9|              parallel worker|      tdb1|                  IO|          DataFileRead|            00:01:22
|   10|              parallel worker|      tdb1|                  IO|           BufFileRead|            00:00:59
|   11|                    walwriter|          |                  IO|              WALWrite|            00:00:57
|   12|              parallel worker|      tdb1|              LWLock|             buffer_io|            00:00:47
|   13|            autovacuum worker|      tdb1|              LWLock|        buffer_mapping|            00:00:13
|   14|            background writer|          |                  IO|         DataFileWrite|            00:00:12
|   15|                 checkpointer|          |                  IO|         DataFileWrite|            00:00:11
|   16|                    walwriter|          |              LWLock|          WALWriteLock|            00:00:09
|   17|                 checkpointer|          |              LWLock|          WALWriteLock|            00:00:06
|   18|            background writer|          |              LWLock|          WALWriteLock|            00:00:06
|   19|                    walwriter|          |                  IO|          WALInitWrite|            00:00:02
|   20|            autovacuum worker|      tdb1|              LWLock|          WALWriteLock|            00:00:02
|   21|                    walwriter|          |                  IO|           WALInitSync|            00:00:02
|   22|            autovacuum worker|      tdb1|                  IO|          DataFileRead|            00:00:01
|   23|                 checkpointer|          |                  IO| ControlFileSyncUpdate|            00:00:01
|   24|            background writer|          |                  IO|              WALWrite|            00:00:01
|   25|            background writer|          |                  IO|         DataFileFlush|            00:00:01
|   26|                 checkpointer|          |                  IO|         SLRUFlushSync|            00:00:01
|   27|            autovacuum worker|      tdb1|                  IO|              WALWrite|            00:00:01
|   28|                 checkpointer|          |                  IO|          DataFileSync|            00:00:01
+-----+-----------------------------+----------+--------------------+----------------------+--------------------

WAITINGS FOR SQL - queryid๋ณ„๋กœ ๊ฐœ๋ณ„ ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

์ฃผ์žฅ

SELECT 
queryid , datname , wait_event_type , wait_event , get_query_waiting_duration( queryid ,  wait_event_type , wait_event , pg_stat_history_begin+(current_hour_diff * interval '1 hour') , pg_stat_history_end+(current_hour_diff * interval '1 hour') ) as duration 
FROM 
  activity_hist.archive_pg_stat_activity aa
WHERE 
  timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND backend_type = 'client backend' AND wait_event_type IS NOT NULL AND queryid IS NOT NULL 
GROUP BY queryid , datname , wait_event_type , wait_event
ORDER BY 1 , 5 DESC 

์˜ˆ

+-----+-------------------------+----------+--------------------+--------------------+--------------------+--------------------
|    #|                  queryid|    dbname|     wait_event_type|          wait_event|            waitings|               total
|     |                         |          |                    |                    |            duration|            duration
+-----+-------------------------+----------+--------------------+--------------------+--------------------+--------------------
|    1|     -8247416849404883188|      tdb1|              Client|          ClientRead|            00:00:02|
|    2|     -6572922443698419129|      tdb1|              Client|          ClientRead|            00:00:05|
|    3|     -6572922443698419129|      tdb1|                  IO|        DataFileRead|            00:00:01|
|    4|     -5917408132400665328|      tdb1|              Client|          ClientRead|            00:00:04|
|    5|     -4091009262735781873|      tdb1|              Client|          ClientRead|            00:00:03|
|    6|     -1473395109729441239|      tdb1|              Client|          ClientRead|            00:00:01|
|    7|        28942442626229688|      tdb1|                  IO|        BufFileWrite|            00:01:34|            00:46:06
|    8|        28942442626229688|      tdb1|              LWLock|      buffer_mapping|            00:01:05|            00:46:06
|    9|        28942442626229688|      tdb1|                  IO|        DataFileRead|            00:00:44|            00:46:06
|   10|        28942442626229688|      tdb1|                  IO|         BufFileRead|            00:00:37|            00:46:06
|   11|        28942442626229688|      tdb1|              LWLock|           buffer_io|            00:00:35|            00:46:06
|   12|        28942442626229688|      tdb1|              Client|          ClientRead|            00:00:05|            00:46:06
|   13|        28942442626229688|      tdb1|                 IPC| MessageQueueReceive|            00:00:03|            00:46:06
|   14|        28942442626229688|      tdb1|                 IPC|    BgWorkerShutdown|            00:00:01|            00:46:06
|   15|       389015618226997618|      tdb1|                Lock|       transactionid|            03:55:09|            04:14:15
|   16|       389015618226997618|      tdb1|                  IO|        DataFileRead|            03:23:09|            04:14:15
|   17|       389015618226997618|      tdb1|              LWLock|      buffer_mapping|            00:12:09|            04:14:15
|   18|       389015618226997618|      tdb1|              LWLock|           buffer_io|            00:10:18|            04:14:15
|   19|       389015618226997618|      tdb1|                Lock|               tuple|            00:00:35|            04:14:15
|   20|       389015618226997618|      tdb1|              LWLock|        WALWriteLock|            00:00:02|            04:14:15
|   21|       389015618226997618|      tdb1|                  IO|       DataFileWrite|            00:00:01|            04:14:15
|   22|       389015618226997618|      tdb1|              LWLock|        SyncScanLock|            00:00:01|            04:14:15
|   23|       389015618226997618|      tdb1|              Client|          ClientRead|            00:00:01|            04:14:15
|   24|       734234407411547467|      tdb1|              Client|          ClientRead|            00:00:11|
|   25|       734234407411547467|      tdb1|              LWLock|      buffer_mapping|            00:00:05|
|   26|       734234407411547467|      tdb1|                  IO|        DataFileRead|            00:00:02|
|   27|      1237430309438971376|      tdb1|              LWLock|      buffer_mapping|            00:02:18|            02:45:40
|   28|      1237430309438971376|      tdb1|                  IO|        DataFileRead|            00:00:27|            02:45:40
|   29|      1237430309438971376|      tdb1|              Client|          ClientRead|            00:00:02|            02:45:40
|   30|      2404820632950544954|      tdb1|              Client|          ClientRead|            00:00:01|
|   31|      2515308626622579467|      tdb1|              Client|          ClientRead|            00:00:02|
|   32|      4710212362688288619|      tdb1|              LWLock|      buffer_mapping|            00:03:08|            02:18:21
|   33|      4710212362688288619|      tdb1|                  IO|        DataFileRead|            00:00:22|            02:18:21
|   34|      4710212362688288619|      tdb1|              Client|          ClientRead|            00:00:06|            02:18:21
|   35|      4710212362688288619|      tdb1|              LWLock|           buffer_io|            00:00:02|            02:18:21
|   36|      9150846928388977274|      tdb1|                  IO|        DataFileRead|            00:01:19|
|   37|      9150846928388977274|      tdb1|              LWLock|      buffer_mapping|            00:00:34|
|   38|      9150846928388977274|      tdb1|              Client|          ClientRead|            00:00:10|
|   39|      9150846928388977274|      tdb1|              LWLock|           buffer_io|            00:00:01|
+-----+-------------------------+----------+--------------------+--------------------+--------------------+--------------------

CLIENT SQL ํ†ต๊ณ„ - TOP ์ฟผ๋ฆฌ

์ˆ˜์‹  ์š”์ฒญ์€ ๋‹ค์‹œ ์‚ฌ์†Œํ•˜๋ฉฐ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ

+------------------------------------------------------------------------------------
| CLIENT SQL ordered by Elapsed Time
+--------------------+----------+----------+----------+----------+----------+--------------------
|        elapsed time|     calls|  % dbtime|     % CPU|      % IO|    dbname|             queryid
+--------------------+----------+----------+----------+----------+----------+--------------------
|            04:14:15|        19|       3.1|     10.83|     11.52|      tdb1|  389015618226997618
|            02:45:40|       746|      2.02|      4.23|      0.08|      tdb1| 1237430309438971376
|            02:18:21|       749|      1.69|      3.39|       0.1|      tdb1| 4710212362688288619
|            00:46:06|       375|      0.56|      0.94|      0.41|      tdb1|   28942442626229688
+--------------------+----------+----------+----------+----------+----------+--------------------
| CLIENT SQL ordered by CPU Time
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
|            cpu time|     calls|  % dbtime|total_time|     % CPU|      % IO|    dbname|             queryid
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
|            02:59:49|        19|       3.1|  04:14:15|     10.83|     11.52|      tdb1|  389015618226997618
|            01:10:12|       746|      2.02|  02:45:40|      4.23|      0.08|      tdb1| 1237430309438971376
|            00:56:15|       749|      1.69|  02:18:21|      3.39|       0.1|      tdb1| 4710212362688288619
|            00:15:35|       375|      0.56|  00:46:06|      0.94|      0.41|      tdb1|   28942442626229688
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
| CLIENT SQL ordered by User I/O Wait Time
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
|        io_wait time|     calls|  % dbtime|total_time|     % CPU|      % IO|    dbname|             queryid
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
|            03:23:10|        19|       3.1|  04:14:15|     10.83|     11.52|      tdb1|  389015618226997618
|            00:02:54|       375|      0.56|  00:46:06|      0.94|      0.41|      tdb1|   28942442626229688
|            00:00:27|       746|      2.02|  02:45:40|      4.23|      0.08|      tdb1| 1237430309438971376
|            00:00:22|       749|      1.69|  02:18:21|      3.39|       0.1|      tdb1| 4710212362688288619
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
| CLIENT SQL ordered by Shared Buffers Reads
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
|       buffers reads|     calls|  % dbtime|total_time|     % CPU|      % IO|    dbname|             queryid
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
|          1056388566|        19|       3.1|  04:14:15|     10.83|     11.52|      tdb1|  389015618226997618
|            11709251|       375|      0.56|  00:46:06|      0.94|      0.41|      tdb1|   28942442626229688
|             3439004|       746|      2.02|  02:45:40|      4.23|      0.08|      tdb1| 1237430309438971376
|             3373330|       749|      1.69|  02:18:21|      3.39|       0.1|      tdb1| 4710212362688288619
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
| CLIENT SQL ordered by Disk Reads Time
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
|           read time|     calls|  % dbtime|total_time|     % CPU|      % IO|    dbname|             queryid
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
|            02:16:30|        19|       3.1|  04:14:15|     10.83|     11.52|      tdb1|  389015618226997618
|            00:04:50|       375|      0.56|  00:46:06|      0.94|      0.41|      tdb1|   28942442626229688
|            00:01:10|       749|      1.69|  02:18:21|      3.39|       0.1|      tdb1| 4710212362688288619
|            00:00:57|       746|      2.02|  02:45:40|      4.23|      0.08|      tdb1| 1237430309438971376
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
| CLIENT SQL ordered by Executions
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
|               calls|      rows|  % dbtime|total_time|     % CPU|      % IO|    dbname|             queryid
+--------------------+----------+----------+----------+----------+----------+----------+--------------------
|                 749|       749|      1.69|  02:18:21|      3.39|       0.1|      tdb1| 4710212362688288619
|                 746|       746|      2.02|  02:45:40|      4.23|      0.08|      tdb1| 1237430309438971376
|                 375|         0|      0.56|  00:46:06|      0.94|      0.41|      tdb1|   28942442626229688
|                  19|        19|       3.1|  04:14:15|     10.83|     11.52|      tdb1|  389015618226997618
+--------------------+----------+----------+----------+----------+----------+----------+--------------------

ํ•ฉ๊ณ„

์ œ์ถœ๋œ ์ฟผ๋ฆฌ์™€ ๊ฒฐ๊ณผ ๋ณด๊ณ ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ณ„ ์ฟผ๋ฆฌ์™€ ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ณด๋‹ค ์™„์ „ํ•œ ๊ทธ๋ฆผ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ

ํ˜„์žฌ๊นŒ์ง€์˜ ๊ฐœ๋ฐœ ๊ณ„ํš์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ฐจ๋‹จ ๊ธฐ๋ก์œผ๋กœ ๋ณด๊ณ ๋ฅผ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์€ ํ…Œ์ŠคํŠธ ์ค‘์ด๋ฉฐ ๊ณง ์ œ์ถœ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
  • TimescaleDB ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜์—ฌ pg_stat_activity ๋ฐ pg_locks ๊ธฐ๋ก์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒ์‚ฐ ๊ธฐ์ง€์— ๋Œ€๋Ÿ‰ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด github์—์„œ ํŒจํ‚ค์ง€ ์†”๋ฃจ์…˜์„ ์ค€๋น„ํ•˜์„ธ์š”.

๊ณ„์† ๋  ...

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€