Thread: [pgsql-advocacy] Postgres replaces SQLite as well as it replaces Oracle?

[pgsql-advocacy] Postgres replaces SQLite as well as it replaces Oracle?

From
Joshua Kramer
Date:
Hello,

Has anyone done articles or advocacy for Postgres in embedded applications?

I am fooling around with Home Assistant on a Raspberry Pi.  This is a
Python 3 app that is normally backed by SQLite.  But it has issues
because often times more than one process wants to write to the
database, and SQLite doesn't do that well.  I found a handy guide on
replacing SQLite with PG in this application:

https://community.home-assistant.io/t/howto-postgresql-on-raspberry-pi-all-in-one-installer/5527/21

Two things I noticed right off the bat.  The UI of HomeAssistant is
MUCH faster using PG than it is using SQLite.  We're talking 5 seconds
for a page refresh vs half a second.  Second, Postgres is tiny!  The
whole stack- OS, Postgres, HASS server- takes up a whopping 67 MB of
RAM.

It'll be interesting to see how these stats change as I leave the
thing running for months on end.

Cheers!
-JK


Re: [pgsql-advocacy] Postgres replaces SQLite as well as it replacesOracle?

From
Darren Duncan
Date:
Well there are a variety of definitions of "embedded".  You could probably run
SQLite on a device that has a total of 1MB of RAM or similar. -- Darren Duncan

On 2017-02-24 5:12 PM, Joshua Kramer wrote:
> Hello,
>
> Has anyone done articles or advocacy for Postgres in embedded applications?
>
> I am fooling around with Home Assistant on a Raspberry Pi.  This is a
> Python 3 app that is normally backed by SQLite.  But it has issues
> because often times more than one process wants to write to the
> database, and SQLite doesn't do that well.  I found a handy guide on
> replacing SQLite with PG in this application:
>
> https://community.home-assistant.io/t/howto-postgresql-on-raspberry-pi-all-in-one-installer/5527/21
>
> Two things I noticed right off the bat.  The UI of HomeAssistant is
> MUCH faster using PG than it is using SQLite.  We're talking 5 seconds
> for a page refresh vs half a second.  Second, Postgres is tiny!  The
> whole stack- OS, Postgres, HASS server- takes up a whopping 67 MB of
> RAM.
>
> It'll be interesting to see how these stats change as I leave the
> thing running for months on end.
>
> Cheers!
> -JK



Re: [pgsql-advocacy] Postgres replaces SQLite as well as it replacesOracle?

From
Josh Berkus
Date:
On 02/24/2017 05:12 PM, Joshua Kramer wrote:
> Hello,
>
> Has anyone done articles or advocacy for Postgres in embedded applications?
>
> I am fooling around with Home Assistant on a Raspberry Pi.  This is a
> Python 3 app that is normally backed by SQLite.  But it has issues
> because often times more than one process wants to write to the
> database, and SQLite doesn't do that well.  I found a handy guide on
> replacing SQLite with PG in this application:
>
> https://community.home-assistant.io/t/howto-postgresql-on-raspberry-pi-all-in-one-installer/5527/21
>
> Two things I noticed right off the bat.  The UI of HomeAssistant is
> MUCH faster using PG than it is using SQLite.  We're talking 5 seconds
> for a page refresh vs half a second.  Second, Postgres is tiny!  The
> whole stack- OS, Postgres, HASS server- takes up a whopping 67 MB of
> RAM.

You can probably get PostgreSQL even smaller if you're willing to
jettison some functionality.  Doesn't sound like you need to, though.
Presumably you've deleted all the databases but one?

We haven't really targeted the "embedded" use-case because, well,
SQLite.  However, when the smallest ARM card you can buy has 64MB of
RAM, the profile of "embedded" has changed considerably.  Back in the
early days of PG, some of our earliest use cases were "embedded": TiVO,
vehicle onboard systems, voicemail systems, etc.  It's probably still
being used for this, but we don't hear about it much.

> It'll be interesting to see how these stats change as I leave the
> thing running for months on end.

Poll the size of the various system catalogs as you go; you may discover
that keeping it small is mostly a matter of aggressively vacuuming them.

Thanks so much for the story!

--
Josh Berkus
Containers & Databases Oh My!


Re: [pgsql-advocacy] Postgres replaces SQLite as well as it replaces Oracle?

From
Joshua Kramer
Date:
> Poll the size of the various system catalogs as you go; you may discover
> that keeping it small is mostly a matter of aggressively vacuuming them.

Here's what's interesting in that regard: I actually want to tune PG
to have as few disk writes as possible, so as to not burn through SD
cards.

Given that even a modest Raspberry Pi has 1GB of RAM, I thought I
would store all of the Postgres database files (and other stuff under
/var) in a RAM disk, then archive the ram disk on shutdown (and
restore the archive on startup).  I'm not quite there yet. I wrote a
couple of systemd Units.  One unit archives /var upon system shutdown
and one un-archives upon startup (but before the multi-user target
starts other services).  The problem is, I have not been able to get
systemd to do things in a sane manner.  It always insists upon
starting multi-user.target at the same time the un-archive is running,
so services that depend on /var being complete do not start cleanly.
Same with shutdown- it always kills power while the archive script is
running.

