Added read log caching and fixed a possible bug in write cacheing.

This should cause fewer seeks when using replication.


Docs/manual.texi:
  Changelog
This commit is contained in:
unknown 2001-11-28 15:18:29 +02:00
parent 8c335b8a21
commit 00d80ffff1
2 changed files with 25 additions and 6 deletions

View File

@ -46851,6 +46851,10 @@ Fixed bug when joining with caching (unlikely to happen).
Fixed race condition when using the binary log and @code{INSERT DELAYED} Fixed race condition when using the binary log and @code{INSERT DELAYED}
which could cause the binary log to have rows that was not yet written which could cause the binary log to have rows that was not yet written
to MyISAM tables. to MyISAM tables.
@item
Changed caching of binary log to make replication slightly faster.
@item
Fixed bug in replication on Mac OS X.
@end itemize @end itemize
@node News-3.23.45, News-3.23.44, News-3.23.46, News-3.23.x @node News-3.23.45, News-3.23.44, News-3.23.46, News-3.23.x

View File

@ -32,20 +32,35 @@
void my_b_seek(IO_CACHE *info,my_off_t pos) void my_b_seek(IO_CACHE *info,my_off_t pos)
{ {
my_off_t offset = (pos - info->pos_in_file);
DBUG_ENTER("my_b_seek");
DBUG_PRINT("enter",("pos: %lu", (ulong) pos));
if (info->type == READ_CACHE) if (info->type == READ_CACHE)
{ {
info->rc_pos=info->rc_end=info->buffer; if ((ulonglong) offset < (ulonglong) (info->rc_end - info->buffer))
{
/* The read is in the current buffer; Reuse it */
info->rc_pos = info->buffer + offset;
DBUG_VOID_RETURN;
}
else
{
/* Force a new read on next my_b_read */
info->rc_pos=info->rc_end=info->buffer;
}
} }
else if (info->type == WRITE_CACHE) else if (info->type == WRITE_CACHE)
{ {
byte* try_rc_pos; /* If write is in current buffer, reuse it */
try_rc_pos = info->rc_pos + (pos - info->pos_in_file); if ((ulonglong) offset <
if (try_rc_pos >= info->buffer && try_rc_pos <= info->rc_end) (ulonglong) (info->rc_end - info->buffer))
{ {
info->rc_pos = try_rc_pos; info->rc_pos = info->buffer + offset;
return; DBUG_VOID_RETURN;
} }
flush_io_cache(info); flush_io_cache(info);
info->rc_end=(info->buffer+info->buffer_length-(pos & (IO_SIZE-1)));
} }
info->pos_in_file=pos; info->pos_in_file=pos;
info->seek_not_done=1; info->seek_not_done=1;