18 March 2012

1.8.2: VACUUM only when needed...

I believe a lot of our users will like this release. The startup behaviour until now was to perform a costly database VACUUM on each start. Starting with this release the VACUUM is only performed when a certain fragmentation ratio is reached.

Be lazy with cleaning!


This behaviour was suggested by adriatic in the discussion of a blog post concerning Lifereas performance by Jeff Fortin.

I hope this will easy the pain of the heavy users since most distros moved to ext4. Please give feedback wether this did help you or not!!!

14 comments:

Anonymous said...

You're not solving any real problem here. I'm sure the startup time will drop a bit but the entire app will still fall prey to your poor thread handling. The UI will still be unresponsive when it updates feeds. Thats whats driving me away anyway.

Lars Lindner said...

Anonymous: You are impolite and make incorrect presumptions.

OBN Junkie said...

Anonymous is correct. I do still wait and hope for a better and an effective change in this matter.
I do think that it is a smart decision by the developers and yet we should think about a better or new algorithm to handle I/O File System issues efficiently.

BTW, you should look at the changes that Mozilla Firefox has made with SQLite from version 10.0.0.2 (very slow when starting to bookmark something) - 11.0 (back to "normal")

Lars Lindner said...

OBN Junkie: I'm fully aware of the feed update performance issues. Still this post and 1.8.2 are just about the startup performance which a lot of users care about too. So don't be so selfish :-)

Paulo Anes said...

I think the real problem is the transaction performance of sqlite.

If you don't use transactions to group inserts in sqlite, as explained in https://www.sqlite.org/faq.html#q19 , your insert performance will drop to 60 inserts per second because each insert is a transaction.

With use of transactions they say sqlite performance can go to 50k inserts per second.

beroal said...

Great! VACUUM was defeated.

beroal said...

Well, it seems that "database transactions & Liferea" may be a new post. Suggestions/patches/rants collecting there. :)

Morpheus said...

I'm testing this version, and the startup time has improved (but I realy didn't complain about that), but the update of the feeds is still slow, so I have put liferea in debug mode, and in my case the "problem" is in the "DB: removing item with id xxxxxx" it stops for a minute or more there and liferea freezes, this happens in all removes.

Morpheus said...

I've done a rollback to the version 1.8.1b ... the version 1.8.2 it very slow, I think the problem is in the Remove Item operation, in version 1.8.1b (again in debug mode) the operation of remove item is slow but compared with version 1.8.2 is very speed.

Anonymous said...

So Lars would rather fix small problems and call those who point out real problems impolite and selfish.

I've used Liferea for about 8 years, across several platforms. It use to work well. Startup times may or may not have been a little long, but that is nothing compared to scrolling through a feed and the application freezes, a minute later it returns the UI to you and completes any actions that were performed during the freeze, often leaving you in another part of the feed you were reading. Only upon discovering your location and getting back to where you were can you finish reading. This doesn't happen occasionally, but every few minutes during operation. Starting the application happens much less often.

It is not impolite and selfish to point out real problems. You're getting a little full of yourself Lars.

Paulo Anes said...

Maybe an easy change would be to do this in bd_init:

* Do a PRAGMA integrity_check(1); to see if our database is corrupt.
* if is corrupt try to replace it with a backup or if we don't have a backup just delete it and just recreate it.
* if it's ok do a backup of the DB to use if things go wrong (maybe after db_vacuum).

* when we open_db (with SQLITEASYNC_VFSNAME as parameter) just do:
db_exec("PRAGMA synchronous = OFF;");

Jeff Fortin said...

@Anonymous(es): Lars is doing what he can with the little time he has to work on Liferea. Last time I checked, he is alone in maintaining this codebase.

Instead of just devaluating his work by saying "you're not solving real problems (your work is useless) and your implementation is poor", how about you start providing tentative patches to help him?

Unknown said...

The anonymous users are correct. And if you can do nothing more than twist their words (Jeff) and stomp off in a fit because someone had the nerve to point out that you have larger problems to solve then perhaps you should seek professional help.

If you expect to only hear cheers, then you aren't living in the real world and you really have some unhealthy expectations for yourself.

Lars Lindner said...

Well, I do like trolls :-)