PostgreSQL?auto_explain的具體使用
一、概述
auto_explain 插件可以實(shí)現(xiàn)在數(shù)據(jù)庫(kù)日志中自動(dòng)記錄慢 SQL 執(zhí)行計(jì)劃。PostgreSQL 編譯安裝時(shí)使用了 make world & make install-world
命令,則所有內(nèi)置插件(包括 auto_explain)會(huì)默認(rèn)被安裝到數(shù)據(jù)庫(kù)中,可直接調(diào)用。在 PostgreSQL 中執(zhí)行 LOAD 'auto_explain';
若無(wú)報(bào)錯(cuò)則表明插件已存在。PostgreSQL 主流穩(wěn)定版本 9.x 及以上均已支持。
二、使用
2.1 session_preload_libraries 調(diào)用(用戶級(jí)別)
--調(diào)用 ALTER ROLE u1 SET session_preload_libraries = 'auto_explain'; ALTER ROLE u1 SET auto_explain.log_min_duration = '3s'; --u1 用戶新連入數(shù)據(jù)庫(kù)的會(huì)話,執(zhí)行超3s的sql將在數(shù)據(jù)庫(kù)日志中打印執(zhí)行計(jì)劃 2025-05-27 14:01:10.821 CST [3335] LOG: duration: 4004.207 ms plan: Query Text: SELECT pg_sleep(4); Result (cost=0.00..0.01 rows=1 width=4) --取消調(diào)用 ALTER ROLE u1 set session_preload_libraries = default; ALTER ROLE u1 set session_preload_libraries = default;
2.2 LOAD 調(diào)用(會(huì)話級(jí)別)
--調(diào)用 LOAD 'auto_explain'; set auto_explain.log_min_duration = '3s'; --當(dāng)前會(huì)話,執(zhí)行超3s的sql將在數(shù)據(jù)庫(kù)日志中打印執(zhí)行計(jì)劃 2025-05-27 14:15:03.547 CST [3581] LOG: duration: 4004.732 ms plan: Query Text: SELECT pg_sleep(4); Result (cost=0.00..0.01 rows=1 width=4) --取消調(diào)用 臨時(shí)調(diào)用,退出當(dāng)前會(huì)話即可。
2.3 shared_preload_libraries 調(diào)用(全局級(jí)別)
--調(diào)用(若未配置環(huán)境變量$PGDATA替換為postgresql.conf所在實(shí)際路徑) cat >> $PGDATA/postgresql.conf << 'eof' shared_preload_libraries = 'auto_explain' auto_explain.log_min_duration = '3s' eof psql postgres postgres -c 'checkpoint' pg_ctl restart --新連入數(shù)據(jù)庫(kù)的會(huì)話,執(zhí)行超3s的sql將在數(shù)據(jù)庫(kù)日志中打印執(zhí)行計(jì)劃 2025-05-27 14:25:30.559 CST [3884] LOG: duration: 5005.176 ms plan: Query Text: SELECT pg_sleep(5); Result (cost=0.00..0.01 rows=1 width=4) --取消調(diào)用 sed -i '/^shared_preload_libraries = '\''auto_explain'\''/d' $PGDATA/postgresql.conf sed -i '/^auto_explain.log_min_duration = '\''3s'\''/d' $PGDATA/postgresql.conf psql postgres postgres -c 'checkpoint' pg_ctl restart
三、對(duì)比
方式 | 生效范圍 | 是否需要重啟 | 靈活性 | 適用場(chǎng)景 | 主要缺點(diǎn) |
---|---|---|---|---|---|
shared_preload_libraries | 全局 | 是 | 低 | 長(zhǎng)期全局監(jiān)控 | 需重啟,可能資源浪費(fèi) |
LOAD | 當(dāng)前會(huì)話 | 否 | 高 | 臨時(shí)調(diào)試 | 手動(dòng)操作,無(wú)法自動(dòng)化 |
session_preload_libraries | 新會(huì)話 | 否 | 中 | 按會(huì)話/用戶自動(dòng)啟用 | 僅對(duì)新會(huì)話生效,參數(shù)限制 |
生產(chǎn)環(huán)境長(zhǎng)期監(jiān)控:優(yōu)先使用 shared_preload_libraries
,全局配置過(guò)濾條件(如 log_min_duration
)減少日志量。
臨時(shí)診斷:使用 LOAD
命令,靈活且不影響其他會(huì)話。
特定用戶/應(yīng)用分析:使用 session_preload_libraries
,通過(guò)連接參數(shù)或角色配置實(shí)現(xiàn)按需加載。
四、其他參數(shù)介紹
詳情參考官網(wǎng):https://www.postgresql.org/docs/current/auto-explain.html
auto_explain.log_min_duration (整數(shù)):控制執(zhí)行計(jì)劃日志記錄的最小語(yǔ)句執(zhí)行時(shí)間(單位:毫秒)。設(shè)為
0
時(shí)記錄所有執(zhí)行計(jì)劃。默認(rèn)值-1
表示禁用日志記錄。例如:設(shè)置為250
時(shí),所有執(zhí)行時(shí)間 ≥250 毫秒的語(yǔ)句將被記錄。僅超級(jí)用戶可修改此參數(shù)。auto_explain.log_parameter_max_length (整數(shù)):控制查詢參數(shù)值的日志記錄方式。默認(rèn)值
-1
表示完整記錄參數(shù)值。0
禁用參數(shù)值記錄。大于0
時(shí),將參數(shù)值截?cái)酁橹付ㄗ止?jié)數(shù)。僅超級(jí)用戶可修改此參數(shù)。auto_explain.log_analyze (布爾值):?jiǎn)⒂煤螅涗泩?zhí)行計(jì)劃時(shí)輸出
EXPLAIN ANALYZE
而非普通EXPLAIN
結(jié)果。默認(rèn)值:off
。僅超級(jí)用戶可修改此參數(shù)。auto_explain.log_buffers (布爾值):控制是否在日志中輸出緩沖區(qū)使用統(tǒng)計(jì)信息(等效于
EXPLAIN
的BUFFERS
選項(xiàng))。僅在auto_explain.log_analyze
啟用時(shí)生效。默認(rèn)值:off
。僅超級(jí)用戶可修改此參數(shù)。auto_explain.log_wal (布爾值):控制是否在日志中輸出 WAL 使用統(tǒng)計(jì)信息(等效于
EXPLAIN
的WAL
選項(xiàng))。僅在auto_explain.log_analyze
啟用時(shí)生效。默認(rèn)值:off
。僅超級(jí)用戶可修改此參數(shù)。auto_explain.log_timing (布爾值):控制是否在日志中輸出每個(gè)節(jié)點(diǎn)的定時(shí)信息(等效于
EXPLAIN
的TIMING
選項(xiàng))。禁用后可減少系統(tǒng)時(shí)鐘讀取開(kāi)銷,適用于僅需實(shí)際行數(shù)而非精確時(shí)間的場(chǎng)景。僅在auto_explain.log_analyze
啟用時(shí)生效。默認(rèn)值:on
。僅超級(jí)用戶可修改此參數(shù)。auto_explain.log_triggers (布爾值):控制是否在日志中包含觸發(fā)器執(zhí)行統(tǒng)計(jì)信息。僅在
auto_explain.log_analyze
啟用時(shí)生效。默認(rèn)值:off
。僅超級(jí)用戶可修改此參數(shù)。auto_explain.log_verbose (布爾值):控制是否在日志中輸出詳細(xì)執(zhí)行計(jì)劃信息(等效于
EXPLAIN
的VERBOSE
選項(xiàng))。默認(rèn)值:off
。僅超級(jí)用戶可修改此參數(shù)。auto_explain.log_settings (布爾值):控制是否在日志中輸出影響查詢規(guī)劃的修改后配置選項(xiàng)信息(僅顯示與內(nèi)置默認(rèn)值不同的選項(xiàng))。默認(rèn)值:
off
。僅超級(jí)用戶可修改此參數(shù)。auto_explain.log_format (枚舉):指定
EXPLAIN
輸出格式??蛇x值為text
、xml
、json
和yaml
,默認(rèn)為text
。僅超級(jí)用戶可修改此參數(shù)。auto_explain.log_level (枚舉):設(shè)置自動(dòng)解釋查詢計(jì)劃的日志級(jí)別。有效值為
DEBUG5
、DEBUG4
、DEBUG3
、DEBUG2
、DEBUG1
、INFO
、NOTICE
、WARNING
和LOG
,默認(rèn)為LOG
。僅超級(jí)用戶可修改此參數(shù)。auto_explain.log_nested_statements (布爾值):控制是否記錄嵌套語(yǔ)句(函數(shù)內(nèi)部執(zhí)行的語(yǔ)句)。設(shè)為
off
時(shí)僅記錄頂層查詢計(jì)劃。默認(rèn)值:off
。僅超級(jí)用戶可修改此參數(shù)。auto_explain.sample_rate (實(shí)數(shù)):設(shè)置每個(gè)會(huì)話中僅解釋部分語(yǔ)句的比例。默認(rèn)值
1
表示解釋所有查詢。嵌套語(yǔ)句要么全解釋,要么全不解釋。僅超級(jí)用戶可修改此參數(shù)。
到此這篇關(guān)于PostgreSQL auto_explain的文章就介紹到這了,更多相關(guān)PostgreSQL auto_explain內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PostgreSQL截取字符串到指定字符位置詳細(xì)示例
這篇文章主要給大家介紹了關(guān)于PostgreSQL截取字符串到指定字符位置的相關(guān)資料,PostgreSQL數(shù)據(jù)庫(kù)拼接字符串函數(shù)是一種非常重要的函數(shù),使用它可以方便地將不同的字符串進(jìn)行拼接操作,從而得到我們需要的結(jié)果,需要的朋友可以參考下2023-07-07postgresql 實(shí)現(xiàn)查詢某時(shí)間區(qū)間的所有日期案例
這篇文章主要介紹了postgresql 實(shí)現(xiàn)查詢某時(shí)間區(qū)間的所有日期案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01PostgreSQL 查看數(shù)據(jù)庫(kù),索引,表,表空間大小的示例代碼
PostgreSQL 提供了多個(gè)系統(tǒng)管理函數(shù)來(lái)查看表,索引,表空間及數(shù)據(jù)庫(kù)的大小,下面詳細(xì)介紹一下2013-08-08CentOS PostgreSQL 12 主從復(fù)制(主從切換)操作
這篇文章主要介紹了CentOS PostgreSQL 12 主從復(fù)制(主從切換)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01使用docker compose啟動(dòng)postgresql的示例代碼
要在啟動(dòng) PostgreSQL 容器時(shí)執(zhí)行特定的初始化文件,可以使用 Docker 的 docker-entrypoint-initdb.d 目錄,這個(gè)目錄下的 SQL 文件會(huì)在容器啟動(dòng)時(shí)被自動(dòng)執(zhí)行,下面是如何修改 Docker Compose 配置文件,以便在啟動(dòng)時(shí)執(zhí)行初始化 SQL 腳本,需要的朋友可以參考下2024-10-10postgresql 實(shí)現(xiàn)多表關(guān)聯(lián)刪除
這篇文章主要介紹了postgresql 實(shí)現(xiàn)多表關(guān)聯(lián)刪除操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01在docker上部署postgreSQL主從的超詳細(xì)步驟
使用Docker能夠更加高效地部署和管理應(yīng)用程序,提高開(kāi)發(fā)和運(yùn)維的效率,下面這篇文章主要給大家介紹了關(guān)于在docker上部署postgreSQL主從的超詳細(xì)步驟,文中通過(guò)代碼及圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08postgresql數(shù)據(jù)庫(kù)如何查看數(shù)據(jù)中表的信息
這篇文章主要給大家介紹了關(guān)于postgresql數(shù)據(jù)庫(kù)如何查看數(shù)據(jù)中表信息的相關(guān)資料,要查詢數(shù)據(jù)表信息,需要用到 系統(tǒng)表或系統(tǒng)視圖等,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04sqoop讀取postgresql數(shù)據(jù)庫(kù)表格導(dǎo)入到hdfs中的實(shí)現(xiàn)
這篇文章主要介紹了sqoop讀取postgresql數(shù)據(jù)庫(kù)表格導(dǎo)入到hdfs中的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12