At this time it's running as-is.  I've enabled sysstat so I can keep
track of disk writes and tune as needed.

On Sat, Feb 25, 2017 at 1:40 PM, Josh Berkus <josh@berkus.org> wrote:
> On 02/24/2017 05:12 PM, Joshua Kramer wrote:
>> Hello,
>>
>> Has anyone done articles or advocacy for Postgres in embedded applications?
>>
>> I am fooling around with Home Assistant on a Raspberry Pi.  This is a
>> Python 3 app that is normally backed by SQLite.  But it has issues
>> because often times more than one process wants to write to the
>> database, and SQLite doesn't do that well.  I found a handy guide on
>> replacing SQLite with PG in this application:
>>
>> https://community.home-assistant.io/t/howto-postgresql-on-raspberry-pi-all-in-one-installer/5527/21
>>
>> Two things I noticed right off the bat.  The UI of HomeAssistant is
>> MUCH faster using PG than it is using SQLite.  We're talking 5 seconds
>> for a page refresh vs half a second.  Second, Postgres is tiny!  The
>> whole stack- OS, Postgres, HASS server- takes up a whopping 67 MB of
>> RAM.
>
> You can probably get PostgreSQL even smaller if you're willing to
> jettison some functionality.  Doesn't sound like you need to, though.
> Presumably you've deleted all the databases but one?
>
> We haven't really targeted the "embedded" use-case because, well,
> SQLite.  However, when the smallest ARM card you can buy has 64MB of
> RAM, the profile of "embedded" has changed considerably.  Back in the
> early days of PG, some of our earliest use cases were "embedded": TiVO,
> vehicle onboard systems, voicemail systems, etc.  It's probably still
> being used for this, but we don't hear about it much.
>
>> It'll be interesting to see how these stats change as I leave the
>> thing running for months on end.
>
> Poll the size of the various system catalogs as you go; you may discover
> that keeping it small is mostly a matter of aggressively vacuuming them.
>
> Thanks so much for the story!
>
> --
> Josh Berkus
> Containers & Databases Oh My!


Re: [pgsql-advocacy] Postgres replaces SQLite as well as it replacesOracle?

From
Josh Berkus
Date:
On 02/25/2017 07:53 PM, Joshua Kramer wrote:
>> Poll the size of the various system catalogs as you go; you may discover
>> that keeping it small is mostly a matter of aggressively vacuuming them.
>
> Here's what's interesting in that regard: I actually want to tune PG
> to have as few disk writes as possible, so as to not burn through SD
> cards.

A few tips:

1. Put the stats cache on a ramdisk.
2. No autovacuum, use scheduled vaccum instead (and if you have nightly
downtime, consider rebuilding the database instead of vacuum)
3. Put tmp/sorting space on a ramdisk

>
> Given that even a modest Raspberry Pi has 1GB of RAM, I thought I
> would store all of the Postgres database files (and other stuff under
> /var) in a RAM disk, then archive the ram disk on shutdown (and
> restore the archive on startup).  I'm not quite there yet. I wrote a
> couple of systemd Units.  One unit archives /var upon system shutdown
> and one un-archives upon startup (but before the multi-user target
> starts other services).  The problem is, I have not been able to get
> systemd to do things in a sane manner.  It always insists upon
> starting multi-user.target at the same time the un-archive is running,
> so services that depend on /var being complete do not start cleanly.
> Same with shutdown- it always kills power while the archive script is
> running.
>
> At this time it's running as-is.  I've enabled sysstat so I can keep
> track of disk writes and tune as needed.

I think Bruce did a bunch of work tracking all the places where we write
to disk, once upon a time.  Bruce?

--
Josh Berkus
Containers & Databases Oh My!


Re: [pgsql-advocacy] Postgres replaces SQLite as well as it replacesOracle?

From
Bruce Momjian
Date:
On Mon, Feb 27, 2017 at 09:05:50AM -0800, Josh Berkus wrote:
> On 02/25/2017 07:53 PM, Joshua Kramer wrote:
> > At this time it's running as-is.  I've enabled sysstat so I can keep
> > track of disk writes and tune as needed.
>
> I think Bruce did a bunch of work tracking all the places where we write
> to disk, once upon a time.  Bruce?

Uh, I did?  The only thing I can think of is a blog post comparing
performance on various types of storage:

    http://momjian.us/main/blogs/pgblog/2012.html#February_2_2012

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +


Re: [pgsql-advocacy] Postgres replaces SQLite as well as it replacesOracle?

From
Josh Berkus
Date:
On 02/28/2017 12:56 PM, Bruce Momjian wrote:
> On Mon, Feb 27, 2017 at 09:05:50AM -0800, Josh Berkus wrote:
>> On 02/25/2017 07:53 PM, Joshua Kramer wrote:
>>> At this time it's running as-is.  I've enabled sysstat so I can keep
>>> track of disk writes and tune as needed.
>>
>> I think Bruce did a bunch of work tracking all the places where we write
>> to disk, once upon a time.  Bruce?
>
> Uh, I did?  The only thing I can think of is a blog post comparing
> performance on various types of storage:

Ages ago, it was back when Whitepages.com was looking for help.  You
might still have the notes somewhere ...


--
Josh Berkus
Containers & Databases Oh My!