濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 解決postgresql 數(shù)據(jù)庫(kù) update更新慢的原因

解決postgresql 數(shù)據(jù)庫(kù) update更新慢的原因

熱門(mén)標(biāo)簽:地圖標(biāo)注要花多少錢(qián) 400電話申請(qǐng)客服 天津開(kāi)發(fā)區(qū)地圖標(biāo)注app 電話機(jī)器人怎么換人工座席 電銷(xiāo)機(jī)器人能補(bǔ)救房產(chǎn)中介嗎 移動(dòng)外呼系統(tǒng)模擬題 廣州電銷(xiāo)機(jī)器人公司招聘 江蘇400電話辦理官方 濟(jì)南外呼網(wǎng)絡(luò)電話線路

;大約140000條數(shù)據(jù)) 竟然運(yùn)行了一個(gè)小時(shí)還沒(méi)有完成
下面是我的幾點(diǎn)解決方案
我的update 語(yǔ)句 是從一個(gè)臨時(shí)表更新值到另一個(gè)正式表
因?yàn)榫唧w數(shù)據(jù)需要保密,我就不截圖了 只說(shuō)說(shuō)大體思路,與方法

1.查看語(yǔ)句是否有問(wèn)題

復(fù)制倆個(gè)一模一樣的表 和數(shù)據(jù) 手動(dòng)執(zhí)行語(yǔ)句 發(fā)現(xiàn)不到一分鐘就運(yùn)行成功了 這樣就可以確認(rèn)語(yǔ)句沒(méi)有問(wèn)題

2.查找影響updata的因素

我的第一反應(yīng)是不是有鎖 有鎖的情況會(huì)導(dǎo)致等待或者死鎖

查詢鎖

select w1.pid as 等待進(jìn)程,
w1.mode as 等待鎖模式,
w2.usename as 等待用戶,
w2.query as 等待會(huì)話,
b1.pid as 鎖的進(jìn)程,
b1.mode 鎖的鎖模式,
b2.usename as 鎖的用戶,
b2.query as 鎖的會(huì)話,
b2.application_name 鎖的應(yīng)用,
b2.client_addr 鎖的IP地址,
b2.query_start 鎖的語(yǔ)句執(zhí)行時(shí)間
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'

查詢到有鎖 把鎖進(jìn)程殺掉 重啟服務(wù) 繼續(xù)跟蹤 發(fā)現(xiàn)5分鐘后 又出現(xiàn)鎖了 反復(fù)試了幾次發(fā)現(xiàn)跟鎖沒(méi)有關(guān)系

3.查詢參數(shù)

首先看的的 是shared_buffers 參數(shù),發(fā)現(xiàn)也沒(méi)有問(wèn)題

4.收縮表 VACUUM

查詢數(shù)據(jù)進(jìn)程時(shí),發(fā)現(xiàn)自動(dòng)收縮 也執(zhí)行10分鐘還沒(méi)好 就查詢表收縮的情況

用于服務(wù)器監(jiān)控,可查詢進(jìn)程,時(shí)間消耗與鎖相關(guān)

SELECT 

C.relname 對(duì)象名稱(chēng),
l.locktype 可鎖對(duì)象的類(lèi)型,
l.pid 進(jìn)程id,
l.MODE 持有的鎖模式,
l.GRANTED 是否已經(jīng)對(duì)鎖進(jìn)行授權(quán),
l.fastpath,
psa.datname 數(shù)據(jù)庫(kù)名稱(chēng),
psa.usesysid 用戶id,
psa.usename 用戶名稱(chēng),
psa.application_name 應(yīng)用程序名稱(chēng),
psa.client_addr 連接的IP地址,
psa.client_port 連接使用的TCP端口號(hào),
psa.backend_start 進(jìn)程開(kāi)始時(shí)間,
psa.xact_start 事務(wù)開(kāi)始時(shí)間,
psa.query_start 事務(wù)執(zhí)行此語(yǔ)句時(shí)間,
psa.state_change 事務(wù)狀態(tài)改變時(shí)間,
psa.wait_event_type 等待事件類(lèi)型,
psa.wait_event 等待事件,
psa.STATE 查詢狀態(tài),

backend_xid 事務(wù)是否有寫(xiě)入操作,
backend_xmin 是否執(zhí)事務(wù)快照,

psa.query 執(zhí)行語(yǔ)句,
now( ) - query_start 持續(xù)時(shí)間

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

查詢是否到達(dá)自動(dòng)清理的表

SELECT
 c.relname 表名,
 (current_setting('autovacuum_analyze_threshold')::NUMERIC(12,4))+(current_setting('autovacuum_analyze_scale_factor')::NUMERIC(12,4))*reltuples AS 自動(dòng)分析閾值,
 (current_setting('autovacuum_vacuum_threshold')::NUMERIC(12,4))+(current_setting('autovacuum_vacuum_scale_factor')::NUMERIC(12,4))*reltuples AS 自動(dòng)清理閾值,
 reltuples::DECIMAL(19,0) 活元組數(shù),
 n_dead_tup::DECIMAL(19,0) 死元組數(shù)
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;

然后發(fā)現(xiàn)死元祖太多
然后我手動(dòng)收縮了這個(gè)表 之后更新的就快了

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

5.總結(jié)

遇到這種情況 先需求確保你的sql語(yǔ)句沒(méi)有問(wèn)題,然后查看有沒(méi)有鎖 可以EXPLAIN 一下 ,看看數(shù)據(jù)庫(kù)參數(shù),是不是數(shù)據(jù)庫(kù)的性能原因 最后再看看是不是需要收縮表

到此這篇關(guān)于解決postgresql 數(shù)據(jù)庫(kù) update更新慢的原因的文章就介紹到這了,更多相關(guān)postgresql 數(shù)據(jù)庫(kù) update更新慢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • PostgreSQL實(shí)現(xiàn)批量插入、更新與合并操作的方法
  • 基于PostgreSQL和mysql數(shù)據(jù)類(lèi)型對(duì)比兼容
  • 將MySQL數(shù)據(jù)庫(kù)移植為PostgreSQL
  • PostgreSQL使用MySQL外表的步驟詳解(mysql_fdw)
  • PostgreSQL使用MySQL外表的步驟詳解(mysql_fdw)
  • 實(shí)現(xiàn)MySQL + PostgreSQL批量插入更新insertOrUpdate

標(biāo)簽:榆林 溫州 濮陽(yáng) 海西 杭州 昭通 寶雞 辛集

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解決postgresql 數(shù)據(jù)庫(kù) update更新慢的原因》,本文關(guān)鍵詞  解決,postgresql,數(shù)據(jù)庫(kù),update,;如發(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)文章
  • 下面列出與本文章《解決postgresql 數(shù)據(jù)庫(kù) update更新慢的原因》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于解決postgresql 數(shù)據(jù)庫(kù) update更新慢的原因的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    石屏县| 章丘市| 巴南区| 博乐市| 驻马店市| 墨竹工卡县| 顺平县| 施甸县| 涡阳县| 盘锦市| 绥德县| 洪雅县| 互助| 岢岚县| 景德镇市| 吐鲁番市| 溧阳市| 缙云县| 利川市| 武定县| 会理县| 楚雄市| 大理市| 准格尔旗| 广平县| 皮山县| 灌阳县| 鱼台县| 宁陵县| 名山县| 岳阳县| 铜山县| 花莲县| 金门县| 勐海县| 将乐县| 比如县| 神池县| 马鞍山市| 绥阳县| 和政县|