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

PostgreSQL開啟慢查詢?nèi)罩镜姆椒ㄔ斀?/h1>
 更新時(shí)間:2025年11月18日 09:06:03   作者:檀越@新空間  
PostgreSQL?可以通過配置參數(shù)來(lái)記錄執(zhí)行時(shí)間超過指定閾值的查詢,即慢查詢?nèi)罩?下面小編就為大家詳細(xì)講講開啟慢查詢?nèi)罩镜脑敿?xì)步驟吧

PostgreSQL 可以通過配置參數(shù)來(lái)記錄執(zhí)行時(shí)間超過指定閾值的查詢,即慢查詢?nèi)罩尽R韵率情_啟慢查詢?nèi)罩镜牟襟E:

1. 修改 postgresql.conf 配置文件

找到 PostgreSQL 的配置文件(通常位于數(shù)據(jù)目錄中,如 /var/lib/postgresql/data/postgresql.conf/etc/postgresql/[版本]/main/postgresql.conf),修改以下參數(shù):

# 開啟日志記錄
logging_collector = on

# 設(shè)置日志輸出目錄(可選)
log_directory = 'pg_log'

# 設(shè)置日志文件名模式(可選)
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

# 記錄慢查詢(單位:毫秒)
log_min_duration_statement = 1000  # 記錄執(zhí)行超過1秒的查詢

# 可選:記錄所有語(yǔ)句(包括慢查詢)
#log_statement = 'all'  # 可選值為 none, ddl, mod, all

# 可選:記錄執(zhí)行計(jì)劃
#auto_explain.log_min_duration = 1000
#auto_explain.log_analyze = on
#auto_explain.log_buffers = on
#auto_explain.log_timing = on
#auto_explain.log_triggers = on
#auto_explain.log_verbose = on
#auto_explain.log_nested_statements = on

2. 重新加載配置

不需要重啟 PostgreSQL 服務(wù),只需執(zhí)行以下命令重新加載配置:

# 方法1:使用 psql
psql -U postgres -c "SELECT pg_reload_conf();"

# 方法2:使用系統(tǒng)命令
sudo systemctl reload postgresql  # 根據(jù)您的系統(tǒng)和服務(wù)管理工具可能不同

3. 驗(yàn)證配置

-- 檢查當(dāng)前配置
SELECT name, setting, unit FROM pg_settings
WHERE name IN ('logging_collector', 'log_min_duration_statement');

4. 查看慢查詢?nèi)罩?/h2>

日志文件默認(rèn)會(huì)生成在配置的 log_directory 目錄中,文件名遵循 log_filename 模式。

5.高級(jí)選項(xiàng)

記錄執(zhí)行計(jì)劃:?jiǎn)⒂?auto_explain 模塊可以記錄查詢的執(zhí)行計(jì)劃

shared_preload_libraries = 'auto_explain'
auto_explain.log_min_duration = '1s'
auto_explain.log_analyze = on

按用戶或數(shù)據(jù)庫(kù)記錄

# 只記錄特定數(shù)據(jù)庫(kù)的慢查詢
log_min_duration_statement = 1000
log_connections = on
log_disconnections = on
log_line_prefix = '%m [%p] %q%u@%d '

日志輪轉(zhuǎn)

log_rotation_age = 1d      # 每天輪轉(zhuǎn)
log_rotation_size = 10MB   # 或按大小輪轉(zhuǎn)

6.知識(shí)擴(kuò)展

PostgreSQL 慢查詢獲取方法整理

1.獲取慢查詢的方法

  • 方法一 :開啟慢查詢?nèi)罩?/li>
  • 方法二 :使用pg_stat_statementes擴(kuò)展(推薦)
  • 方法三 : 捕獲當(dāng)前連接中的查詢

