Gnucash file is getting long!

John Ralls jralls at ceridwen.us
Sat Jun 17 15:04:56 EDT 2017


> On Jun 17, 2017, at 10:22 AM, AC <gnucash at acarver.net> wrote:
> 
> On 2017-06-17 00:07, Colin Law wrote:
>> On 17 June 2017 at 02:31, AC <gnucash at acarver.net> wrote:
>>> On 2017-06-16 09:35, Derek Atkins wrote:
>>>> Adam Funk <a24061 at ducksburg.com> writes:
>>>> 
>>>>>> Not necessarily.  The "default" backend would be SQLite, which is a DB
>>>>>> that stores into a single file.  So it will act like the current XML
>>>>>> backend in terms of storage, but not necessarily the same with backup
>>>>>> files.  However no server is required.
>>>>> 
>>>>> Great!  Thanks to you & Colin for that information.
>>>> 
>>>> Also keep in mind that the mysql data isn't compressed, so your disk
>>>> space usage will grow significantly when using a SQL backend vs the
>>>> (compressed) XML.
>>>> 
>>> 
>>> You can enable compression in MySQL 5.5.  This applies to InnoDB table
>>> types using a file per table and the Barracuda file format.  This
>>> configuration must be enabled before the tables are created.
>> 
>> Given the small size (in MySQL terms) of a GC database and the complex
>> nature of some of the queries I suggest we would be better to accept a
>> larger database and (presumably) quicker access. Though I suppose if
>> the db indices are arranged appropriately the overhead may be small.
>> 
>> Colin
> 
> The disk speed is going to be the major performance driver even if GC
> were running fully transactional rather than as the full table load.
> For a modern processor and the size of the GC tables and indicies it's
> really only going to be maybe a 5% slowdown in the actual transaction
> within the CPU but disk write is always going to be much slower in wall
> clock time.  However, there would likely be a recovery of that speed
> when it's only having to handle transactions rather than manipulating a
> massive data structure in memory and pushing all that to the database at
> once.  In transaction mode with compression, the order of operations is
> compression in memory then disk write so there's less data to write to
> disk.  The loss in speed from the compression process would be made up
> by the reduction in wait time for the disk write.
> 
> There's lots of documentation and tests of MySQL's compression
> performance especially in the later versions (after 5.7 where some code
> optimizations were made).  The savings they report in space is about 40%
> compression on average which isn't bad for a minor speed bump.

It doesn’t “push all that to the database”. It runs update or insert queries for the tables in question, very stupidly. For example, adding a GnuCash transaction will do one insert for the transaction record, one for each slot in the transaction, one for each split, and one for each slot in each split.
I don’t remember offhand how many slots normal transactions and splits have, but it isn’t a lot. The whole mess is wrapped in a database transaction.

GnuCash uses generic SQL commands that work on all 3 supported databases. That would have to change in order for it to support MySql compression. GnuCash would also need a way to determine that the server is correctly configured. Neither is likely to get implemented any time soon.

Regards,
John Ralls



More information about the gnucash-user mailing list