On Thu, May 5, 2016 at 9:38 AM, Rob Willett <rob.sqlite at robertwillett.com> wrote: > Mmmm?. Initial tests are not conclusive, it does look as if using rsync > ?-inplace does speed things up but nowhere near as much as we anticipated. > > Testing consisted of a 6GB test database which is a backup copy from a few > months ago. > > We timed copying the database over using cp > > # time cp tfl.sqlite.backup t1 > > real 2m30.528s > user 0m0.052s > sys 0m10.403s > > We then edited the database and deleted the contents of a table that would > have changed over the lifetime of the database. We will freely admit we have > no idea where this table is in the database file and have no intention of > finding out. Thats SQLites problem :) The file had 65,000 lines or so and > would have been updated regularly at the start of the database and over the > last few months would have had small daily updates but they would be getting > fewer and fewer. > > We then did > > # time rsync -av --inplace --no-whole-file tfl.sqlite.backup test_db > sending incremental file list > tfl.sqlite.backup > >
was the file already in place with sending changes? Or is it a full copy of the whole thing all the time? if the later... well cp is gonna really be as good as it gets.... > > sent 564,081,269 bytes received 623,255 bytes 4,805,995.95 bytes/sec > total size is 6,067,933,184 speedup is 10.75 > > real 1m57.689s > user 2m4.947s > sys 0m8.952s > > The ?no-while-file is apparently needed as well as ?inplace. > > We checked the md5sums at the end > > # md5sum tfl.sqlite.backup test_db t1 > b5bd91cc9b49ee1f54a8a2d013005586 tfl.sqlite.backup > b5bd91cc9b49ee1f54a8a2d013005586 test_db > b5bd91cc9b49ee1f54a8a2d013005586 t1 > > So we can see that the file integrity has been preserved which is what we > expect but its always good to check. Yes we know that md5sum is not perfect > but for this purpose its fine. However the rsync vs cp time is not as big a > difference as we expected. Its still taking 80% of the time of the cp. > > Our first thoughts are that 80% is still better than 100% so thats good, our > second thoughts are that we need to test this on a more representative set > of changes to the database. Deleting the contents of a table that has been > changed over the lifetime of the database may be the worst-case scenario as > it might well touch many, many pages in the database. We are certainly not > expert enough to comment on this assumption of how rows are distributed in > the database and if anybody would like to chip in, please do so. > > Our intention now is to take a more recent and representative database, run > a days and a weeks set of database transactions through it which is easy > enough, though takes time, and see how that compares. > > Thanks for the suggestion, > > Rob, > > On 5 May 2016, at 16:42, J Decker wrote: > >> Instead of cp, rsync might help it is able to send delta changes. >> >> On Wed, May 4, 2016 at 10:55 AM, Rob Willett >> <rob.sqlite at robertwillett.com> wrote: >>> >>> Scott, >>> >>> OK, We can see how to do this (I think). Our app is written in Perl and >>> we?d >>> just need to capture the command we write down. The only issue I can >>> think >>> of is the prepare statement and making sure we capture the right SQL >>> command. W >>> >>> We?ll dig into it and have a look, >>> >>> Thanks for taking the time to reply. >>> >>> Rob >>> >>> >>> On 4 May 2016, at 18:52, Scott Robison wrote: >>> >>>> On Wed, May 4, 2016 at 11:47 AM, Rob Willett >>>> <rob.sqlite at robertwillett.com> >>>> wrote: >>>> >>>>> Scott, >>>>> >>>>> Thats an interesting idea. Is there an option in SQLite to do this for >>>>> us, >>>>> or do we have to write a small shim in our app? >>>>> >>>>> I like the idea of this as its simple and elegant. >>>> >>>> >>>> >>>> >>>> It would require a little extra work on your part. Nothing built into >>>> the >>>> system that would accomplish this directly. However, I've done similar >>>> things and they don't involve a ton of overhead. You could use another >>>> SQLite database as the append only log, or a simple text file. >>>> >>>> I'm not aware of a free lunch solution, sadly. >>>> >>>> >>>>> >>>>> >>>>> Rob >>>>> >>>>> >>>>> On 4 May 2016, at 16:51, Scott Robison wrote: >>>>> >>>>> This is going to become a bigger problem for us as the database will >>>>>>>> >>>>>>>> >>>>>>>> only get bigger so any advice welcomed. >>>>>>>> >>>>>>> >>>>>> Perhaps, rather than backing up the live data, you create an append >>>>>> only >>>>>> log of each and every query you send to the database. Should you need >>>>>> to >>>>>> restore, you replay the log of statements. Or at the appointed backup >>>>>> time, >>>>>> you replay the day's log of statements into another database. No need >>>>>> to >>>>>> ever take the live database offline at the cost of slightly longer >>>>>> running >>>>>> commands during the day to handle the append operation. >>>>>> _______________________________________________ >>>>>> sqlite-users mailing list >>>>>> sqlite-users at mailinglists.sqlite.org >>>>>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users >>>>>> >>>>> _______________________________________________ >>>>> sqlite-users mailing list >>>>> sqlite-users at mailinglists.sqlite.org >>>>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users >>>>> >>>> >>>> >>>> >>>> -- >>>> Scott Robison >>>> _______________________________________________ >>>> sqlite-users mailing list >>>> sqlite-users at mailinglists.sqlite.org >>>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users >>> >>> >>> _______________________________________________ >>> sqlite-users mailing list >>> sqlite-users at mailinglists.sqlite.org >>> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users >> >> _______________________________________________ >> sqlite-users mailing list >> sqlite-users at mailinglists.sqlite.org >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > > _______________________________________________ > sqlite-users mailing list > sqlite-users at mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users