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

  • 相关阅读:
    Windows Server 2003 SP2(32位) 中文版 下载地址 光盘整合方法
    用Recycle()方法对Java对象的重要性
    Lotus中千奇百怪的 $$
    Developing a simple application using steps "User Decision" and "Mail"(1) 沧海
    沟通中的情绪管理(演讲稿) 沧海
    人只有在压力之下,才可能成功,没做一件事,都必须成功,不许言败 沧海
    什么是IDOC,以及IDOC的步骤 沧海
    VS2008 Professional Edition CHS中的deffactory.dat读取错误 沧海
    Including custom text in the step "User Decision" 沧海
    SAP Upgrade Strategy 沧海
  • 原文地址:https://www.cnblogs.com/abclife/p/14566865.html
Copyright © 2011-2022 走看看