Failed to follow my own advice, sigh.

Thanks for the feedback, but please remember to copy the list on all replies.

Running GnuCash from the command line with --log gnc.backend.sql=debug --log 
gnc.backend.dbi=debug might provide some insight into what's going on (the 
output will be in the trace file), but if that's too much trouble I understand 
completely.

Regards,
John Ralls

> On Sep 4, 2020, at 10:35 PM, Greg Ingram <ing...@symsys.com> wrote:
> 
> On 9/4/20 1:34 PM, John Ralls wrote:
>> 
>>> On Sep 4, 2020, at 9:43 AM, Greg Ingram<ing...@symsys.com>  wrote:
>>> 
>>> I'm a long-time user and recently started to lurk on the -devel list. This 
>>> problem may belong on -user but it seems like a problem for developers 
>>> rather than my fellow users.
>>> 
>>> I have a set of book in a SQLite3 file and I'm trying to save it in 
>>> PostgreSQL. It's still currently running. Here's a couple of lines from top:
>>> 
>>>    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM TIME+ COMMAND
>>>  42022 ingram    20   0 1600828 796256  93648 R 100.0   9.9 125:28.52 
>>> gnucash
>>> 
>>> It keeps one CPU close to pegged. I can't tell what it's doing. The Save As 
>>> dialog is still visible with the Save As button looking like it's been 
>>> pressed. I don't see any relevant activity in system logs or GnuCash logs. 
>>> As far as I can tell, it's never connected to the PostgreSQL server. It 
>>> hasn't created any tables. I created the database after I aborted a 
>>> previous try where the database didn't exist yet.
>>> 
>>> I'm using GnuCash 3.8, Build ID: 3.8b+(2019-12-29), as distributed with 
>>> Kubuntu/Focal. I've also used a 3.8 from a flatpak on a machine with an 
>>> older version of Kubuntu.
>>> 
>>> It's a pretty big data set: 112M SQLIte3 file with roughly 10K accounts, 
>>> 50K transactions, and 160K splits.
>>> 
>>> Is there hope it'll start writing to the database?
>>> 
>>> I searched for information related to what I'm seeing and most of what I 
>>> found seemed to be about GnuCash 2.8 and earlier. There was some discussion 
>>> about revamping GnuCash to take better advantage of SQL and that, at that 
>>> time, it was still reading the entire database into memory.
>>> 
>>> Are things different now? Is there a performance gain to be had with a SQL 
>>> back end? I switched from XML to SQLite3 because it seemed like the program 
>>> was bogging down. And that's why I'm looking to try PostgreSQL now.
>>> 
>>> I've run into what may be a similar problem where I can no longer import 
>>> transactions. Or I wasn't willing to wait long enough. Something I read 
>>> back then suggested that some part of matching transactions to accounts 
>>> involved a sort of exponential growth in the work it was doing. That's 
>>> probably not clear but whatever it was led me to conclude that I had too 
>>> much data for the program to handle. I work around the issue by importing 
>>> into an almost empty set of accounts and the cut and paste into my official 
>>> books.
>> There never was a GnuCash 2.8. Late in the development cycle for what would 
>> have been 2.8 we had to change the GUI from Gtk2 to Gtk3 and decided to 
>> release the result as GnuCash 3. That has a SQL backend rewritten in C++ but 
>> the underlying design is the same and didn't change the way GnuCash 
>> interacts with the database. You'll probably find references to a Postgres 
>> backend from GnuCash 2.2. That was replaced by the SQL/DBI backend in 2.4 so 
>> you should disregard anything you find about that, but anything about 2.4 or 
>> later is still useful.
>> 
>> The first thing to do is to make sure that you can connect to your Postgres 
>> server and create a database. I suggest you do that with File>New and 
>> selecting the Postgres backend so that it's not conflated with the high 
>> overhead of copying a large database. Once you're sure that works *then* 
>> migrate your SQLite3 database.
>> 
>> The SQL backend is written to create the database for you, it won't work to 
>> create an empty database and use it. Consequently the user you connect with 
>> must have CREATE* privs on the server.
>> 
>> There is only one performance gain with the SQL backend regardless of SQL 
>> engine. Of the three SQLite3 has the least overhead so unless the 
>> MySQL/Maria or PG server is running on hardware optimized for it and 
>> connected by a very fast network you'll get the best performance with 
>> SQLite3. That aside, the SQL backends load the whole database into memory 
>> and all GnuCash work is done on those in-memory objects. The only difference 
>> is that when you change something the SQL backends commit it immediately to 
>> the database; the XML backend waits and writes everything back out either 
>> when you tell it to save or periodically if you have autosave turned on. 
>> Since GnuCash is mostly single-threaded and has no object locking XML saves 
>> block the UI so the one performance gain SQL affords is that you won't have 
>> to wait for autosaves to complete every n minutes.
>> 
>> The matching algorithm for imports is pretty slow. Jean Laroche made some 
>> nice improvements for 4.2 that we'll release on the 27th. Dunno if it will 
>> be enough, but switching backends isn't going to help that at all.
> 
> Reporting back:
> 
> Yes, creating a new set of books in PostgreSQL works fine. I can also Save As 
> a small set of books to the PostgreSQL server. I stopped the Save As of the 
> big data set after it had used about 273 minutes of CPU.  I don't *think* it 
> was because I'd created the database ahead of time because I'd also started a 
> Save As without having done so.
> 
> Regardless, four and a half hours with zero feedback from the program about 
> what it's doing seems, uh, improvable.
> 
> I'm trying the Save As again to verify. I dropped that database first. So far 
> it looks the same: it's eating an entire CPU and hasn't made a connection to 
> the PostgreSQL server. It hasn't created the database. What can it be doing 
> to jam itself?  The witching hour approaches here and I'll soon be hitting 
> the rack. I'm going to let this process run while I dream.
> 
> Since you say there's nothing to gain by switching to PostgreSQL, I'm not 
> going to pursue it much further other than to provide this feedback as to how 
> it performs. I'll stick with SQLite3 for now.
> 
> - Greg

_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to