zoukankan      html  css  js  c++  java
  • PostgreSQL的内存结构和调优

    PostgreSQL的内存结构

    PostgreSQL的内存主要分成两类:

    1.本地内存区域:每个后端进程(backend process)自己使用的

    2.共享内存区域:所有进程共同使用

     

    本地内存区域

    在postgresql中,每个后端进程(backend process)分配一片本地内存用于处理查询处理;

    本地内存又分成子内存区域

    (1)work_mem

    执行器使用work_mem区域用于对元组的排序,比如order by、distinct操作。也用于表的join操作,比如merge-join、hash-join操作

    有参数work_mem控制,默认是4MB。

    参数log_temp_files会控制记录临时文件名和大小。可以为排序、散列和临时查询结果创建临时文件。如果通过此设置启用,则在删除每个临时文件时将为其发出一个日志条目。当值为0时,记录所有临时文件信息;当值为正时,只记录大小大于或等于指定数据量的文件。如果指定此值时没有使用单位,则将其作为kb。默认设置是-1,它禁用这样的日志记录。只有超级用户才能更改此设置。

    设置建议:

    --从较小的值开始

    --然后看看日志中的“temporary file”相关信息

    --设置成temp文件的2-3倍

    (2)maintenance_work_mem

    用于一些维护操作。比如vacuum、reindex、alter table add foreign key

    由参数maintenance _work_mem控制大小。默认是64MB。由于数据库会话一次只能执行其中的一个操作,并且PostgreSQL不会同时运行许多操作,因此可以将maintenance_work_mem的值设置为明显大于work_mem的值。

    设置建议:

    --RAM*10%,最大不超过1GB

    --如果vacuum有问题,可以设置的再大一点。

    (3)temp_buffers

    存放临时表。temp_buffer参数控制。默认是8MB。

    该参数设置每个数据库会话使用的临时缓冲区的最大数量。会话本地缓冲区仅用于访问临时表。可以在单个会话中更改此参数的设置,但只能在会话中首次使用临时表之前更改。

    PostgreSQL利用这个内存区域来保存每个会话的临时表,当连接关闭时,这些临时表将被清除。

     

    共享内存区域

    (1)shared buffer

    PostgreSQL将表和索引中的页面从持久存储加载到共享缓冲池中,然后直接对它们进行操作。

    由参数shared_buffers控制,默认是128MB。

    (2)wal buffer

    存放wal数据

    (3)commit log

    提交日志(CLOG)保存所有事务的状态,是并发控制机制的一部分。提交日志分配共享内存,并在整个事务处理过程中使用。

    事务有以下四种状态:

    in_progress、commited、aborted、sub-commited

     

    其他参数Effective_cache_size。详见postgresql的effective_cache_size

  • 相关阅读:
    SQL server 统计数据库表数量和列出所有表名称
    mybatis 模糊查询 like的三种方式
    jquery 实现按回车键登录功能的写法
    js 各种事件 如:点击事件、失去焦点、键盘事件等
    ssm框架中从controller传值给jsp的方式
    [GDOI2019]小说
    洛谷5113
    2020.9.26模拟总结
    [IOI2015]分组
    9.19 总结
  • 原文地址:https://www.cnblogs.com/abclife/p/14566865.html
Copyright © 2011-2022 走看看