基于linux(CentOS7)数据库性能优化(Postgresql) - Go语言中文社区

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


基于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 检查是否生效

 

版权声明:本文来源博客园,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.cnblogs.com/buckyball/p/11096012.html
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-11-10 11:04:08
  • 阅读 ( 835 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