On Wed, May 23, 2012 at 7:47 PM, Bert Huijben <b...@qqmail.nl> wrote:
>
>> -----Original Message-----
>> From: Paul Burba [mailto:ptbu...@gmail.com]
>> Sent: donderdag 24 mei 2012 0:43
>> To: Subversion Development
>> Subject: [PATCH]: Speed up deletion of multiple files
>>
>> On one CollabNet's forums a user reported that a single delete command
>> of 2000+ WC files took well over three hours to complete with 1.7.5
>> (see
>> http://subversion.open.collab.net/ds/viewMessage.do?dsForumId=4&dsM
>> essageId=456214).
>>
>> I'm able to replicate similar behavior with a partial checkout of
>> ^/subversion/tags
>
> Which Sqlite version did you use?
>
> If your Sqlite is below 3.7.9 I would recommend updating Sqlite first.

You're spot-on Bert: I bumped my build from 3.7.7 to 3.7.12 and my
test deletion of 2463 files completes in average of 4.9s over 4 runs;
about as fast as I was seeing with my patch and 3.7.7.

Out of curiosity I reapplied my patch to see if it made any
difference.  Unsurprisingly it was slower, averaging 6.2s over 4 runs.

> (What results do you see from the wc-queries-test result on trunk?)

Ah yes, that did fail.

> This query appears to use the indexes for me on 3.7.12 without the patch, and 
> looking at the buildbots also on 3.7.9.
> (Which doesn't say that it can't be improved further... But if the optimizer 
> already handles this we don't have to write dirty queries)

/me breathes a sigh of relief at that.

-- 
Paul T. Burba
CollabNet, Inc. -- www.collab.net -- Enterprise Cloud Development
Skype: ptburba

> I'll check my results tomorrow, but this sounds exactly like stefan2's 
> problem last Saturday, which disappeared when he upgraded his Sqlite. (It 
> took an hour before his upgrade, and deleting 16k files was just seconds 
> later)
>
> My testcase of deleting 2000 files took about 12 seconds last Saturday. After 
> that I haven't done measurements on that case, but I expect many improvements 
> in other places.
> (And I ran the tests on a very fast network drive instead of a local harddisk)
>
>        Bert
>
>>
>> My test WC:
>>
>>   WC Size: 437 MB 21,012 Files, 2,717 Folders
>>   wc.db Size: 18,108,000 bytes
>>   Deletion Targets: 2642 files
>>
>> Using 1.7.5 this takes almost 27 minutes on my machine:
>>
>>   C:\SVN\sandbox\subversion-tags>timethis svn delete -q --targets
>> del-target.2463.txt
>>
>>   TimeThis :  Command Line :  svn delete -q --targets del-target.2463.txt
>>   TimeThis :    Start Time :  Fri May 18 11:27:04 2012
>>
>>
>>   TimeThis :  Command Line :  svn delete -q --targets del-target.2463.txt
>>   TimeThis :    Start Time :  Fri May 18 11:27:04 2012
>>   TimeThis :      End Time :  Fri May 18 11:53:58 2012
>>   TimeThis :  Elapsed Time :  00:26:53.758
>>
>> trunk@1341851 is significantly faster, taking only 16 minutes:
>>
>>   C:\SVN\sandbox\subversion-tags>timethis svn delete -q --targets
>> del-target.2463.txt
>>
>>   TimeThis :  Command Line :  svn delete -q --targets del-target.2463.txt
>>   TimeThis :    Start Time :  Wed May 23 10:56:41 2012
>>
>>
>>   TimeThis :  Command Line :  svn delete -q --targets del-target.2463.txt
>>   TimeThis :    Start Time :  Wed May 23 10:56:41 2012
>>   TimeThis :      End Time :  Wed May 23 11:13:17 2012
>>   TimeThis :  Elapsed Time :  00:16:35.873
>>
>> Using optimizations similar to what Bert used in r1341848 and creating
>> a new , the attach patch cuts this down to just over 4 seconds:
>>
>>   C:\SVN\sandbox\subversion-tags>timethis svn delete -q --targets
>> del-target.2463.txt
>>
>>   TimeThis :  Command Line :  svn delete -q --targets del-target.2463.txt
>>   TimeThis :    Start Time :  Wed May 23 17:41:12 2012
>>
>>
>>   TimeThis :  Command Line :  svn delete -q --targets del-target.2463.txt
>>   TimeThis :    Start Time :  Wed May 23 17:41:12 2012
>>   TimeThis :      End Time :  Wed May 23 17:41:16 2012
>>   TimeThis :  Elapsed Time :  00:00:04.116
>>
>> ...So, WCNG gurus, does this look ok?
>>
>> [[[
>> Speed up WC deletions.
>>
>> * subversion/libsvn_wc/wc-queries.sql
>>   (STMT_DELETE_NODES_ABOVE_DEPTH_RECURSIVE,
>>    STMT_INSERT_DELETE_FROM_NODE_RECURSIVE): Make the OR operation
>> the
>>    outer operation by duplicating some cheap tests.
>>
>>   (STMT_INSERT_DELETE_LIST_RECURSIVE,
>>    STMT_INSERT_DELETE_LIST): Split old STMT_INSERT_DELETE_LIST into two
>>    new versions, one recursive, and one not.
>>
>> * subversion/libsvn_wc/wc_db.c
>>   (delete_node): Use the faster non-recursive query when operating on a
>> file.
>> ]]]
>>
>> --
>> Paul T. Burba
>> CollabNet, Inc. -- www.collab.net -- Enterprise Cloud Development
>> Skype: ptburba

Reply via email to