Icon View Incident Report

Serious Serious
Reported By: Andrew Hill
Reported On: 8/17/2010
For: Version 2.03 Build 20
# 3284 Very Large BLOBs Can Take Excessive Amounts of Time to Read

The following read code takes a long time to execute when reading a 55MB .AVI file from a table.

procedure TfMain.icbClientsPropertiesCloseUp(Sender: TObject);
  ms: TMemoryStream;
  bs: TEDBBlobStream;
  while not Table1.Eof do begin
    bs:= TEDBBlobStream.Create(TBlobField(fmain.Table1.FieldByName('Image')), bmRead); // Takes a very long time
    bs.Seek(0, soFromBeginning);
    ms:= TMemoryStream.Create;
    ms.CopyFrom(bs, bs.Size);
    ms.Seek(0, soFromBeginning);

Comments Comments
The problem was with the read-ahead calculation for BLOBs, which was telling the buffer manager to read more blocks than what would fit in the buffer manager's buffer size. As long as the size of the BLOB being read was less than (or near) the BLOB buffer size setting for the table, then the performance problem was not present. Encrypted tables experienced an even greater performance problem due to all of the additional decryption overhead.

Resolution Resolution
Fixed Problem on 8/22/2010 in version 2.03 build 21

Products Affected Products Affected
ElevateDB Additional Software and Utilities
ElevateDB DAC Client-Server
ElevateDB DAC Client-Server with Source
ElevateDB DAC Standard
ElevateDB DAC Standard with Source
ElevateDB DAC Trial
ElevateDB LCL Standard with Source
ElevateDB VCL Client-Server
ElevateDB VCL Client-Server with Source
ElevateDB VCL Standard
ElevateDB VCL Standard with Source
ElevateDB VCL Trial