PostgreSQL PARSE等待一例
来源:互联网 发布:linux crontab java 编辑:程序博客网 时间:2024/06/06 08:51
某系统发送异常,经查有大量waiting.
skyurs=# select procpid,query_start,waiting,current_query from pg_stat_activity;
procpid | query_start | waiting | current_qu
ery
---------+-------------------------------+---------+--------------------------------------------------------------------------------
--------------------------------------------------------------------------
22048 | 2010-08-27 14:30:24.673425+08 | f | create table urs_test_user_list as select user_id,count(user_id) from urs_user_
relation a where relation=1 group by user_id having(count(user_id)>50) \r+
| | | and (select count(*) from urs_user_relation where relation=1 and buddy_id=a.use
r_id limit 50)=50\r +
| | | limit 400000\r
+
| | |
2634 | 2010-08-27 19:27:06.622968+08 | t | select buddy_id, group_id, relation, appinfo, extinfo, create_time from skyurs
.urs_user_relation where user_id=$1 and relation=1
12932 | 2010-08-27 20:05:50.278318+08 | t | select buddy_id, group_id, relation, appinfo, extinfo, create_time from skyurs
.urs_user_relation where user_id=$1 and relation=1
建表语句:create table urs_test_user_list as select user_id,count(user_id) from urs_user_
relation a where relation=1 group by user_id having(count(user_id)>50) \r+
| | | and (select count(*) from urs_user_relation where relation=1 and buddy_id=a.use
r_id limit 50)=50\r +
| | | limit 400000\
把表 urs_user_relation给锁了,导致相关的SELECT都处于等待锁状态.
skyurs=# select pg_terminate_backend(22048);
pg_terminate_backend
----------------------
t
(1 row)
干掉之后,锁消失。
结束后查看数据库日志:
出现大量:
2010-08-28 10:56:53.735 CST,"skyurs","skyurs",17107,"192.168.171.39:40721",4c77adcc.42d3,3,"PARSE",2010-08-27 20:21:32 CST,74/157,0,
LOG,00000,"duration: 52520677.542 ms parse <unnamed>: select buddy_id, group_id, relation, appinfo, extinfo, create_time from skyu
rs.urs_user_relation where user_id=$1 and relation=1",,,,,,,,,""
总结:
1. 生产环境跑长SQL必须引起注意.这种SQL必须人在现场看牢。以及时响应。
2. 这个建表语句可以改一下,先把表建好,再用insert into select语法写入,这样的话锁没这么大。
当然,PostgreSQL应该降低这类情形下的锁级别才对。
3. 可以考虑配置超时机制,超时的SQL返回错误,以免锁过长时间才发现
4. 监控超时SQL,及时反馈给DBA处理。
- PostgreSQL PARSE等待一例
- PostgreSQL 锁等待跟踪
- PostgreSQL 锁等待跟踪
- Postgresql 触发器一例
- Postgresql 恢复一例
- postgresql的update锁等待
- enqueue等待事件优化一例
- log file sync等待超高一例
- 查看PostgreSQL数据库中的锁等待--脚本
- PostgreSQL 连接认证失败一例
- PostgreSQL hstore 列性能提升一例
- PostgreSQL的行转列函数使用一例
- PostgreSQL integer out of range一例
- PostgreSQL查询结果错误一例
- PostgreSQL与MySQL性能比较一例
- postgresql copy的使用一例
- 等待队列一
- 等待队列(一)
- PB 各种小功能点(一)
- 破解Oracle函数"wmsys.wm_concat()"
- Using PGSNAP to Monitor PostgreSQL Database
- php 操作 MySQL 中的Blob类型 存储图片
- binux
- PostgreSQL PARSE等待一例
- 算法学习视频下载
- Swap Consumed very Much When PostgreSQL autovacuum to prevent wraparound
- 自己动手写RTP服务器——传输所有格式的视频
- android不同屏幕大小支持
- Use nagios monitor PostgreSQL archive status
- qos
- 百度之星之A:百度计算器的加法
- c#与数据库