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:
parent
8c335b8a21
commit
00d80ffff1
@ -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
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user