佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > postgresql表死鎖問(wèn)題的排查方式

postgresql表死鎖問(wèn)題的排查方式

熱門標(biāo)簽:鐵路電話系統(tǒng) 服務(wù)外包 網(wǎng)站排名優(yōu)化 AI電銷 百度競(jìng)價(jià)排名 Linux服務(wù)器 地方門戶網(wǎng)站 呼叫中心市場(chǎng)需求

1.查詢激活的執(zhí)行中的sql,查看有哪些更新update的sql。

select *
from pg_stat_activity
where state = 'active';

2. 查詢表中存在的鎖

select a.locktype, a.database, a.pid, a.mode, a.relation, b.relname
from pg_locks a
join pg_class b on a.relation = b.oid
where lower(b.relname) = 'h5_game';

3. 殺掉死鎖進(jìn)程

select pg_terminate_backend(pid)
from pg_stat_activity
where state = 'active'
and pid != pg_backend_pid()
--and pid = 14172
and pid in (select a.pid
from pg_locks a
join pg_class b on a.relation = b.oid
where lower(b.relname) = 'news_content')

鎖模式

/* NoLock is not a lock mode, but a flag value meaning "don't get a lock" */
#define NoLock                 0
 
#define AccessShareLock         1        /* SELECT */
#define RowShareLock          2        /* SELECT FOR UPDATE/FOR SHARE */
#define RowExclusiveLock        3        /* INSERT, UPDATE, DELETE */
#define ShareUpdateExclusiveLock 4       /* VACUUM (non-FULL),ANALYZE, CREATE
                                         * INDEX CONCURRENTLY */
#define ShareLock                5        /* CREATE INDEX (WITHOUT CONCURRENTLY) */
#define ShareRowExclusiveLock  6        /* like EXCLUSIVE MODE, but allows ROW
                                         * SHARE */
#define ExclusiveLock          7        /* blocks ROW SHARE/SELECT...FOR
                                         * UPDATE */
#define AccessExclusiveLock       8        /* ALTER TABLE, DROP TABLE, VACUUM
                                         * FULL, and unqualified LOCK TABLE */

補(bǔ)充:Postgresql死鎖的處理

背景:

對(duì)表進(jìn)行所有操作都卡住,原因可能是更新表時(shí)導(dǎo)致這個(gè)表死鎖了,開(kāi)始進(jìn)行排查

解決一:查詢pg_stat_activity有沒(méi)有記錄

pg版本10.2

select pid,query,* from pg_stat_activity where datname='死鎖的數(shù)據(jù)庫(kù)' and wait_event_type = 'Lock';
select pg_cancel_backend('死鎖那條數(shù)據(jù)的pid值');##只能殺死select 語(yǔ)句, 對(duì)其他語(yǔ)句不生效
pg_terminate_backend('死鎖那條數(shù)據(jù)的pid值');#select,drop等各種操作

執(zhí)行后發(fā)現(xiàn)select和delete表時(shí)正常執(zhí)行,但truncate和drop表時(shí)會(huì)一直運(yùn)行,也不報(bào)錯(cuò)。

“drop table” 和 “truncate table” 需要申請(qǐng)排它鎖"ACCESS EXCLUSIVE", 執(zhí)行這個(gè)命令卡住時(shí),說(shuō)明此時(shí)這張表上還有操作正在進(jìn)行,比如查詢等,

那么只有等待這個(gè)查詢操作完成,“drop table” 或"truncate table"或者增加字段的SQL才能獲取這張表上的 "ACCESS EXCLUSIVE"鎖,操作才能進(jìn)行下去。

解決二:查詢pg_locks是否有這個(gè)對(duì)象的鎖

select oid,relname from pg_class where relname='table name';
select locktype,pid,relation,mode,granted,* from pg_locks where relation= '上面查詢出來(lái)的oid';
select pg_terminate_backend('進(jìn)程ID');

問(wèn)題解決?。?!

坑:一開(kāi)始不知道pg_cancel_backend(‘死鎖那條數(shù)據(jù)的pid值');##只能殺死select 語(yǔ)句, 對(duì)其他語(yǔ)句不生效,殺了進(jìn)程查詢發(fā)現(xiàn)還存在,反復(fù)殺反復(fù)存在,換了pg_terminate_backend(‘進(jìn)程ID')問(wèn)題就解決了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • java排查死鎖示例
  • Java檢測(cè)死鎖案例
  • 詳解通過(guò)SQL進(jìn)行分布式死鎖的檢測(cè)與消除
  • 如何解決Java多線程死鎖問(wèn)題
  • MySQL鎖等待與死鎖問(wèn)題分析
  • 死鎖詳解

標(biāo)簽:湘潭 衡水 銅川 仙桃 黃山 蘭州 崇左 湖南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《postgresql表死鎖問(wèn)題的排查方式》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    泸溪县| 新绛县| 东莞市| 奎屯市| 沁源县| 繁峙县| 垣曲县| 兰坪| 尼玛县| 理塘县| 嘉祥县| 黄浦区| 萨迦县| 湘阴县| 赞皇县| 高密市| 南华县| 香港| 会同县| 泾川县| 泽普县| 竹北市| 南和县| 稷山县| 平陆县| 山东| 龙井市| 尚志市| 怀柔区| 江阴市| 岚皋县| 临夏县| 罗定市| 泰顺县| 常德市| 姚安县| 莱芜市| 浑源县| 丰城市| 和田县| 乌拉特中旗|