Txuas ntxiv ntawm tsab xov xwm "
Cov kab lus yuav tshuaj xyuas thiab qhia, siv cov lus nug tshwj xeeb thiab cov piv txwv, cov ntaub ntawv tseem ceeb twg tuaj yeem tau siv keeb kwm ntawm pg_locks saib.
Ceebtoom
Vim qhov tshiab ntawm cov ncauj lus thiab lub sijhawm xeem tsis tiav, tsab xov xwm yuav muaj qhov yuam kev. Kev thuam thiab cov lus pom zoo txais tos thiab xav tau.
Cov ntaub ntawv nkag
Keeb kwm ntawm pg_locks sawv cev
archive_locking
CREATE TABLE archive_locking
( timepoint timestamp without time zone ,
locktype text ,
relation oid ,
mode text ,
tid xid ,
vtid text ,
pid integer ,
blocking_pids integer[] ,
granted boolean ,
queryid bigint
);
Qhov tseem ceeb, lub rooj zoo ib yam li lub rooj archive_pg_stat_activity, piav qhia ntau ntxiv ntawm no -
Sau ib kab lus nug muaj nuj nqi yog siv
update_history_locking_by_queryid
--update_history_locking_by_queryid.sql
CREATE OR REPLACE FUNCTION update_history_locking_by_queryid() RETURNS boolean AS $$
DECLARE
result boolean ;
current_minute double precision ;
start_minute integer ;
finish_minute integer ;
start_period timestamp without time zone ;
finish_period timestamp without time zone ;
lock_rec record ;
endpoint_rec record ;
current_hour_diff double precision ;
BEGIN
RAISE NOTICE '***update_history_locking_by_queryid';
result = TRUE ;
current_minute = extract ( minute from now() );
SELECT * FROM endpoint WHERE is_need_monitoring
INTO endpoint_rec ;
current_hour_diff = endpoint_rec.hour_diff ;
IF current_minute < 5
THEN
RAISE NOTICE 'Current time is less than 5 minute.';
start_period = date_trunc('hour',now()) + (current_hour_diff * interval '1 hour');
finish_period = start_period - interval '5 minute' ;
ELSE
finish_minute = extract ( minute from now() ) / 5 ;
start_minute = finish_minute - 1 ;
start_period = date_trunc('hour',now()) + interval '1 minute'*start_minute*5+(current_hour_diff * interval '1 hour');
finish_period = date_trunc('hour',now()) + interval '1 minute'*finish_minute*5+(current_hour_diff * interval '1 hour') ;
END IF ;
RAISE NOTICE 'start_period = %', start_period;
RAISE NOTICE 'finish_period = %', finish_period;
FOR lock_rec IN
WITH act_queryid AS
(
SELECT
pid ,
timepoint ,
query_start AS started ,
MAX(timepoint) OVER (PARTITION BY pid , query_start ) AS finished ,
queryid
FROM
activity_hist.history_pg_stat_activity
WHERE
timepoint BETWEEN start_period and
finish_period
GROUP BY
pid ,
timepoint ,
query_start ,
queryid
),
lock_pids AS
(
SELECT
hl.pid ,
hl.locktype ,
hl.mode ,
hl.timepoint ,
MIN ( timepoint ) OVER (PARTITION BY pid , locktype ,mode ) as started
FROM
activity_hist.history_locking hl
WHERE
hl.timepoint between start_period and
finish_period
GROUP BY
hl.pid ,
hl.locktype ,
hl.mode ,
hl.timepoint
)
SELECT
lp.pid ,
lp.locktype ,
lp.mode ,
lp.timepoint ,
aq.queryid
FROM lock_pids lp LEFT OUTER JOIN act_queryid aq ON ( lp.pid = aq.pid AND lp.started BETWEEN aq.started AND aq.finished )
WHERE aq.queryid IS NOT NULL
GROUP BY
lp.pid ,
lp.locktype ,
lp.mode ,
lp.timepoint ,
aq.queryid
LOOP
UPDATE activity_hist.history_locking SET queryid = lock_rec.queryid
WHERE pid = lock_rec.pid AND locktype = lock_rec.locktype AND mode = lock_rec.mode AND timepoint = lock_rec.timepoint ;
END LOOP;
RETURN result ;
END
$$ LANGUAGE plpgsql;
Cov lus piav qhia: tus nqi ntawm queryid kem yog hloov kho nyob rau hauv lub history_locking rooj, thiab ces thaum ib tug tshiab muab faib yog tsim rau lub archive_locking rooj, tus nqi yuav muab khaws cia rau hauv cov keeb kwm qhov tseem ceeb.
Tsim tawm
Cov lus qhia dav dav ntawm cov txheej txheem dav dav.
TAM SIM NO LOCKTYPES
Thov
WITH
t AS
(
SELECT
locktype ,
mode ,
count(*) as total
FROM
activity_hist.archive_locking
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
NOT granted
GROUP BY
locktype ,
mode
)
SELECT
locktype ,
mode ,
total * interval '1 second' as duration
FROM t
ORDER BY 3 DESC
Piv Txwv:
| TXOJ KEV HLUB NTAWM LOCKTYPES --------------------+------------------------------------+ -------------------- | xauv hom | hom | lub sij hawm --------------------------------------------------------- --+-------------------------------- | kev lag luam | ShareLock | 19:39:26 | tug| AccessExclusiveLock | 00:03:35 +--------------------+-------------------------------- -------- +----------------
TXOJ CAI LOS NTAWM LOCKTYPES
Thov
WITH
t AS
(
SELECT
locktype ,
mode ,
count(*) as total
FROM
activity_hist.archive_locking
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
granted
GROUP BY
locktype ,
mode
)
SELECT
locktype ,
mode ,
total * interval '1 second' as duration
FROM t
ORDER BY 3 DESC
Piv Txwv:
| TXOJ CAI LOS NTAWM LOCKTYPES -------------------------------------------------------------- --------+-------------------- | xauv hom | hom | lub sij hawm --------------------------------------------------------- --+-------------------------------- | kev sib raug zoo| RowExclusiveLock | 51:11:10 | virtualxid| ExclusiveLock | 48:10:43 | kev lag luam | ExclusiveLock | 44:24:53 | kev sib raug zoo| AccessShareLock| 20:06:13 | tug| AccessExclusiveLock | 17:58:47 | tug| ExclusiveLock | 01:40:41 | kev sib raug zoo| ShareUpdateExclusiveLock| 00:26:41 | khoom | RowExclusiveLock | 00:00:01 | kev lag luam | ShareLock | 00:00:01 | ncua | ExclusiveLock | 00:00:01 +--------------------+-------------------------------- -------- +----------------
Cov ncauj lus kom ntxaws txog cov lus nug tshwj xeeb
TAM SIM NO LOCKTYPES NTAWM QUERYID
Thov
WITH
lt AS
(
SELECT
pid ,
locktype ,
mode ,
timepoint ,
queryid ,
blocking_pids ,
MIN ( timepoint ) OVER (PARTITION BY pid , locktype ,mode ) as started
FROM
activity_hist.archive_locking
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
NOT granted AND
queryid IS NOT NULL
GROUP BY
pid ,
locktype ,
mode ,
timepoint ,
queryid ,
blocking_pids
)
SELECT
lt.pid ,
lt.locktype ,
lt.mode ,
lt.started ,
lt.queryid ,
lt.blocking_pids ,
COUNT(*) * interval '1 second' as duration
FROM lt
GROUP BY
lt.pid ,
lt.locktype ,
lt.mode ,
lt.started ,
lt.queryid ,
lt.blocking_pids
ORDER BY 4
Piv Txwv:
| TSO RAU LOCKS LOS NTAWM LOCKTYPES LOS NTAWM QUERYID ----------+----------------+--------------------- -------------------------------------------------------------------- ----------------------+------------------------------------- | pid | xauv hom | hom | pib| queryid | thaiv_pids| lub sij hawm -------------------------------------------------------------- ----------------------+-------------------- -------------------------------------------------------------------- --- | 11288 | kev lag luam | ShareLock | 2019-09-17 10:00:00.302936 | 389015618226997618 | {11092}| 00:03:34 | 11626 | kev lag luam | ShareLock | 2019-09-17 10:00:21.380921 | 389015618226997618 | {12380}| 00:00:29 | 11626 | kev lag luam | ShareLock | 2019-09-17 10:00:21.380921 | 389015618226997618 | {11092}| 00:03:25 | 11626 | kev lag luam | ShareLock | 2019-09-17 10:00:21.380921 | 389015618226997618 | {12213}| 00:01:55 | 11626 | kev lag luam | ShareLock | 2019-09-17 10:00:21.380921 | 389015618226997618 | {12751}| 00:00:01 | 11629 | kev lag luam | ShareLock | 2019-09-17 10:00:24.331935 | 389015618226997618 | {11092}| 00:03:22 | 11629 | kev lag luam | ShareLock | 2019-09-17 10:00:24.331935 | 389015618226997618 | {12007}| 00:00:01 | 12007 | kev lag luam | ShareLock | 2019-09-17 10:05:03.327933 | 389015618226997618 | {11629}| 00:00:13 | 12007 | kev lag luam | ShareLock | 2019-09-17 10:05:03.327933 | 389015618226997618 | {11092}| 00:01:10 | 12007 | kev lag luam | ShareLock | 2019-09-17 10:05:03.327933 | 389015618226997618 | {11288}| 00:00:05 | 12213 | kev lag luam | ShareLock | 2019-09-17 10:06:07.328019 | 389015618226997618 | {12007}| 00:00:10 Nws
TXOJ CAI LOS NTAWM LOCKTYPES LOS NTAWM QUERYID
Thov
WITH
lt AS
(
SELECT
pid ,
locktype ,
mode ,
timepoint ,
queryid ,
blocking_pids ,
MIN ( timepoint ) OVER (PARTITION BY pid , locktype ,mode ) as started
FROM
activity_hist.archive_locking
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
granted AND
queryid IS NOT NULL
GROUP BY
pid ,
locktype ,
mode ,
timepoint ,
queryid ,
blocking_pids
)
SELECT
lt.pid ,
lt.locktype ,
lt.mode ,
lt.started ,
lt.queryid ,
lt.blocking_pids ,
COUNT(*) * interval '1 second' as duration
FROM lt
GROUP BY
lt.pid ,
lt.locktype ,
lt.mode ,
lt.started ,
lt.queryid ,
lt.blocking_pids
ORDER BY 4
Piv Txwv:
| TXOJ CAI LOS NTAWM LOCKTYPES LOS NTAWM QUERYID +----------------+----------+--------------------------------------+ -------------------------------------------------------------------- + --------------------+------------------------------------- | pid | xauv hom | hom | pib| queryid | thaiv_pids| lub sij hawm -------------------------------------------------------------- ----------------------+------------------------------------ ------------+------------------------------------ - | 11288 | kev sib raug zoo| RowExclusiveLock | 2019-09-17 10:00:00.302936 | 389015618226997618 | {11092}| 00:03:34 | 11092 | kev lag luam | ExclusiveLock | 2019-09-17 10:00:00.302936 | 389015618226997618 | {}| 00:03:34 | 11288 | kev sib raug zoo| RowExclusiveLock | 2019-09-17 10:00:00.302936 | 389015618226997618 | {}| 00:00:10 | 11092 | kev sib raug zoo| RowExclusiveLock | 2019-09-17 10:00:00.302936 | 389015618226997618 | {}| 00:03:34 | 11092 | virtualxid| ExclusiveLock | 2019-09-17 10:00:00.302936 | 389015618226997618 | {}| 00:03:34 | 11288 | virtualxid| ExclusiveLock | 2019-09-17 10:00:00.302936 | 389015618226997618 | {11092}| 00:03:34 | 11288 | kev lag luam | ExclusiveLock | 2019-09-17 10:00:00.302936 | 389015618226997618 | {11092}| 00:03:34 | 11288 | tug| AccessExclusiveLock | 2019-09-17 10:00:00.302936 | 389015618226997618 | {11092}| 00:03:34 ib
Siv lub xauv keeb kwm los txheeb xyuas qhov xwm txheej ua haujlwm.
- Ib qho kev thov nrog queryid=389015618226997618 ua tiav los ntawm cov txheej txheem nrog pid=11288 tau tos kev thaiv pib txij 2019-09-17 10:00:00 rau 3 feeb.
- Lub xauv tau tuav los ntawm tus txheej txheem nrog pid = 11092
- Cov txheej txheem nrog pid = 11092 ua tiav qhov kev thov nrog queryid=389015618226997618 pib txij 2019-09-17 10:00:00 tuav lub xauv rau 3 feeb.
Qhov no
Tam sim no, kuv vam tias, qhov nthuav tshaj plaws thiab muaj txiaj ntsig zoo yuav pib - sau cov txheeb cais thiab txheeb xyuas cov xwm txheej ntawm keeb kwm ntawm kev tos thiab thaiv.
Nyob rau hauv lub neej yav tom ntej, kuv xav ntseeg, peb yuav tau txais ib co sau ntawv (zoo ib yam li Oracle's metalink).
Feem ntau, nws yog vim li no tias cov txheej txheem siv tau tsim muaj rau txhua tus kom sai li sai tau.
Kuv yuav sim tshaj tawm qhov project ntawm github yav tom ntej.
Tau qhov twg los: www.hab.com