基于CentOS7数据库性能优化(Postgresql)

1、  磁盘

a)         Barriers IO

i.              通过查看linux是否加载libata,确定是否开启(一般操作系统都是默认开启)

[root@localhost ~]# dmesg |grep libata

[    2.063756] libata version 3.00 loaded.

b)         禁止atime,读文件时不再更新atime,修改/etc/fstab 对应的磁盘,可以用cat命令检查是否生效。(传说作用很大,待证实)

i.              配置如下

[root@localhost ~]# cat /etc/fstab

/dev/mapper/centos-root       /    xfs     noatime,nodiratime        0 0

ii.              检查是否生效

[root@localhost postgres]# date

2019年 06月 27星期四 09:05:19 CST

[root@localhost postgres]# cat logfile >/dev/null

[root@localhost postgres]# stat logfile

文件:"logfile"

大小:1562            块:8          IO 块:4096   普通文件

设备:fd00h/64768d      Inode:51924132    硬链接:1

权限:(0600/-rw-------)  Uid:( 1001/postgres)   Gid:( 1001/postgres)

环境:unconfined_u:object_r:user_home_t:s0

最近访问:2019-06-26 17:07:33.536434918 +0800

最近更改:2019-06-20 13:31:55.101630817 +0800

最近改动:2019-06-20 13:31:55.101630817 +0800

c)         调整磁盘预读大小

i.              查看预读大小

[root@localhost postgres]# blockdev --getra /dev/sda

4096(每个扇区512bytes, 4096*512=2M)

ii.              调整预读大小

[root@localhost postgres]# blockdev --setra  8192/dev/sda

d)         IO调度器(影响不大)

Linux 2.6 内核包含4个IO调度器,分别是Noop IO scheduler、Anticipatory IO scheduler、Deadline IO scheduler 与 CFQ IO scheduler。

Noop IO scheduler 是一个简化的调度程序,它只作基本的合并与排序。

Anticipatory IO scheduler是目前内核中默认的IO调度器,它拥有非常好的性能,在Linux2.5内核中它就相当引人注意,在与Linux2.4内核(无该调度器)进行对比测试中,Linux2.4内核中多项以分钟为单位完成的任务,它则是以秒为单位来完成的,正因为如此它成为了目前Linux 2.6内核中的默认的IO调度器。Anticipatory IO scheduler的缺点是比较庞大与复杂,在一些特殊的情况下,特别是在数据吞吐量非常大的数据库系统中它会变得比较缓慢。

Deadline IO scheduler是针对Anticipatory IO scheduler的缺点进行改善而来的,表现出的性能几乎与Anticipatory IO scheduler一样好,但是比Anticipatory 要小巧。

CFQ IO schedule为系统内的所有任务分配相同的带宽,提供一个公平的工作环境,它比较适合桌面环境。事实上在测试中它也有不错的表现,mplayer、xmms等多媒体播放器与它配合的相当好,回放平滑,几乎没有因访问磁盘而出现的跳帧现象。

数据库常用:Deadline IO scheduler

查看修改命令:

$ cat /sys/block/sda1/queue/scheduler

[noop] anticipatory deadline cfq

#修改为cfq

$ echo 'cfq'>/sys/block/sda1/queue/scheduler

#立刻生效

$ cat /sys/block/sda1/queue/scheduler

noop anticipatory deadline [cfq]

2、  内存

a)         关闭虚拟内存

[root@localhost postgres]# cat /proc/sys/vm/swappiness

0

范围(0-100),值越大虚拟内存越大,所以此处设置为0,但是是单次生效。

永久生效,修改/etc/sysctl.conf,最后添加:

vm.swappiness = 0

然后执行sysctl –p,配置生效。

b)         调整overcommit

查看命令cat /proc/sys/vm/overcommit_memory

可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存。(例如:vm.overcommit_memeory=2 vm.overcommit_ratio=95(配对参数,默认为1)  可分配内存为 虚拟内存+0.95*物理内存)

三种修改方式如下:

(1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p使配置文件生效

(2)sysctl vm.overcommit_memory=1

(3)echo 1 > /proc/sys/vm/overcommit_memory

3、  Postgresql配置优化

a)        
Shared_buffers,共享缓存区大小,1/4到1/2

b)        
Work_mem ,每个进程单独分配的内存,用于排序和hash等操作。

c)        
Maintence_work_mem,也是为进程分配内存,主要用于 vacuum.

d)        
Huge_pages = try,开启PG大页内存。

i.             
配置linux大页内存大小,首先查看大页每页大小:

[root@localhost
postgres]# grep Huge /proc/meminfo

AnonHugePages:     65536 kB

