欢迎来到天天文库
浏览记录
ID:46799031
大小:177.51 KB
页数:31页
时间:2019-11-27
《PostgreSQL 性能优化》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、PostgreSQL 性能优化1.硬件数据库最重要的就是I/O了。所以一切从I/O开始。RAID:这个基本不用说,数据库放RAID10上面,只读的备份数据库可以放RAID0,反正挂了没关系。谨记:数据库是RandomReadRAID卡的选择:RAID卡一定要带电池的才可以(BBU)有电源的才能做到东西写进CACHE,RAID就返回硬盘写成功(不用等)1.Areca2.LSI(真正的LSI,re-brand不要)3.HPP400以上系列硬盘选择:首选是SAS:15KRPM每个SAS大约能提供25MB/s的RandomWrite。也就是说在RAID10的设定下,如果需要50MB/s
2、的RandomWrite就需要4个硬盘节俭选择是:SATA可以多用几个硬盘(SAS一倍数量)达到在RAID10中接近SAS的速度。就算SATA买SAS一倍的数量,价格仍然比SAS便宜。也可以买产品:例如Compaq的MSA70(P800BatterybackedRAIDcontrol)CPU:64位Cache:越大越好(现在个人电脑都3M的cache了)CORE:越多越好(postgresql毕竟是跑cpu的)建议最少4个coreRAM:最少4G。通常根据具体需求,用16-64G的RAM2.OS(系统)可用系统:1.DebianStable2.CentOS3.UbuntuLTS
3、4.RedHat5.SUSEEnterprise如果准备付费(服务),那么就是Canonical,Novell跟Redhat这三家选择而已如果准备不买任何服务,可以用Debian,CentOS,UbuntuLTS这里还是觉得系统用RedHat(不付费就CentOS)毕竟人家是企业级的老大哥,错不了。*现在CentOS也可以买到服务了。不可用系统:例如fedora(redhatQA)ubuntu(non-LTS)Scheduler:Grub增加:elevator=deadlineredhat的图标可以看出,deadline是数据库的最佳选择文件系统(Filesystem)这里的选
4、择是:ext2,ext3跟ext4。为什么只考虑这几个呢?因为数据库还是稳定第一,内核开发人员所做的文件系统,理论上说出问题的情况会少点。WAL:放ext2因为WAL本身自己有Journal了,不需要用ext3(ext2快很多)data:ext3BlockSize:postgres自己是8k的blocksize。所以文件系统也用8k的blocksize。这样才能最佳的提高系统的效能。ext4:出来时间还不够长,不考虑。分区(Partitioning)Postgres跟系统OS应该在不同分区系统(OS):系统应该放独立的RAID1数据库(PostgresData):数据库应该放独
5、立的RAID10上。如果RAID是带电池的,mount的时候给data=writeback的选项独立的数据库分区,就不许要记录文件时间了(都是放数据的)所以mount的时候要给noatime的选项,这样可以节约更新时间(timestamp)的I/O了。WAL日志(xlogs):独立的RAID1上(EXT2系统)日志是Sequentialwrite,所以普通的硬盘(SATA)速度就足够了,没有必要浪费SAS在log上Postgresql日志(logs):直接丢给syslog就可以。最好在syslog.conf中设定单独的文件名.这里例如用local2来做postgresqlloc
6、al2.*-/var/log/postgres/postgres.log记得log要给Async,这样才不会等卡在log的I/O上,同时记得设定logrotate以及创建路径(path)ext2VSext3性能测试:HPDL5854DualCore8222processors64GBRAM(2)MSA70directattachedstoragearrays.25spindlesineacharray(RAID10)HPP800Controller6DiskinRAID10onembeddedcontrollerxlogwithext3:avg=87418.44KB/secxl
7、ogwithext2:avg=115375.34KB/sec3.Postgres内存(MemoryUsage)SharedBufferCacheWorkingMemoryMaintenanceMemorySharedBuffersPostgres启动时要到的固定内存。每个allocation是8k。Postgres不直接做硬盘读写,而是把硬盘中的东西放入SharedBuffers,然后更改SharedBuffers,在flush到硬盘去。通常SharedBuffers设定为内存(availa
此文档下载收益归作者所有