Thread: LVM vs Tablespaces
Hi, I am curious what people think on this subject. In the case that you have a database running on hardware which has two separatedata volumes (lets call them data1 and data2), what is the "best" way for PostgreSQL to use those two volumes? Sositting here I can think of two very simple ways of allowing PostgreSQL to use those two volumes: 1) Tablespaces with simple partitions - This is simply create them as /data1 and /data2 then run "create tablespace" to createan additional tablespace on the second data partition then move objects into it. 2) LVM - Use LVM to create one single partition (which encompasses both volumes, for the purposes of this I am assuming thesevolumes are already redundant behind hardware raid), then we have the default tablespace which sits on the larger LVMvolume. So what do people think is the "best" way and why? By "best", I dont have any preconditions in mind, some people may considerblistering performance to be the number one concern and others may consider ease of maintenance to be the numberone, either way both are valid interpretations of "best" and there might be different answers, hence I am wonderingwhat people think is best and what makes it best? Thanks for your time. Scott -- Scott Neville Software Developer, Bluestar Software Telephone: +44 (0)1256 882695 Web site: www.bluestar-software.co.uk Facebook: www.facebook.com/bluestarsoftware Email: scott.neville@bluestar-software.co.uk ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DISCLAIMER: This email message and any attachments is for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any unauthorised review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. The views expressed in this message may not necessarily reflect the views of Bluestar Software Ltd. Bluestar Software Ltd, Registered in England Company Registration No. 03537860, VAT No. 709 2751 29 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Scott Neville wrote: > I am curious what people think on this subject. In the case that you have a database running on > hardware which has two separate data volumes (lets call them data1 and data2), what is the "best" way > for PostgreSQL to use those two volumes? So sitting here I can think of two very simple ways of > allowing PostgreSQL to use those two volumes: > > 1) Tablespaces with simple partitions - This is simply create them as /data1 and /data2 then run > "create tablespace" to create an additional tablespace on the second data partition then move objects > into it. > 2) LVM - Use LVM to create one single partition (which encompasses both volumes, for the purposes of > this I am assuming these volumes are already redundant behind hardware raid), then we have the default > tablespace which sits on the larger LVM volume. > > So what do people think is the "best" way and why? By "best", I dont have any preconditions in mind, > some people may consider blistering performance to be the number one concern and others may consider > ease of maintenance to be the number one, either way both are valid interpretations of "best" and > there might be different answers, hence I am wondering what people think is best and what makes it > best? With Version 1 you might end up with better I/O-performance because you'll use two devices with two I/O queues, but I'm not sure of that. When it comes to ease of maintenance, version 2 (striping) is much better, because you don't have to manage tablespaces, which can be a pain for backup/restore. You also don't have to think about data placement. We have a setup like version 2 and are pretty happy with it. Yours, Laurenz Albe
On Wed, Feb 25, 2015 at 8:52 AM, Albe Laurenz <laurenz.albe@wien.gv.at> wrote:
Scott Neville wrote:
> I am curious what people think on this subject. In the case that you have a database running on
> hardware which has two separate data volumes (lets call them data1 and data2), what is the "best" way
> for PostgreSQL to use those two volumes? So sitting here I can think of two very simple ways of
> allowing PostgreSQL to use those two volumes:
>
> 1) Tablespaces with simple partitions - This is simply create them as /data1 and /data2 then run
> "create tablespace" to create an additional tablespace on the second data partition then move objects
> into it.
> 2) LVM - Use LVM to create one single partition (which encompasses both volumes, for the purposes of
> this I am assuming these volumes are already redundant behind hardware raid), then we have the default
> tablespace which sits on the larger LVM volume.
>
> So what do people think is the "best" way and why? By "best", I dont have any preconditions in mind,
> some people may consider blistering performance to be the number one concern and others may consider
> ease of maintenance to be the number one, either way both are valid interpretations of "best" and
> there might be different answers, hence I am wondering what people think is best and what makes it
> best?
...
When it comes to ease of maintenance, version 2 (striping) is much better, because you
don't have to manage tablespaces, which can be a pain for backup/restore.
You also don't have to think about data placement.
I second Albe's answer. Ease of maintenance is paramount for me so using LVM is the better choice, more so given that performance is being taken care on the SAN by the storage team. Of course that might not be everyone's case.
Cheers.