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

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

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

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

运行PostgreSQL前:

[root@server ~]# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
[root@server ~]#

启动PostgreSQL后:

[root@server ~]# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
[root@server ~]#

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

[root@server ~]# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
[root@server ~]#

一次插入100M数据:

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

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

postgres=# select count(*) from test01;
count
-------- ( row) postgres=#
[root@server ~]# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
[root@server ~]#

插入100M数据看看:

postgres=# insert into test01 (select * from test01 limit );
INSERT
postgres=#
[root@server ~]# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
[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:
-/+ buffers/cache:
Swap:
[root@server ~]#

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

[root@server ~]# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
[root@server ~]#

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

仍然艰难地转下去了:

postgres=# insert into test01 (select * from test01);
INSERT
postgres=#
[root@server ~]# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
[root@server ~]#

重新启动来看看:

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

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

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

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

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

PostgreSQL内存使用增长观察的更多相关文章

  1. SqlServr进程内存使用增长的解决办法

    SqlServr进程使用的内存缓慢增长是正常的现象,但在服务器长时间不重启或sql服务不重启的情况下,最终,这个进程会耗尽所有的内存,导致所有终端无法正常与数据库交互. 1.设置数据库最大使用内存的值 ...

  2. Cesium 一个导致浏览器内存一直增长的方法

    为了实时更改模型的位置,给模型附上ID,后面判断如果传来的数据中没有已经创建的模型,删掉该模型时用到方法:viewer.entities.removeById(modelId);和viewer.ent ...

  3. 从内存的角度观察 堆、栈、全局区(静态区)(static)、文字常量区、程序代码区

    之前写了一篇堆栈的,这里再补充下内存其他的区域 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) — 一般由程 ...

  4. PostgreSQL内存配置记录

    PostgreSQL内存配置,参考了其他人的总结,再加上自己的一些体会,做个记录. postgresql的内存分配主要由shared_buffers.temp_buffers.work_mem.mai ...

  5. 华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历

    摘要:华为云数据库GaussDB(for Cassandra) 是一款基于计算存储分离架构,兼容Cassandra生态的云原生NoSQL数据库:它依靠共享存储池实现了强一致,保证数据的安全可靠. 本文 ...

  6. 当master down掉后,pt-heartbeat不断重试会导致内存缓慢增长

    最近同事反映,在使用pt-heartbeat监控主从复制延迟的过程中,如果master down掉了,则pt-heartbeat则会连接失败,但会不断重试. 重试本无可厚非,毕竟从使用者的角度来说,希 ...

  7. PostgreSQL内存结构图示

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页 作者:高健@博客园 luckyjackgao@ ...

  8. postgresql 内存分配

    postgresql的内存分配主要由shared_buffers.temp_buffers.work_mem.maintenance_work_mem参数控制. shared_buffers又可以叫做 ...

  9. PostgreSQL内部结构与源代码研究索引页

    磨砺技术珠矶,践行数据之道,追求卓越价值 luckyjackgao@gmail.com 返回顶级页:PostgreSQL索引页 本页记录所有本人所写的PostgreSQL的内部结构和源代码研究相关文摘 ...

随机推荐

  1. java笔记--线程的插队行为

    对线程的插队行为的理解 在编写多线程时,会遇到让一个线程优先于其他线程运行的情况, 此时除了可以设置其优先级高于其他线程外,更直接的方式是使用Thread类的join()方法 --如果朋友您想转载本文 ...

  2. [WinCE] Can't find P/Invoke DLL sqlceme35.dll

    找到目录: C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Devices\wce500\armv4i 将 sqlce ...

  3. 从一个简单的 JPA 示例开始

    本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例:接着重构该示例,并引入 Sp ...

  4. JS获取长度方法总结

    目录: 1length 2size() 3length与size()的区别 4获取元素的索引 - index() 5获取对应的索引 - eq() 概述: 在工作中大家经常需要获取对象的长度,或者要获取 ...

  5. [翻译] USING GIT IN XCODE [3] 在XCODE中使用GIT[3]

    USING GIT IN XCODE MAKING AND COMMITTING CHANGES Once you have a working copy of your project, it’s ...

  6. oracle 复制表结构 复制表数据 sql 语句

    1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create table ta ...

  7. Centos下防止ssh暴力破解密码

    参考文章地址:https://yq.aliyun.com/ziliao/48446 https://www.cnblogs.com/lsdb/p/7095288.html 1.收集 /var/log/ ...

  8. 原生 JS 的 Base64 转码

    JavaScript 原生提供两个 Base64 相关的方法: btoa():任意值转为 Base64 编码 atob():Base64 编码转为原来的值 注意:这两个方法不适合非 ASCII 码的字 ...

  9. 面向对象程序设计_tesk1_寒假伊始

    大一下学期的自我目标(要求包含对大一上学期的总结.对面向对象课程完成后学习到的能力的预期,对面向对象课程的期望.对编程和专业能力的愿景规划) 在大学的第一个学期,相信很多人都是在得过且过度过,我也不例 ...

  10. mysql分页(ajax)

    分页有多种方式,mysql的limit是个不错的选择,通过ajax实现异步刷新,将当前页数和每页数量传入后台即可 1. 首先后台要拿到总记录数和所需显示数据列表,所以要分别写两个sql方法 我这里是通 ...