91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在postgresql中排查表死鎖的問題

發布時間:2021-01-06 15:28:56 來源:億速云 閱讀:773 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關怎么在postgresql中排查表死鎖的問題,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1.查詢激活的執行中的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) = 'h6_game';

3. 殺掉死鎖進程

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 */

補充:Postgresql死鎖的處理

背景:

對表進行所有操作都卡住,原因可能是更新表時導致這個表死鎖了,開始進行排查

解決一:查詢pg_stat_activity有沒有記錄

pg版本10.2

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

執行后發現select和delete表時正常執行,但truncate和drop表時會一直運行,也不報錯。

“drop table” 和 “truncate table” 需要申請排它鎖"ACCESS EXCLUSIVE", 執行這個命令卡住時,說明此時這張表上還有操作正在進行,比如查詢等,

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

解決二:查詢pg_locks是否有這個對象的鎖

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

問題解決!!!

坑:一開始不知道pg_cancel_backend(‘死鎖那條數據的pid值');##只能殺死select 語句, 對其他語句不生效,殺了進程查詢發現還存在,反復殺反復存在,換了pg_terminate_backend(‘進程ID')問題就解決了。

以上就是怎么在postgresql中排查表死鎖的問題,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赤城县| 新营市| 武功县| 静安区| 邓州市| 绥化市| 伊金霍洛旗| 焉耆| 班玛县| 威远县| 应城市| 广平县| 汶川县| 霍山县| 高陵县| 司法| 兖州市| 鞍山市| 射洪县| 色达县| 沧源| 准格尔旗| 开封市| 深水埗区| 张家口市| 南通市| 北安市| 黑山县| 柳林县| 黑龙江省| 阜阳市| 浙江省| 光泽县| 朝阳区| 河东区| 邛崃市| 南康市| 读书| 东阳市| 小金县| 岚皋县|