PG 数据库常用参数调整

1.shard_buffers

Postgresql使用自己的缓冲区,也使用操作系统缓冲区。这意味着数据存储在内存中两次,首先是 Postgresql缓冲区,然后是操作系统缓冲区。
与其他数据库不同, Postgresql不提供直接IO。这称为双缓冲(就是磁盘中的时候读的时候先放在数据库的缓冲区,再放在操作系统缓冲区)。
Postgresql缓冲区称为 shared buffers,它是大多数操作系统最有效的可调参数。
Postgresql将用 shared buffers参数缓存如下数据:

表数据,索引,执行计划

初始化参考值:物理内存1/4

2.wal_buffer

PostgresαL将其WAL(预写日志)记录写入缓冲区,然后将这些缓冲区刷新到磁盘。
缓冲区的默认大小,由wal_ buffers定义,但如果您有大量并发连接,则较高的值可以提供更好的性能。
该缓冲区的作用是临时存放 redo log,所以分配太大不会对性能有好处,一般10MB左右。

3.effective_cache_size--默认4G

磁盘缓存存储器的估计。它只是一个指导原则,而不是确切分配的内存或缓存大小。它不分配实际内存,而是告诉优化器内核中可用的缓存量。如果将此值设置得太低,查询计划程序可以决定不使用某些索引,即使它们有用。因此,设置较大的值总是有益的建议使用默认值

4.work_mem--类似Oracle的PGA

指定在写入磁盘上的临时文件之前, ORDER BY, DISTINCT,JON和哈希表的内部操作将使用的内存量。
此配置用于复杂排序,如果必须进行复杂排序,则增加work_mem的值以获得良好结果。内存中的排序比溢出到磁盘的排序快得多。
设置非常高的值可能会导致部署环境出现内存瓶颈,因为此参数是按用户排序操作。
如果您有许多用户尝试执行排序操作,系统将为所有用户分配 work mem*总排序操作
全局设置此参数可能会导致内存使用率过高,强烈建议在会话级别修改它。
默认4M

5.maintenance_work_mem

maintenance_work_mem是用于维护在务的内存设置。默认为64MB。本参数可以针对每个 session设置。
设置较大的值有助于执行 VACUUM, RESTORE, CREATE|NDEX, ADD FOREIGN KEY和ALTER TABLE等任务。
由于会话中只能同时执行其中一个操作,并且通常没有多个同时运行,因此它可能比 work_mem大。
较大的配置可以提高 VACUUM和数据库还原的性能。
执行 autovacuum时,或者配置 autovacuum_work_mem参数来单独管理它。

6.FSYNC

如果启用了 fsync, Postgresql将尝试确保将更新写入物理磁盘,会延长响应时间对性能有一定影响。
这可确保在操作系统或硬件崩溃后可以将数据库群集恢复到一致状态。
禁用sync通常可以提高性能,但在发生电源故障或系统崩溃时可能会导致数据丢失。
从外部数据重新创建整个数据库,则建议停用 fsync。



7.synchronous_commit

指定在命令向客户端返回“成功”指示之前,事务提交是否将等待WAL记录写入磁盘。这是性能和可靠性之间的权衡。默认设置为“on'’。
可能的值包括:"on","remote_apply", "remote_write","local"和“of"
与fsync不同,用此参数不会产生任何数据库不一致的风险:操作系统或数据库崩溃可能导致丢失一些最近发生的可能提交的事务,但数据库的状态将与这些事务完全相同,未提交的将被抛弃
当性能比事务持久性更重要时,停用 synchronous_commit可能是一个有用的替代方法
这意味着成功状态与保证写入磁盘之间会存在时间差。在服务器崩溃的情况下,即使客户端在提交时收到成功消息,数据也可能丢失。在这种情况下,事务提交非常快,因为它不会等待刷新WAL文件,但可靠性受到损害。

8.checkpoint_timeout

