亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

postgresql 數據庫更新慢的原因是什么

發布時間:2021-01-29 15:09:03 來源:億速云 閱讀:261 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關postgresql 數據庫更新慢的原因是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1.查看語句是否有問題

復制倆個一模一樣的表 和數據 手動執行語句 發現不到一分鐘就運行成功了 這樣就可以確認語句沒有問題

2.查找影響updata的因素

我的第一反應是不是有鎖 有鎖的情況會導致等待或者死鎖

查詢鎖

select w1.pid as 等待進程,
w1.mode as 等待鎖模式,
w2.usename as 等待用戶,
w2.query as 等待會話,
b1.pid as 鎖的進程,
b1.mode 鎖的鎖模式,
b2.usename as 鎖的用戶,
b2.query as 鎖的會話,
b2.application_name 鎖的應用,
b2.client_addr 鎖的IP地址,
b2.query_start 鎖的語句執行時間
from pg_locks w1
join pg_stat_activity w2 on w1.pid=w2.pid
join pg_locks b1 on w1.transactionid=b1.transactionid and w1.pid!=b1.pid
join pg_stat_activity b2 on b1.pid=b2.pid
where not w1.granted;
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid='62560'

查詢到有鎖 把鎖進程殺掉 重啟服務 繼續跟蹤 發現5分鐘后 又出現鎖了 反復試了幾次發現跟鎖沒有關系

3.查詢參數

首先看的的 是shared_buffers 參數,發現也沒有問題

postgresql 數據庫更新慢的原因是什么

4.收縮表 VACUUM

查詢數據進程時,發現自動收縮 也執行10分鐘還沒好 就查詢表收縮的情況

用于服務器監控,可查詢進程,時間消耗與鎖相關

SELECT 

C.relname 對象名稱,
l.locktype 可鎖對象的類型,
l.pid 進程id,
l.MODE 持有的鎖模式,
l.GRANTED 是否已經對鎖進行授權,
l.fastpath,
psa.datname 數據庫名稱,
psa.usesysid 用戶id,
psa.usename 用戶名稱,
psa.application_name 應用程序名稱,
psa.client_addr 連接的IP地址,
psa.client_port 連接使用的TCP端口號,
psa.backend_start 進程開始時間,
psa.xact_start 事務開始時間,
psa.query_start 事務執行此語句時間,
psa.state_change 事務狀態改變時間,
psa.wait_event_type 等待事件類型,
psa.wait_event 等待事件,
psa.STATE 查詢狀態,

backend_xid 事務是否有寫入操作,
backend_xmin 是否執事務快照,

psa.query 執行語句,
now( ) - query_start 持續時間

FROM

pg_locks l
INNER JOIN pg_stat_activity psa ON ( psa.pid = l.pid )
LEFT OUTER JOIN pg_class C ON ( l.relation = C.oid )
-- where l.relation = 'tb_base_apparatus'::regclass

where relkind ='r'
ORDER BY query_start asc

查詢是否到達自動清理的表

SELECT
 c.relname 表名,
 (current_setting('autovacuum_analyze_threshold')::NUMERIC(12,4))+(current_setting('autovacuum_analyze_scale_factor')::NUMERIC(12,4))*reltuples AS 自動分析閾值,
 (current_setting('autovacuum_vacuum_threshold')::NUMERIC(12,4))+(current_setting('autovacuum_vacuum_scale_factor')::NUMERIC(12,4))*reltuples AS 自動清理閾值,
 reltuples::DECIMAL(19,0) 活元組數,
 n_dead_tup::DECIMAL(19,0) 死元組數
FROM
 pg_class c 

LEFT JOIN pg_stat_all_tables d

 ON C.relname = d.relname
WHERE
 c.relname LIKE'tb%' AND reltuples > 0
 AND n_dead_tup > (current_setting('autovacuum_analyze_threshold')::NUMERIC(12,4))+(current_setting('autovacuum_analyze_scale_factor')::NUMERIC(12,4))*reltuples;

然后發現死元祖太多
然后我手動收縮了這個表 之后更新的就快了

VACUUM FULL VERBOSE 表名;
VACUUM FULL VERBOSE ANALYZE 表名;

以上就是postgresql 數據庫更新慢的原因是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

鸡泽县| 社旗县| 大城县| 登封市| 赣州市| 托克托县| 贞丰县| 获嘉县| 双鸭山市| 清远市| 抚顺市| 五莲县| 布尔津县| 舞阳县| 博湖县| 准格尔旗| 南康市| 象州县| 读书| 通化市| 平远县| 荣昌县| 连山| 靖边县| 隆昌县| 昌邑市| 眉山市| 禹城市| 饶河县| 财经| 镇平县| 高邮市| 类乌齐县| 英山县| 城市| 梁山县| 聂荣县| 沁源县| 灌阳县| 吉隆县| 库车县|