最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決PostgreSQL 執(zhí)行超時的情況

 更新時間:2021年01月16日 15:48:10   作者:朝雨憶輕塵  
這篇文章主要介紹了解決PostgreSQL 執(zhí)行超時的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

使用背景

最近在使用PostgreSQL的時候,在執(zhí)行一些數據庫事務的時候,先后出現了statement timetout 和idle-in-transaction timeout的問題,導致數據庫操作失敗。

經研究查找,PostgreSQL有關于SQL語句執(zhí)行超時和事務執(zhí)行超時的相關配置,而默認超時時間是10000毫秒,即10秒鐘的時間,這樣會導致執(zhí)行時間稍長的任務執(zhí)行失敗??梢酝ㄟ^修改PostgreSQL服務器配置文件的方式修改默認配置。

參數說明

statement_timeout
statement_timeout 在 postgresql 被用來控制語句執(zhí)行時長,單位是ms。
$ vi postgresql.conf 
#statement_timeout = 0         # in milliseconds, 0 is disabled

默認是0,表示語句可以一直執(zhí)行下去。

如果設置為10000,那就意味著語句最多可以執(zhí)行 10000ms = 10s。

建議設置為0,禁用該參數。

idle_in_transaction_session_timeout

PostgreSQL 9.6版本開始支持自動查殺超過指定時間的 idle in transaction 空閑事務連接,用于清理應用代碼中忘記關閉已開啟的事務,或者系統(tǒng)中存在僵死進程等。

idle_in_transaction_session_timeout 在 postgresql 被用來控制事務執(zhí)行時長,單位是ms。

$ vi postgresql.conf 
#idle_in_transaction_session_timeout = 0         # in milliseconds, 0 is disabled

默認是0,表示語句可以一直執(zhí)行下去。超時會報 FATAL: terminating connection due to idle-in-transaction timeout。

修改方法

查找配置

通過命令查找到postgresql配置文件的位置,用vi進行編輯。

find / -name "postgresql.conf"
vi /var/lib/pgsql/9.6/data/postgresql.conf

修改參數

進入vi編輯界面,可以通過vi查找命令定位到相關參數,修改成合適的時間,保存退出。

:/statement_timeout

重啟配置

通過以下命令,查找pg_ctl的位置,然后執(zhí)行 pg_ctl reload重新加載配置。

find / -name "pg_ctl"
/usr/pgsql-9.6/bin/pg_ctl reload

PG_CTL用法

啟動服務器

啟動服務器:

$ pg_ctl start

啟動服務器的一個例子,等到服務器啟動了才退出:

$ pg_ctl -w start

服務器使用 5433 端口,而且不帶 fsync 運行,使用:

$ pg_ctl -o "-F -p 5433" start

停止服務器

$ pg_ctl stop

使用 -m 選項停止服務器允許用戶控制如何關閉后端。

重啟服務器

這個命令幾乎等于先停止服務器然后再啟動它,只不過 pg_ctl 保存并重新使用上一次運行服務器的命令行參數。重啟服務器的最簡單的方法是:

$ pg_ctl restart

重啟服務器,等待其停止和重啟:

$ pg_ctl -w restart

使用 5433 端口重啟并且重啟后關閉 fsync :

$ pg_ctl -o "-F -p 5433" restart

顯示服務器狀態(tài)

下面是來自 pg_ctl 的狀態(tài)輸出的例子:

$ pg_ctl statuspg_ctl: server is running (pid: 13718)
Command line was:
/usr/local/pgsql/bin/postgres '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'

這就是在 restart 模式中被調用的命令行。

補充:PostgreSQL 設置單條SQL的執(zhí)行超時 - 防雪崩

背景

設置單條SQL的執(zhí)行超時,防雪崩。

通常來說可以在SQL發(fā)起前設置事務級超時參數,SQL執(zhí)行結束,重置。(如果SQL異常退出,會自動重置事務級參數)

例子

begin; 
...... 
set local statement_time='100ms'; 
select count(*) from a;  -- 這條SQL的執(zhí)行時間超過100MS則主動退出,并回滾整個事務  
set local statement_timeout to default; 
...... 
end; 

函數級超時例子 - statement_timeout不可用

例如這個QUERY,我們想讓它100毫秒超時。

select count(*) as cnt, id from a where id<$1 group by id;  

將它寫到函數中,在函數中設置超時

create or replace function f1(int) returns setof record as $$ 
declare 
begin 
 set local statement_timeout='100ms'; 
 return query select count(*) as cnt, id from a where id<$1 group by id;  