检查点启动的时间间隔将此设置得太低会减少崩溃恢复时间,因为更多数据会写入磁盘,但由于每个检查点都会占用宝贵的系统资源,因此也会损害性能。高频率的检査点可能会影响性能。实例崩溃的机率与长时间运行的性能相比,实例崩溃所占的比重要小的多,该值设置为实例崩溃后客户允许恢复的时间。
检查点进程将数据刷新到数据文件中。
发生 CHECKPOINT时完成此活动。这是一项昂贵的操作,可能会导致大量的|O。整个过程涉及昂贵的磁盘读/写操作。
checkpoint_completion_target衡量检查点完成的时间长度。

9.checkpoint_completion_target

数据库中一个至关重要的参数,主要与参数 checkpoint_timeout(checkpoint_timeout配合使用,值越小意味着检查点要越快完成,要求写得要快。
控制每次检査点发生时i/o的吞吐量,值越高,则/o占用的资源越少,数据库性能越好;值越低,则/o占用的资源越多,影响数据库性能,但是提高检査点完成速度。
可以理解为如果这个参数设置的太大,可能会发生数据库震荡。

10.full_page_writes

全页写,把数据块写入到WAL日志中,目的是为了解决块不一致问题,保护数据的完整性,全页写会导致WAL日志膨胀,增加额外/O。
如果性能优先考虑,同时有日常数据库备份,则可以关闭。

其它参数:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【上下界分析 差分数组】798得分最高的最小轮调

本文涉及知识点 差分数组 本题同解 C算法前缀和的应用:798得分最高的最小轮调 LeetCode798得分最高的最小轮调 给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调,这样可以使数组变为 [nums[k], nums[k 1], … nums[nums.lengt…

leetcode168:Excel表列名称

题目链接&#xff1a;168. Excel表列名称 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:string convertToTitle(int columnNumber) {string ss1;int MOD 0;if(columnNumber < 26){ss1 (columnNumber A - 1);return ss1;}while(columnNumber){int MO…

Web学习_SQL注入_布尔盲注

盲注就是在SQL注入过程中&#xff0c;SQL语句执行后&#xff0c;查询到的数据不能 回显到前端页面。此时&#xff0c;我们需要利用一些方法进行判断或者尝 试&#xff0c;这个过程称之为盲注。而布尔盲注就是SQL语句执行后&#xff0c;页面 不返回具体数据&#xff0c;数据库只…

【AIGC调研系列】chatTTS与GPT-SoVITS的对比优劣势

ChatTTS和GPT-SoVITS都是在文本转语音&#xff08;TTS&#xff09;领域的重要开源项目&#xff0c;但它们各自有不同的优势和劣势。 ChatTTS 优点&#xff1a; 多语言支持&#xff1a;ChatTTS支持中英文&#xff0c;并且能够生成高质量、自然流畅的对话语音[4][10][13]。细粒…

未卸载干净的proteus安装教程7.8

提醒&#xff1a; 针对第一次安装推荐博文&#xff1a;https://jingyan.baidu.com/article/656db918f8590de381249cbf.html 1、一定要以管理员身份运行软件。 2、以管理员身份运行软件后&#xff0c;默认的ISIS Professional路径是C:\Program Files \Labcenter Electronics\…

802.11漫游流程简单解析与笔记_Part1

最近在进行和802.11漫游有关的工作&#xff0c;需要对wpa_supplicant认证流程和漫游过程有更多的了解&#xff0c;所以通过阅读论文等方式&#xff0c;记录整理漫游相关知识。Part1将记录802.11漫游的基本流程、802.11R的基本流程、与认证和漫游都有关的三层秘钥基础。Part1将包…

Excel行列条件转换问题,怎么实现如图一到图二的效果?

图一 图二 如果数据比较&#xff0c;不建议一上来就用公式&#xff0c;风速值那一列的数据可以确定都是数值型数字&#xff0c;可以先试试用数据透视表做转换工具&#xff1a; 1.创建数据透视表 将采集时间放在行字段&#xff0c;测风放在列字段&#xff0c;风速放在值字段 2.…

对象业务的截断接口

依据AWS S3&#xff0c;没有定义截断对象的操作。 本文有如下假定&#xff1a; 对象存储服务基于文件语义实现。 接口定义 依据前述&#xff0c;业界主流对象存储服务比如AWS S3并未定义截断对象的操作&#xff0c;而国内的各家公有云对象存储服务&#xff0c;提供了对象的…

【SecureCRT常用指令】

SecureCRT常用指令 一、ls 只列出文件名 &#xff08;相当于dir&#xff0c;dir也可以使用&#xff09; -A:列出所有文件&#xff0c;包含隐藏文件。 -l&#xff1a;列表形式&#xff0c;包含文件的绝大部分属性。 -R&#xff1a;递归显示。 --help&#xff1a;此命令的帮助。…

安卓逆向经典案例——XX牛

安卓逆向经典案例——XX牛 按钮绑定方式 1.抓包 2.查看界面元素&#xff0c;找到控件id 通过抓包&#xff0c;发现点击登录后&#xff0c;才会出现Encrpt加密信息&#xff0c;所以我们通过控件找到对应id&#xff1a;btn_login 按钮绑定方法——第四种 public class LoginA…

c++【基础】求花坛的面积

限制 时间限制 : 1 秒 内存限制 : 128 MB 题目 A校区有一个圆形花坛&#xff0c;量得花坛周围的篱笆长是x米&#xff0c;请问该花坛的面积是多少平方米&#xff1f;&#xff08;假设π3.14&#xff09; 输入 一个小数x 输出 花坛的面积&#xff08;结果保留2位小数&…

开机自启动脚本配置

#!/bin/bash# 定义要检查的IP地址 IP_ADDRESSES("127.0.0.1")# 检查是否存在任意一个IP地址 check_ips() {HOST_IPS$(hostname -I)for IP in "${IP_ADDRESSES[]}"; doif [[ $HOST_IPS ~ $IP ]]; thenreturn 0fidonereturn 1 }# 检查IP地址并在必要时重新启…

python tushare股票量化数据处理:学习中

1、安装python和tushare及相关库 matplotlib pyplot pandas pandas_datareader >>> import matplotlib.pyplot as plt >>> import pandas as pd >>> import datetime as dt >>> import pandas_datareader.data as web 失败的尝试yf…

什么是Socket?

什么是Socket&#xff1f; Socket&#xff08;套接字&#xff09;是网络通信的基本单位&#xff0c;它允许在不同计算机之间进行数据交换。Socket在网络编程中起着至关重要的作用&#xff0c;它为应用程序提供了一个机制&#xff0c;通过网络发送和接收数据。简单地说&#xf…

使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端

要使用NetAssist网络调试助手在同一台计算机上配置一个实例作为服务器&#xff08;server&#xff09;和另一个实例作为客户端&#xff08;client&#xff09;&#xff0c;可以按照以下步骤进行操作&#xff1a; 前提条件 确保已经安装NetAssist网络调试助手&#xff0c;并了…

mysql 小例子

mysql 小例子 show databases ; create database company; use company;DROP TABLE IF EXISTS employee;create table employee ( id INT AUTO_INCREMENT, name VARCHAR(50) NOT NULL, PRIMARY KEY(id)) ENGINEInnoDB; DESCRIBE employee ;111 CREATE TABLE example (id INT …

如何制定工程战略

本文介绍了领导者如何有效制定工程战略&#xff0c;包括理解战略核心、如何收集信息并制定可行的策略&#xff0c;以及如何利用行业最佳实践和技术债务管理来提升团队效能和产品质量。原文: How to Build Engineering Strategy 如果你了解过目标框架&#xff08;如 OKR&#xf…

数仓建模中的一些问题

​​​在数仓建设的过程中&#xff0c;由于未能完全按照规范操作&#xff0c; 从而导致数据仓库建设比较混乱&#xff0c;常见有以下问题&#xff1a; 数仓常见问题 ● 数仓分层不清晰&#xff1a;数仓的分层没有明确的逻辑&#xff0c;难以管理和维护。 ● 数据域划分不明确…

yield 和 生成器(generator)

Python3 迭代器 https://www.runoob.com/python3/python3-iterator-generator.html #!coding:utf8#author:yqq #date:2020/1/14 0014 15:21 #description:class MyNumber:def __init__(self, init_number 1 , bound_number 99999):self.n init_numberself.bound bound_nu…