两个postgresql服务器配置相同,性能不同

时间:2011-09-27 15:54:55

标签: postgresql

我有两个相同的服务器,两者都安装了postgresql服务器版本9.0.4,配置相同。如果我启动一个执行大约5k插入的.sql文件,在第一个上需要几秒钟,在第二个上需要1分30秒。

如果我设置了synchronous_commit,速度会急剧降低(如预期的那样),并且两台服务器的性能相当。但是如果我将synchronous_commit设置为on,则在一台服务器上插入脚本的执行时间增加不到一秒,而另一台则增加太多,正如我在第一段时间所说的那样。

有关这种表演差异的想法吗?我错过了一些配置吗?

更新:尝试了一个简单的磁盘测试:time sh -c "dd if=/dev/zero of=ddfile bs=8k count=200000 && sync"

快速服务器输出:

1638400000 bytes (1.6 GB) copied, 1.73537 seconds, 944 MB/s

real    0m32.009s
user    0m0.018s
sys 0m2.298s

服务器输出缓慢:

1638400000 bytes (1.6 GB) copied, 4.85727 s, 337 MB/s

real    0m35.045s
user    0m0.019s
sys 0m2.221s

常用功能(两台服务器):

SATA, RAID1, controller: Intel Corporation 82801JI (ICH10 Family) SATA AHCI Controller, distribution: linux centOS. mount -v output:
/dev/md2 on / type ext3 (rw)
proc on /proc type proc (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/md1 on /boot type ext3 (rw)

快速服务器:内核2.6.18-238.9.1.el5#1 SMP

Disk /dev/sda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders, total 1465149168 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            3906     4209029     2102562   fd  Linux raid autodetect
/dev/sda2         4209030     4739174      265072+  fd  Linux raid autodetect
/dev/sda3         4739175  1465144064   730202445   fd  Linux raid autodetect

慢速服务器:内核2.6.32-71.29.1.el6.x86_64#1 SMP

Disk /dev/sda: 750.2 GB, 750156374016 bytes
64 heads, 32 sectors/track, 715404 cylinders, total 1465149168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006ffc4

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     4194303     2096128   fd  Linux raid autodetect
/dev/sda2         4194304     5242879      524288   fd  Linux raid autodetect
/dev/sda3         5242880  1465147391   729952256   fd  Linux raid autodetect

解决性能问题是否有用?

2 个答案:

答案 0 :(得分:1)

对我而言,这听起来像在“快速”服务器中有硬盘的写缓存,而在慢速服务器中,硬盘在PG写入时真正写入数据(通过调用fsync) )

答案 1 :(得分:1)

我认为你的新内核速度慢的服务器存在工作障碍。这很好,否则您可以在发生电源故障时丢失数据。但它当然比启用写入缓存且没有障碍的运行速度慢,也就是用剪刀运行。

您可以使用mount -v检查是否启用了障碍 - 在输出中搜索barrier=1。您可以禁用文件系统(mount -o remount,barrier=0 /)的障碍以加快速度,但随后又存在数据损坏的风险。

尝试在一个事务中执行5k插入 - Postgres不必在插入的每一行上写入磁盘。每秒交易次数的理论限制与磁盘旋转速度(7200rpm磁盘≈7200/ 60 tps = 120 tps)相当,因为磁盘每次旋转只能写入扇区一次。