基于CentOS7数据库性能优化(Postgresql)node
一、 磁盘linux
a) Barriers IOsql
i. 经过查看linux是否加载libata,肯定是否开启(通常操做系统都是默认开启)数据库
[root@localhost ~]# dmesg |grep libatacentos
[ 2.063756] libata version 3.00 loaded.缓存
b) 禁止atime,读文件时再也不更新atime,修改/etc/fstab 对应的磁盘,能够用cat命令检查是否生效。(传说做用很大,待证明)性能优化
i. 配置以下app
[root@localhost ~]# cat /etc/fstaboop
/dev/mapper/centos-root / xfs noatime,nodiratime 0 0post
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]
二、 内存
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、一、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
三、 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 检查是否生效