用户登录
用户注册

分享至

postgresql 查询 慢

  • 作者: 马勒个背
  • 来源: 51数据库
  • 2020-10-02
1。打开psql界面,输入以下:
select pg_stat_get_backend_pid(s.backendid) as procpid,
pg_stat_get_backend_activity(s.backendid) as current_query
from (select pg_stat_get_backend_idset() as backendid) as s;

2。同时监视你的数据库服务器什么时候发生update waitting状况,一旦发现,立刻记录下它的进程号。

3。迅速把第1步里的语句按回车执行了,查看结果。结果是一个view,结构大致如下:
procpid | current_query
---------+-------------------------------------------------------------------

26574 |
26640 |
26643 |
26651 |
26646 |
26649 |
26654 |
26657 | in transaction
26659 |
26674 |
23623 |
26824 | select pg_stat_get_backend_pid(s.backendid) as procpid,
: pg_stat_get_backend_activity(s.backendid) as current_query
: from (select pg_stat_get_backend_idset() as backendid) as s;
...1。打开psql界面,输入以下:
select pg_stat_get_backend_pid(s.backendid) as procpid,
pg_stat_get_backend_activity(s.backendid) as current_query
from (select pg_stat_get_backend_idset() as backendid) as s;

2。同时监视你的数据库服务器什么时候发生update waitting状况,一旦发现,立刻记录下它的进程号。

3。迅速把第1步里的语句按回车执行了,查看结果。结果是一个view,结构大致如下:
procpid | current_query
---------+-------------------------------------------------------------------

26574 |
26640 |
26643 |
26651 |
26646 |
26649 |
26654 |
26657 | in transaction
26659 |
26674 |
23623 |
26824 | select pg_stat_get_backend_pid(s.backendid) as procpid,
: pg_stat_get_backend_activity(s.backendid) as current_query
: from (select pg_stat_get_backend_idset() as backendid) as s;
26901 |

(这是我目前开发机器上的结果,没有正在执行的语句,如果有,idle就会是sql语句,最下面的哪条是这个性能执行查询自身的语句)
你把左侧一列的procpid号对应上在第2步中查到的进程号,然后把对应上的current_query 发出来,让大家帮你看看是哪句update语句执行了过长的时间,针对这条update语句再查原因可能会准确些。




  1、通过命令行查询\d数据库——得到所有表的名字\d表名——得到表结构2、通过SQL语句查询"select*frompg_tables"——得到当前db中所有表的信息(这里pg_tables是系统视图)"selecttablenamefrompg_tableswhereschemaname='public'"——得到所有用户自定义表的名字(这里"tablename"字段是表的名字,"schemaname"是schema的名字。用户自定义的表,如果未经特殊处理,默认都是放在名为public的schema下)
软件
前端设计
程序设计
Java相关