zoukankan      html  css  js  c++  java
  • PostgreSQL内存使用增长观察

    磨砺技术珠矶,践行数据之道,追求卓越价值

    回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页

    [作者 高健@博客园  luckyjackgao@gmail.com]

    说是内存增长,其实未必是。但是客户有时候喜欢用free命令来查看,为何更好地了解,进行以下试验。

    运行PostgreSQL前:

    [root@server ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1125        660        464          0         26        363
    -/+ buffers/cache:        270        854
    Swap:         2015          0       2015
    [root@server ~]# 

    启动PostgreSQL后:

    [root@server ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1125        672        452          0         27        374
    -/+ buffers/cache:        271        853
    Swap:         2015          0       2015
    [root@server ~]# 

     

    然后,在同一台机器上开启一个psql之后:

    [root@server ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1125        682        442          0         28        377
    -/+ buffers/cache:        276        848
    Swap:         2015          0       2015
    [root@server ~]# 

    一次插入100M数据:

    postgres=# d test01;
            Table "public.test01"
     Column |      Type       | Modifiers 
    --------+-----------------+-----------
     id     | integer         | 
     val    | character(1024) | 
    
    postgres=# d test02;
            Table "public.test02"
     Column |      Type       | Modifiers 
    --------+-----------------+-----------
     id     | integer         | 
     val    | character(1024) | 
    
    postgres=# 

    单纯地查询已经耗费内存了:

    postgres=# select count(*) from test01;
     count  
    --------
     307200
    (1 row)
    
    postgres=# 
    [root@server ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1125       1031         93          0         29        723
    -/+ buffers/cache:        278        846
    Swap:         2015          0       2015
    [root@server ~]# 

    插入100M数据看看:

    postgres=# insert into test01 (select * from test01 limit 102400);
    INSERT 0 102400
    postgres=# 
    [root@server ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1125       1113         11          0         27        803
    -/+ buffers/cache:        282        842
    Swap:         2015          0       2015
    [root@server ~]# 

    此时,单纯看free部分的内存快没有了。

    再重复一次,插入100M数据,free内存反而有所增加

    postgres=# insert into test01 (select * from test01 limit 102400);
    INSERT 0 102400
    postgres=# 
    [root@server ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1125       1048         76          0         13        750
    -/+ buffers/cache:        284        840
    Swap:         2015          0       2015
    [root@server ~]# 

     

    再折腾几次,多次连续插入100M数据后:

    [root@server ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1125       1115          9          0          1        762
    -/+ buffers/cache:        352        772
    Swap:         2015          0       2015
    [root@server ~]# 

    还不过瘾,再来一次插入1200M数据:

    仍然艰难地转下去了:

    postgres=# insert into test01 (select * from test01);
    INSERT 0 1228800
    postgres=# 
    [root@server ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          1125       1113         12          0          1        820
    -/+ buffers/cache:        290        834
    Swap:         2015          0       2015
    [root@server ~]# 

    重新启动来看看:

    现在,数据已经有2400M了,再次插入,会如何?要知道我的shared_buffers很小,才32MB:

    由于插入数据量过大,导致系统崩溃,发生OOM错误。

    [作者 高健@博客园  luckyjackgao@gmail.com]

    回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页

    磨砺技术珠矶,践行数据之道,追求卓越价值

  • 相关阅读:
    vue 项目中assets文件夹与static文件夹引用的区别
    v-on绑定特性命名带小横杠 ‘-’与props属性中变量怎么对应
    解决 The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
    解决win10无法完成更新 正在撤销更改
    Felix HttpServer call iPojo Demo
    Felix Http server Demo
    osgi学习
    windows一个目录下最大文件数目
    oracle默认配置ora文件位置
    iptables配置(/etc/sysconfig/iptables)
  • 原文地址:https://www.cnblogs.com/gaojian/p/3288350.html
Copyright © 2011-2022 走看看