In my case Delete happens reasonably OK but Vaccuuming takes incredibly
long?


On 10/21/05, Allan, Mark <[EMAIL PROTECTED]> wrote:
>
>
> Thanks to both Christian Smith and John Stanton for your posts.
>
> > On Wed, 19 Oct 2005, Christian Smith wrote:
> > From the VDBE output you originally posted, you are doing a
> > fair amount of
> > work for each deleted row:
> > - Index search to find the next row from EXAMINATIONS to delete
> > - Removing the row from 3 indexes on EXAMINATIONS
> > - (trigger) Remove related row in SPIRO_TEST from 2 indexes
> > on SPIRO_TEST
> > - (trigger) Remove related row in SPIRO_TEST
> > - Remove the row from EXAMINATIONS
> >
> > Check your cache size. If the above work is causing the 75 page entry
> > cache to thrash, you're likely to hit worst case performance as the
> > thrashing pages may be being accessed in a cyclical fashion.
> > Not sure how
> > like it is that your page cache is not big enough. How big is a row of
> > data, typically?
>
> Our cache size is 75 pages of 8192 bytes = 600Kb.
>
> The maximum size of an EXAMINATIONS record is about 500 bytes, 450 bytes
> of this is a varchar field. In the test example the average size of an
> EXAMINATIONS record is 60 bytes as not much text is saved.
>
> The maximum size of a SPIRO_TEST record is about 5Kb, these will vary from
> test to test, but for the test example the size of each SPIRO_TEST record is
> fixed to approx 1Kb.
>
> Based on this I dont think that we should be thrashing the cache. I am
> however unsure how SQlite works here.
>
> > Also, a 60x slowdown is not to be unexpected. The PC version, while
> > probably having the same SQLite page cache size in the SQLite
> > app itself,
> > will most likely be reading and writing to the OSes cache at memory to
> > memory copy speed most of the time, with synchronous writes
> > only done when
> > needed. The embedded platform you're using probably writes straight to
> > FLASH, which is necassarily a synchronous operation if your OS doesn't
> > have a cache between your app and the FLASH FS. While flash
> > writes are low
> > latency, they are also low bandwidth, and won't be within an order of
> > magnitude of performance when compared to a desktop PC write to OS
> > filesystem cache.
> >
> > Finally, you give no indication on the actual CPU speed of
> > the embedded
> > platform. It's quite reasonable to assume a development PC could be an
> > order of magnitude faster on sheer integer throughput. I'm
> > amazed how slow
> > my 50MHz microSPARC based SPARCclassic is. Such a platform
> > would not be
> > much, if at all, slower than a modern embedded platform, and has the
> > benefit of gobs of RAM, but still runs the same code two orders of
> > magnitude slower at least than my Athlon XP 1700 based
> > desktop. You have
> > to keep your performance expectations realistic. You are, afterall,
> > running a complete, ACID transaction, SQL relational database.
>
>
> The maximum CPU speed of our ARM7 chip is 71Mhz.
>
> > Others have indicated that dropping indexes might help when
> > deleting or
> > inserting records. However, have you tried simply not having
> > indexes at
> > all? Would that cause unacceptable slowdown? Perhaps, for the
> > demo query
> > from the original post, just keep the DATE index on
> > EXAMINATIONS, and use
> > full table scans for queries based on EXAM_TYPE and
> > STATUS_FLAG. Truth is,
> > given the small number of EXAM_TYPE and STATUS_FLAG values (I
> > presume),
> > you're as well just doing table scans when looking for
> > specific exam types
> > and statuses. Indexes only really help when you have a large
> > variation in
> > values with few collisions. Doing this will leave a single
> > index update in
> > addition to the actual row removals, which should improve performance.
>
> I have tried permanently dropping the indexes on EXAM_TYPE and STATUS_FLAG
> and this gives some improvement in time. Indeed it does seem that the
> STATUS_FLAG index is worthless and in the initial version of the software we
> will have only 1 EXAM_TYPE (although this will increase for each module we
> release over the next few months).
>
> I have also tried the suggested method of dropping the
> EXAM_PATIENT_ID_INDEX index on the examinations table before delete and
> rebuilding it on completion. I cannot delete the remaining indexes as they
> are used during the delete operation and this slows the whole operation
> down.
>
> The latest changes have reduced the time to delete the same number of
> records from 3:45 minutes to 2:53 minutes. Still a long time to wait but any
> time saving is welcome, especially as the test is for a 50% full scenario so
> at 99% we can expect it to take 6 minutes.
>
> Thanks again for your help.
>
> If there are any other ideas on how we can optimise this further then
> please let me know.
>
>
> Mark
>
>
> DISCLAIMER:
> This information and any attachments contained in this email message is
> intended only for the use of the individual or entity to which it is
> addressed and may contain information that is privileged, confidential, and
> exempt from disclosure under applicable law. If the reader of this message
> is not the intended recipient, or the employee or agent responsible for
> delivering the message to the intended recipient, you are hereby notified
> that any dissemination, distribution, forwarding, or copying of this
> communication is strictly prohibited. If you have received this
> communication in error, please notify the sender immediately by return
> email, and delete the original message immediately.
>
>

Reply via email to