我有一个 postgresql 9.2数据库,它一直在大量更新.因此系统受I / O限制,我正在考虑进行另一次升级,我只需要一些指示,从哪里开始改进.
以下是过去3个月情况的情况:
如您所见,更新 *** 作占据了大部分磁盘利用率.这是另一张情况如何在更详细的3小时窗口中看到的情况:
如您所见,峰值写入速率约为20MB / s
软件
服务器正在运行ubuntu 12.04和postgresql 9.2.
通常在ID标识的各行上更新更新类型.例如. UPDATE汽车SET price = some_price,updated_at = some_time_stamp WHERE ID = some_ID.
我已经尽可能多地删除和优化了索引,并且服务器配置(linux内核和postgres conf)也得到了很好的优化.
硬件
硬件是一个专用服务器,具有32GB ECC RAM,4x 600GB 15.000 rpm SAS磁盘,采用RAID 10阵列,由带BBU的LSI raID控制器和Intel Xeon E3-1245 Quadcore处理器控制.
问题
>图表所见的性能是否适用于此系统
口径(读/写)?
>因此,我是否应该专注于进行硬件升级或深入研究软件(内核调整,confs,查询等)?
>如果进行硬件升级,磁盘数量是性能的关键吗?
—————————— UPDATE ——————- —————-
我现在用四个intel 520 SSD而不是旧的15k SAS磁盘升级了我的数据库服务器.我正在使用相同的raID控制器.事情已经有了很大的改进,从下面你可以看到,峰值I / O性能提高了大约6-10倍 – 这太棒了!
然而,根据新SSD的答案和I / O功能,我期待更多的改进20-50倍.所以这里有另一个问题.
新问题
我当前的配置中是否有某些内容限制了我的系统的I / O性能(瓶颈在哪里)?
我的配置:
/etc/postgresql/9.2/main/postgresql.conf
data_directory = '/var/lib/postgresql/9.2/main'hba_file = '/etc/postgresql/9.2/main/pg_hba.conf'IDent_file = '/etc/postgresql/9.2/main/pg_IDent.conf'external_pID_file = '/var/run/postgresql/9.2-main.pID'Listen_addresses = '192.168.0.4,localhost'port = 5432unix_socket_directory = '/var/run/postgresql'wal_level = hot_standbysynchronous_commit = oncheckpoint_timeout = 10minarchive_mode = onarchive_command = 'rsync -a %p postgres@192.168.0.2:/var/lib/postgresql/9.2/wals/%f </dev/null'max_wal_senders = 1wal_keep_segments = 32hot_standby = onlog_line_prefix = '%t 'datestyle = 'iso,mdy'lc_messages = 'en_US.UTF-8'lc_monetary = 'en_US.UTF-8'lc_numeric = 'en_US.UTF-8'lc_time = 'en_US.UTF-8'default_text_search_config = 'pg_catalog.english'default_statistics_target = 100maintenance_work_mem = 1920MBcheckpoint_completion_target = 0.7effective_cache_size = 22GBwork_mem = 160MBwal_buffers = 16MBcheckpoint_segments = 32shared_buffers = 7680MBmax_connections = 400
/etc/sysctl.conf中
# sysctl config#net.ipv4.ip_forward=1net.ipv4.conf.all.rp_filter=1net.ipv4.icmp_echo_ignore_broadcasts=1# ipv6 settings (no autoconfiguration)net.ipv6.conf.default.autoconf=0net.ipv6.conf.default.accept_dad=0net.ipv6.conf.default.accept_ra=0net.ipv6.conf.default.accept_ra_defrtr=0net.ipv6.conf.default.accept_ra_rtr_pref=0net.ipv6.conf.default.accept_ra_pinfo=0net.ipv6.conf.default.accept_source_route=0net.ipv6.conf.default.accept_redirects=0net.ipv6.conf.default.forwarding=0net.ipv6.conf.all.autoconf=0net.ipv6.conf.all.accept_dad=0net.ipv6.conf.all.accept_ra=0net.ipv6.conf.all.accept_ra_defrtr=0net.ipv6.conf.all.accept_ra_rtr_pref=0net.ipv6.conf.all.accept_ra_pinfo=0net.ipv6.conf.all.accept_source_route=0net.ipv6.conf.all.accept_redirects=0net.ipv6.conf.all.forwarding=0# Updated according to postgresql tuningvm.dirty_ratio = 10vm.dirty_background_ratio = 1vm.swappiness = 0vm.overcommit_memory = 2kernel.sched_autogroup_enabled = 0kernel.sched_migration_cost = 50000000
/etc/sysctl.d/30-postgresql-shm.conf
# Shared memory settings for Postgresql# Note that if another program uses shared memory as well,you will have to# coordinate the size settings between the two.# Maximum size of shared memory segment in bytes#kernel.shmmax = 33554432# Maximum total size of shared memory in pages (normally 4096 bytes)#kernel.shmall = 2097152kernel.shmmax = 8589934592kernel.shmall = 17179869184# Updated according to postgresql tuning
MegaCli64 -LDInfo -LAll -aAll的输出
Adapter 0 -- Virtual Drive information:Virtual Drive: 0 (Target ID: 0)name :RAID Level : Primary-1,Secondary-0,RAID Level QualifIEr-0Size : 446.125 GBSector Size : 512Is VD emulated : NoMirror Data : 446.125 GBState : OptimalStrip Size : 64 KBNumber Of Drives per span:2Span Depth : 2Default Cache Policy: WriteBack,ReadAhead,Direct,Write Cache OK if Bad BBUCurrent Cache Policy: WriteBack,Write Cache OK if Bad BBUDefault Access Policy: Read/WriteCurrent Access Policy: Read/Writedisk Cache Policy : disk's DefaultEncryption Type : NoneIs VD Cached: No
If doing a harDWare upgrade,is the number of disks key to performance?
是的,作为一个硬盘 – 甚至SAS–有一个需要时间移动的头.
想要升级HUGH吗?
杀死SAS光盘,转到SATA.插入SATA SSD – 企业级,如三星843T.
结果?每个驱动器可以执行大约60.000(即6万)IOPS.
这就是SSD在数据库领域成为杀手并且比任何SAS驱动器便宜得多的原因. Phyiscal旋转盘无法跟上光盘的IOPS功能.
你的SAS光盘起初是一个平庸的选择(太大而无法获得大量的IOPS)对于更高使用率的数据库(更小的光盘意味着更多的IOPS),但最终SSD在这里改变了游戏规则.
关于软件/内核.任何体面的数据库都会执行大量IOPS并刷新缓冲区.为了保证基本的ACID条件,需要写入日志文件.您可以做的唯一内核调整会使您的事务完整性失效 – 部分是您可以逃脱.回写模式下的RaID控制器将执行此 *** 作 – 即使不是,也确认写入已刷新 – 但它可以这样做,因为BBU在电源故障时被假定为安全.你在内核中做得更高的东西 – 更好地知道你可以忍受负面的副作用.
最后,数据库需要IOPS,您可能会惊讶地发现您的设置与此处的其他设置相比有多么微小.我已经看到有100个光盘的数据库只是为了获得他们需要的IOPS.但实际上,今天,你购买固态硬盘并购买它们的尺寸 – 它们在IOPS功能方面非常优越,用SAS驱动器对抗这个游戏毫无意义.
是的,您的IOPS数字对硬件来说并不坏看.在我期望的范围内.
总结以上是内存溢出为你收集整理的postgresql – 如何从更新(软件和硬件)优化重I / O数据库全部内容,希望文章能够帮你解决postgresql – 如何从更新(软件和硬件)优化重I / O数据库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)