How do dead records get into a tdb file?

Richard Sharpe realrichardsharpe at gmail.com
Wed Feb 26 08:05:17 MST 2014


On Wed, Feb 26, 2014 at 12:47 AM, Michael Adam <obnox at samba.org> wrote:
> Hi Richard,
>
>
> First to answer the question of the subject:
>
> A dead record is createad when a record is deleted.
> This was introduced by Volker some time ago to prevent
> tdb_delete from blocking when the freelist is locked:
>
> - Originally, tdb_delete took the record out of the
>   hash chain and insert it into the free list.
> - Now, the record is left in the hash chain but marked
>   dead. Every couple of deletes, namely when the number
>   of dead records exceeds a threshold (currently 5),
>   the dead reacords of the chain are first all purged
>   from the chain (moved to the freelist), befor the
>   record to delete is marked dead.
>
> This helps reducing the average contention of a delete operation.
>
> On 2014-02-25 at 20:31 -0800, Richard Sharpe wrote:
>> We recently saw a tdb file get very large:
>>
>> tdb> info
>> Size of file/data: 2785345536/3293549
>> Number of records: 99
>> Smallest/average/largest keys: 9/9/10
>> Smallest/average/largest data: 72/33258/2616464
>> Smallest/average/largest padding: 30/5374/367322
>> Number of dead records: 1 ---> only one dead record
>> Smallest/average/largest dead records: 2718339048/2718339048/2718339048 -->
>>
>> That dead record is a concern.
>
> This is mainly wrong output.
> The statistics from tdbtool info counts the so called
> recovery area that is used in transactions (and hence
> potentially occupies much of the space). This should be
> listed separately, as it is _not_ a dead record.
>
> What database is this, btw?
> Having the dead/recovery arey occupy almost all of
> the size of the DB seems a lot, indeed.
>
> Thinking about a patch to improve the precision of the
> info output..

messages.tdb and it is Samba 3.6.12+ ...

-- 
Regards,
Richard Sharpe
(何以解憂?唯有杜康。--曹操)


More information about the samba-technical mailing list