Thread: PostgreSQL perform poorly on VMware ESXi
Hi everybody,
I'm having some issues with PostgreSQL 9.03 running on FreeBSD 8.2 on top of VMware ESXi 4.1 U1.
The problem is query are taking too long, and some times one query "blocks" everybody else to use the DB as well.
I'm a network administrator, not a DBA, so many things here can be "newbie" for you guys, so please be patient. :)
Clonning this database to another machine not virtualized, any "crap" machine, it runs a way fastar, I've measured one specific "SELECT" and at the virtualized system (4GB RAM, 4 processors, SATA disk, virtualized), it took 15minutes!, in the crap machine (2GB RAM, 1 processor, SATA disk, NOT virtualized), it took only 2!!!
I always think the bottleneck is disk I/O as I can see from the vSphere performance view, but the virtual machine is using exclusively the SATA disk with no concurrency with other machines.
how do you guys deal with virtualization? any tips/recommendations? does that make sense the disk I/O? any other sugestion?
thanks in advance!
Lucas.
On 7 Listopad 2011, 11:36, Lucas Mocellin wrote: > Hi everybody, > > I'm having some issues with PostgreSQL 9.03 running on FreeBSD 8.2 on top > of VMware ESXi 4.1 U1. > > The problem is query are taking too long, and some times one query > "blocks" > everybody else to use the DB as well. > > I'm a network administrator, not a DBA, so many things here can be > "newbie" > for you guys, so please be patient. :) > > Clonning this database to another machine not virtualized, any "crap" > machine, it runs a way fastar, I've measured one specific "SELECT" and at > the virtualized system (4GB RAM, 4 processors, SATA disk, virtualized), it > took 15minutes!, in the crap machine (2GB RAM, 1 processor, SATA disk, NOT > virtualized), it took only 2!!! What is this "cloning" thing? Dump/restore? Something at the filesystem-device level? My wild guess is that the autovacuum is not working, thus the database is bloated and the cloning removes the bloat. Post EXPLAIN ANALYZE output of the query for both machines (use explain.depesz.com). Have you done any benchmarking on the virtualized machine to check the basic I/O performance? A simple "dd test", bonnie? Tomas
On Mon, Nov 07, 2011 at 08:36:10AM -0200, Lucas Mocellin wrote: > Hi everybody, > > I'm having some issues with PostgreSQL 9.03 running on FreeBSD 8.2 on top > of VMware ESXi 4.1 U1. > > The problem is query are taking too long, and some times one query "blocks" > everybody else to use the DB as well. > > I'm a network administrator, not a DBA, so many things here can be "newbie" > for you guys, so please be patient. :) > > Clonning this database to another machine not virtualized, any "crap" > machine, it runs a way fastar, I've measured one specific "SELECT" and at > the virtualized system (4GB RAM, 4 processors, SATA disk, virtualized), it > took 15minutes!, in the crap machine (2GB RAM, 1 processor, SATA disk, NOT > virtualized), it took only 2!!! > > I always think the bottleneck is disk I/O as I can see from the vSphere > performance view, but the virtual machine is using exclusively the SATA > disk with no concurrency with other machines. > > how do you guys deal with virtualization? any tips/recommendations? does > that make sense the disk I/O? any other sugestion? > > thanks in advance! > > Lucas. Hi Lucas, Virtualization is not a magic bullet. It has many advantages but also has disadvantages. The resources of the virtual machine are always a subset of the host machine resources. In addition, the second layer of disk I/O indirection through the virtual disk can effectively turn a sequential I/O pattern into a random I/O pattern with the accompanying 10:1 decrease in I/O throughput. I would recommend testing your I/O on your virtual machine. Regards, Ken
On 07/11/2011 11:36, Lucas Mocellin wrote: > Hi everybody, > > I'm having some issues with PostgreSQL 9.03 running on FreeBSD 8.2 on top > of VMware ESXi 4.1 U1. I hope your hardware is Nehalem-based or newer... > The problem is query are taking too long, and some times one query "blocks" > everybody else to use the DB as well. Ok, so multiple users connect to this one database, right? > I'm a network administrator, not a DBA, so many things here can be "newbie" > for you guys, so please be patient. :) First, did you configure the server and PostgreSQL at all? For FreeBSD, you'll probably need this in sysctl.conf: vfs.hirunningspace=8388608 vfs.lorunningspace=6291456 vfs.read_max=128 and for PostgreSQL, read these: http://www.revsys.com/writings/postgresql-performance.html http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server > I always think the bottleneck is disk I/O as I can see from the vSphere > performance view, but the virtual machine is using exclusively the SATA > disk with no concurrency with other machines. I don't see why concurrency with other machines is relevant. Are you complaining that multiple users accessing a single database are blocked while one large query is executing or that this one query blocks other VMs? If the single query generates a larger amount of IO than your VM host can handle then you're probably out of luck. Virtualization is always bad for IO. You might try increasing the amount of memory for the virtual machine in the hope that more data will be cached. > how do you guys deal with virtualization? any tips/recommendations? does > that make sense the disk I/O? any other sugestion? Are you sure it's IO? Run "iostat 1" for 10 seconds while the query is executing and post the results.