end; 
$$ language plpgsql strict ; 

調用SQL改成這樣

select cnt,id from f1(1) as t(cnt int8, id int);  

但是這么做實際上是沒有效果的,原因是statement_timeout的設計之初是為交互性SQL設計的,在postgres.c中。

所以需要plpgsql超時,需要通過插件HOOK來實現。

https://www.postgresql.org/message-id/flat/200702201200.53535.xzilla%40users.sourceforge.net#200702201200.53535.xzilla@users.sourceforge.net

statement_timeout is measured across an entire interactive command, not  
individual commands within a function; and the timeout that applies to  
an interactive command is determined at its beginning. So the above  
doesn't do what you think. 

參數級別

1、實例級

修改

postgresql.conf 

2、庫級

alter database dbname set parameter=?; 

3、用戶級

alter role rolname set parameter=?; 

4、會話級

set parameter=?; 

5、事務級

begin; 
set local parameter=?; 
.... 
end; 

6、函數級

alter function fun_name() set parameter=?; 

其他超時控制

1、空閑事務超時

idle_in_transaction_session_timeout = 2h  

2、鎖等待超時

lock_timeout = 1s

3、死鎖檢測超時間隔

deadlock_timeout = 1s

https://www.postgresql.org/docs/9.4/static/runtime-config-client.html

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • Postgresql和mysql的區(qū)別及說明

    Postgresql和mysql的區(qū)別及說明

    這篇文章主要介紹了Postgresql和mysql的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • PostgreSQL游標與索引選擇實例詳細介紹

    PostgreSQL游標與索引選擇實例詳細介紹

    這篇文章主要介紹了PostgreSQL游標與索引選擇優(yōu)化案例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09
  • PostgreSQL數據類型格式化函數操作

    PostgreSQL數據類型格式化函數操作

    這篇文章主要介紹了PostgreSQL數據類型格式化函數操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • postgresql查詢每個月的最后一天日期并對未查到的日期結果補0(操作示例)

    postgresql查詢每個月的最后一天日期并對未查到的日期結果補0(操作示例)

    這篇文章主要介紹了postgresql查詢每個月的最后一天日期,并對未查到的日期結果補0,pgsql需要使用函數使用date_trunc()函數找到指定月第一天,然后對該日期先加一個月在減一個月就能得到你傳給的日期的最后一天日期,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • PostgreSQL 實現列轉行問題

    PostgreSQL 實現列轉行問題

    這篇文章主要介紹了PostgreSQL 實現列轉行問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL如何查詢表大小(單獨查詢和批量查詢)

    PostgreSQL如何查詢表大小(單獨查詢和批量查詢)

    PostgreSQL提供了多個系統(tǒng)管理函數來查看表,索引表空間及數據庫的大小,這篇文章主要給大家介紹了關于PostgreSQL如何查詢表大小的相關資料,文中介紹的方法包括單獨查詢和批量查詢,需要的朋友可以參考下
    2024-02-02
  • Postgresql開啟遠程訪問的步驟全紀錄

    Postgresql開啟遠程訪問的步驟全紀錄

    postgre一般默認為本地連接,不支持遠程訪問,所以如果要開啟遠程訪問,需要更改安裝文件的配置。下面這篇文章主要給大家介紹了關于Postgresql開啟遠程訪問的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2018-03-03
  • postgresql 導出建表語句的命令操作

    postgresql 導出建表語句的命令操作

    這篇文章主要介紹了postgresql 導出建表語句的命令操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 詳解PostgreSQL 實現定時任務的 4 種方法

    詳解PostgreSQL 實現定時任務的 4 種方法

    這篇文章主要介紹了PostgreSQL 實現定時任務的 4 種方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Ubuntu中卸載Postgresql出錯的解決方法

    Ubuntu中卸載Postgresql出錯的解決方法

    這篇文章主要給大家介紹了關于在Ubuntu中卸載Postgresql出錯的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09

最新評論

内丘县| 赤壁市| 新疆| 平舆县| 大英县| 黄石市| 广元市| 万盛区| 乌鲁木齐县| 乌什县| 盐山县| 绵竹市| 桐庐县| 岐山县| 揭东县| 阳城县| 武义县| 鹿泉市| 盱眙县| 舞钢市| 蓝田县| 厦门市| 竹山县| 南乐县| 岳池县| 同仁县| 崇文区| 墨江| 杭州市| 黑河市| 六安市| 汕尾市| 乐东| 台北县| 寿阳县| 大兴区| 托克逊县| 青浦区| 施秉县| 无为县| 营山县|