2.開啟慢查詢?nèi)罩?/p>

    postgresql.conf
        log_destination = 'csvlog'           #日志基礎(chǔ)設(shè)置
        logging_collector = on                #日志基礎(chǔ)設(shè)置(重啟生效)
        log_directory = 'pg_log'              #日志基礎(chǔ)設(shè)置
        log_filename = 'postgresql-%Y-%m-%d.log'   #日志基礎(chǔ)設(shè)置
        log_file_mode = 0600                 #日志基礎(chǔ)設(shè)置
        log_truncate_on_rotation = off   #日志基礎(chǔ)設(shè)置
        log_rotation_age = 1d                #日志基礎(chǔ)設(shè)置
        log_rotation_size = 0                 #日志基礎(chǔ)設(shè)置
        log_statement = none                #需要記錄的語(yǔ)句,默認(rèn)只記錄錯(cuò)誤日志。none,ddl,mod,all
        log_min_duration_statement = 500   #慢查詢最小時(shí)長(zhǎng),毫秒。log_statement=all同時(shí)設(shè)置時(shí)失效
        shared_preload_libraries = 'auto_explain'       #只需要編譯,不需要安裝擴(kuò)展
        auto_explain.log_min_duration = 1s               #超過時(shí)長(zhǎng)的慢查詢,給出執(zhí)行計(jì)劃
        postgres=# select pg_reload_conf();
        針對(duì)某個(gè)用戶或數(shù)據(jù)說(shuō)庫(kù)進(jìn)行設(shè)置
        postgres=# alter database db_name set log_min_duration_statement=5000;
        postgres=# alter user user_name set log_min_duration_statement=1000;

3.pg_stat_statementes擴(kuò)展(推薦)

pg_stat_statements 模塊提供了跟蹤服務(wù)器執(zhí)行的所有SQL語(yǔ)句的執(zhí)行統(tǒng)計(jì)信息的方法。如果想要開啟模塊,必須在配置文件中將 pg_stat_statements 添加到 shared_preload_libraries中。因?yàn)樗枰~外的共享內(nèi)存,所以必須重啟服務(wù)添加或刪除。當(dāng) pg_stat_statements 被加載,會(huì)跟蹤服務(wù)器所有的數(shù)據(jù)庫(kù)的統(tǒng)計(jì)信息。

為了安全,只有superuser和 pg_read_all_stats role 用戶可以訪問 SQL text 和 queryid。其他用戶可以訪問 statistics。

根據(jù)內(nèi)部哈希計(jì)算具有相同的查詢結(jié)構(gòu),可計(jì)劃查詢(即SELECT,INSERT,UPDATE和DELETE)就會(huì)合并到單個(gè)pg_stat_statements條目中。 通常,如果兩個(gè)查詢?cè)谡Z(yǔ)義上等效,則除了查詢中出現(xiàn)的文字常量的值之外,它們將被視為相同。 但是,實(shí)用命令(即所有其他命令)嚴(yán)格地根據(jù)其文本查詢字符串進(jìn)行比較。

安裝配置及使用

安裝

 cd pg_soft/contrib/pg_stat_statements
        make && make install
        postgres=# create extension pg_stat_statements;

重要配置

 shared_preload_libraries='auto_explain,pg_stat_statements'
        log_min_duration_statement = 100     #慢查詢最小時(shí)長(zhǎng),毫秒
        track_activity_query_size = 10000     #SQL文本的最大長(zhǎng)度
        pg_stat_statements.max = 10000     #跟蹤模塊中最多保留多少條統(tǒng)計(jì)信息,通過LRU算法。
        pg_stat_statements.track = all      #all包括函數(shù)內(nèi)的SQL, top不包含函數(shù)內(nèi)的sql), none
        pg_stat_statements.track_utility = true     #是否跟蹤非DML語(yǔ)句 (例如DDL,DCL)
        pg_stat_statements.save = true     #表示當(dāng)pg停止時(shí),把信息存入磁盤文件。

使用

#重置統(tǒng)計(jì)信息
select pg_stat_statements_reset() ;
#最慢的TOP10
SELECT * FROM pg_stat_statements order by total_time desc limit 10;

4.捕獲當(dāng)前連接中的查詢

select *
from pg_stat_activity
where state<>'idle' and now()-query_start > interval '1 s' order by query_start ;

到此這篇關(guān)于PostgreSQL開啟慢查詢?nèi)罩镜姆椒ㄔ斀獾奈恼戮徒榻B到這了,更多相關(guān)PostgreSQL慢查詢?nèi)罩緝?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

遵义市| 津南区| 宜川县| 桃园县| 庄河市| 浑源县| 肇东市| 招远市| 株洲县| 昌黎县| 怀集县| 博乐市| 西充县| 普兰店市| 红安县| 宜黄县| 镇江市| 新泰市| 随州市| 布尔津县| 双牌县| 合肥市| 罗定市| 清水县| 南京市| 永福县| 林周县| 金平| 宿迁市| 鱼台县| 崇阳县| 阳谷县| 宁波市| 河间市| 台中市| 曲麻莱县| 东乌| 社会| 玉树县| 普定县| 金湖县|