查询慢sql

本文介绍了当服务器数据库响应变慢时,如何通过SQL查询识别慢SQL并查看详细信息,包括PID、运行时间等。同时,提供了解除表锁和终止慢查询的方法,如使用`pg_cancel_backend`函数。

如果服务器数据库反应突然巨慢,估计是有慢sql

运行以下sql可以看到慢sql的一些详情PID,运行的sql语句。。。

SELECT
pid,
datname,
usename,
client_addr,
application_name,
STATE,
backend_start,
xact_start,
xact_stay,
query_start,
query_stay,
REPLACE ( query, chr( 10 ), ’ ’ ) AS query
FROM
(
SELECT
pgsa.pid AS pid,
pgsa.datname AS datname,
pgsa.usename AS usename,
pgsa.client_addr client_addr,
pgsa.application_name AS application_name,
pgsa.STATE AS STATE,
pgsa.backend_start AS backend_start,
pgsa.xact_start AS xact_start,
EXTRACT ( epoch FROM ( now( ) - pgsa.xact_start ) ) AS xact_stay,
pgsa.query_start AS query_start,
EXTRACT ( epoch FROM ( now( ) - pgsa.query_start ) ) AS query_stay,
pgsa.query AS query
FROM
pg_stat_activity AS pgsa
WHERE
pgsa.STATE != ‘idle’
AND pgsa.STATE != ‘idle in transaction’
AND pgsa.STATE != ‘idle in transaction (aborted)’
) idleconnections
ORDER BY
query_stay DESC

怎样停止正在执行的慢sql
SELECT pg_cancel_backend(进程id);

这个是查看表是否被锁

select oid from pg_class where relname=‘m_ss_kjcx_tech_inovate_talent’
select pid from pg_locks where relation=‘4384913’
–如果查询到了结果,表示该表被锁 则需要释放锁定
select pg_cancel_backend(140650678843136)

在 PostgreSQL查询 SQL 的执行情况,可以通过以下几种方法实现: 1. **使用 `pg_stat_activity` 视图** 通过查询 `pg_stat_activity` 视图可以获取当前正在执行的 SQL 语句,并结合时间条件筛选出执行时间较长的语句。例如,查询执行时间超过 1 秒的 SQL: ```sql SELECT * FROM pg_stat_activity WHERE state <> 'idle' AND now() - query_start > interval '1 s' ORDER BY query_start; ``` 2. **配置查询日志** 在 `postgresql.conf` 文件中配置查询日志的记录条件,例如记录执行时间超过 1 秒的查询: ```conf log_min_duration_statement = 1000 -- 记录执行超过 1 秒的查询 log_checkpoints = on log_connections = on log_disconnections = on ``` 同时,可以配置日志的存储位置和格式: ```conf log_destination = 'csvlog' logging_collector = on log_directory = 'pg_log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' ``` 配置完成后,重新加载 PostgreSQL 配置: ```sql SELECT pg_reload_conf(); ``` 然后可以通过查看日志文件中的 `duration` 字段来分析查询。 3. **使用 `pg_stat_statements` 扩展** `pg_stat_statements` 是 PostgreSQL 的一个扩展模块,用于跟踪 SQL 语句的执行情况。通过该扩展可以统计 SQL 的执行次数、总耗时、平均耗时等信息。启用该扩展的方法如下: ```sql CREATE EXTENSION pg_stat_statements; ``` 然后可以查询统计信息: ```sql SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10; ``` 4. **结合性能视图和工具** PostgreSQL 提供了多个性能视图,如 `pg_stat_statements`、`pg_locks`、`pg_prepared_xacts` 等,可以帮助分析查询的执行情况。此外,还可以使用第三方工具如 `pgBadger`、`pgFouine` 等对日志进行更深入的分析。 5. **测试查询** 可以通过模拟查询来测试日志记录和监控工具的效果,例如: ```sql BEGIN TRANSACTION; SELECT pg_sleep(5); SELECT now(); END TRANSACTION; ``` ### 优化建议 - **索引优化** 检查查询是否使用了合适的索引。如果查询没有使用索引,可能会导致性能下降。可以通过 `EXPLAIN ANALYZE` 命令分析查询计划: ```sql EXPLAIN ANALYZE SELECT se.enterprise_id, COUNT(se.ID) num FROM sebaseinfo se WHERE se.del_flag = 0 AND (se.install_district LIKE CONCAT('3703'::text, '%')) AND se.use_state = '1' GROUP BY se.enterprise_id; ``` - **查询重写** 优化 SQL 语句的结构,避免不必要的复杂查询。例如,减少子查询的使用,尽量使用 `JOIN` 操作。 - **硬件和配置优化** 确保 PostgreSQL 的配置与硬件资源相匹配,如内存、CPU 和磁盘 I/O。调整 `shared_buffers`、`work_mem` 等参数以提高性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值