HugePages_Total:       0

HugePages_Free:        0

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB(每页2M)

配置大页缓存大小,/etc/sysctl.conf

vm.nr_hugepages=
Shared_buffers/ Hugepagesize(可以适当大一些。)

sysctl –p
生效。

cat
/proc/sys/vm/nr_hugepages 检查是否生效

基于linux(CentOS7)数据库性能优化(Postgresql)的更多相关文章

  1. 高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化

    高性能Linux服务器 第10章    基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...

  2. 基于SSD固态硬盘的数据库性能优化

    基于SSD固态硬盘的数据库性能优化 2010-11-08 00:0051cto佚名   关键字:固态硬盘 数据库管理 SSD 企业软件热点文章 Java内存结构与模型结构分析 Oracle触发器的语法 ...

  3. DB2数据库性能优化介绍

    DB2数据库性能优化介绍 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 前段时间,我从CSDN得到了这本书<DB2数据库性能调整和优化(第2版)& ...

  4. MySQL数据库性能优化与监控实战(阶段四)

    MySQL数据库性能优化与监控实战(阶段四) 作者 刘畅 时间 2020-10-20 目录 1 sys数据库 1 2 系统变量 1 3 性能优化 1 3.1 硬件层 1 3.2 系统层 1 3.3 软 ...

  5. mysql数据库性能优化(包括SQL,表结构,索引,缓存)

    优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...

  6. GNU Linux高并发性能优化方案

    /*********************************************************** * Author : Samson * Date : 07/14/2015 * ...

  7. SqlServer数据库性能优化详解

    数据库性能优化详解 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小,使每个查询的响应时间最短并最大限度地提高整个数据库服务器的吞吐量.为达到此目的,需要了解应用程序的需求和数据 ...

  8. 0709MySQL 数据库性能优化之表结构优化

    转自http://isky000.com/database/mysql-perfornamce-tuning-schema MySQL 数据库性能优化之缓存参数优化 MySQL数据库性能优化之硬件瓶颈 ...

  9. MySQL数据库性能优化:表、索引、SQL等

    一.MySQL 数据库性能优化之SQL优化 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础 优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地 ...

随机推荐

  1. 条形码(barcode)code128生成代码

    条形码(barcode)code128生成代码 很简单 多些这位兄弟https://bbs.csdn.net/topics/350125614 下面是我的DEMO 直接放到VS2005下面编译即可 # ...

  2. SOUI3.0仿Android插值动画使用方法

    在Android系统中,有插值动画,数值动画,属性动画,帧动画. 帧动画,在SOUI里可以通过AnimateImg这个控件来实现,其它几种动画3.0之前不支持,需要类似动画效果,只能自己通过定时器去实 ...

  3. 细数EDM营销中存在的两大盲点

    国庆节了,祝大家国庆快乐,转眼博客至今已有三年了.下面博主为大家介绍EDM营销中存在的两大盲点,供大家参考. 一是忽略用户友好.用户友好策略是Email营销成功的关键要素,具体包括内容友好策略.方式友 ...

  4. (转)使用NMAP工具扫描端口

    原文:http://www.linuxde.net/2013/02/12354.html nmap 是一个用于网络探索或安全评测的工具.它支持 ping 扫描(判定哪些主机在运行),多端口扫描技术(判 ...

  5. Matlab与C++混合编程 1--在C++中调用自己写的matlab函数

    在Visual Studio中使用C++中调用MATLAB程序 在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目 ...

  6. python winsound模块

    (目标:出现交易下单.结束成交.数据中断等信号的时候,PC 发出声音提醒.) python winsound模块 winsound是Python的内置包,无需下载.可以直接通过 import wins ...

  7. Java - Java Mail邮件开发(3)spring +Java Mail + Velocity

    1.spring + Java Mail + Velocity 项目结构: 注意:用户包中引入各包的顺序问题.如velocity-2.1. beans.xml <?xml version=&qu ...

  8. PDFObject的使用(转)

    1.pdfobject.js官网:https://pdfobject.com/ 2.在html文件中引入这个文件,以pdfobject.min.js为例 1 <script type=" ...

  9. DotNetCore知识栈

    #..NET Core提供的特性 1.开源.免费 2.轻量级.跨平台 3.组件化.模块化.IOC+Nuget.中间件 4.高性能 5.统一了MVC和WebAPI编程模型 a)  比如:ASP.NET ...

  10. 动态规划(股票交易)---只能进行 k 次的股票交易

    只能进行 k 次的股票交易 188. Best Time to Buy and Sell Stock IV (Hard) 题目描述:   只能进行K次股票交易,求能获得的最大利润 思路分析:   和只 ...