注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

Autovacuum 进程引起的 SWAP 分区使用率较高  

2011-02-16 13:45:55|  分类: PG案例分析 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    今天上午监控人员反映一台数据库主机 SWAP使用率达到 48%, 需要关注;通常情况下 SWAP
使用率都比较低的,只有当可用内存用完的时候进程才会去申请SWAP的内存空间, 下面是操作
日志。
   
1 登陆主机,查看内存使用情况
postgres@logdb-> free -m
             total       used       free     shared    buffers     cached
Mem:         24104      24031         72          0          3       6411
-/+ buffers/cache:      17616       6487
Swap:        16386       8588       7797

   Mem: 24G,几乎用尽; Swap: 16G,用了8.5G, 使用率 50%左右;
   那什么进程用了这么多内存呢?
  
2 top命令查找消耗内存的进程
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                               
 5821 postgres  14  -1 26.2g  16g  26m S  0.0 70.0 313:02.00 postgres: autovacuum launcher process                                 
32161 postgres  14  -1 1473m 1.3g 1.3g S  0.3  5.4 558:48.77 postgres: community community 192.168.169.42(36625) idle              
32167 postgres  14  -1 1473m 1.3g 1.3g S  0.0  5.4 559:08.57 postgres: community community 192.168.169.42(36638) idle              
 
 第一个进程引起了我的注意,是Postgresql的 "autovacuum" 进程,吃了 16G的内存。
 
3 连接到库,查看 autovaccum进程详细信息
postgres=# select query_start,current_query from pg_stat_activity where current_query !='<IDLE>';
          query_start          |                                     current_query                                     
-------------------------------+----------------------------------------------------------------------------------------
 2011-02-14 09:37:41.495117+08 | autovacuum: VACUUM myschema.tbl_user_login_log_p201010 (to prevent wraparound)
 2011-02-14 09:33:49.798097+08 | autovacuum: VACUUM myschema.tbl_download_stat (to prevent wraparound)
 2011-02-14 08:53:50.657176+08 | autovacuum: VACUUM myschema.tbl_register_log (to prevent wraparound)
 2011-02-14 10:12:21.757808+08 | select query_start,current_query from pg_stat_activity where current_query !='<IDLE>';
(4 rows)

postgres=#

myschema=> select pg_size_pretty(pg_relation_size('tbl_download_stat'));
 pg_size_pretty
----------------
 3550 MB
(1 row)

myschema=> select pg_size_pretty(pg_relation_size('tbl_user_login_log_p201010'));
 pg_size_pretty
----------------
 5115 MB
(1 row)

myschema=> select pg_size_pretty(pg_relation_size('tbl_register_log'));
 pg_size_pretty
----------------
 1763 MB
(1 row)
 
       发现有三张表在做 vacuum, 并且这三张表都有点大;根据query_start来看,有个VACUUM进程也做了
  有两小时了, 几G的表正常情况下也应该完成了,为什么还在跑呢?
 
4 继续监控
  上午一直在监控,到了下午的时候发现 SWAP 空间使用率依然保持不变,但 autovaccum 进程依然还在跑;
  猜想 autovacuum 进程可能有异常,后来将上面现象请教德哥,德哥回复可能 OS SWAP 换页有异常,建议
  将 Postgresql 的 autovaccum 进程杀掉,它会自动重起;
  后来通过 pg_terminate_backend() 将 vaccum 进程杀掉后,SWAP空间果然释放。
  
5 再次查看 SWAP 的使用情况。
postgres@logdb-> free -m
             total       used       free     shared    buffers     cached
Mem:         24104      24033         70          0         94      20118
-/+ buffers/cache:       3820      20283
Swap:        16386         53      16333

  总结: autovaccum进程长时间未完成的原因尚不明确,今天将以上现象,经验记下,供参考。

  评论这张
 
阅读(26753)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016