Commit 1692707c authored by unknown's avatar unknown
Browse files

myisamdef.h, mi_locking.c, mi_dynrec.c:

  Fix insert performance with mmap


storage/myisam/mi_dynrec.c:
  Fix insert performance with mmap
storage/myisam/mi_locking.c:
  Fix insert performance with mmap
storage/myisam/myisamdef.h:
  Fix insert performance with mmap
parent 4ab6a294
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -201,6 +201,7 @@ uint mi_mmap_pwrite(MI_INFO *info, byte *Buffer,
  }
  else
  {
    info->s->nonmmaped_inserts++;
    if (info->s->concurrent_insert)
      rw_unlock(&info->s->mmap_lock);
    return my_pwrite(info->dfile, Buffer, Count, offset, MyFlags);
+3 −1
Original line number Diff line number Diff line
@@ -85,11 +85,13 @@ int mi_lock_database(MI_INFO *info, int lock_type)
	if (share->changed && !share->w_locks)
	{
#ifdef HAVE_MMAP
    if (info->s->mmaped_length != info->s->state.state.data_file_length)
    if ((info->s->mmaped_length != info->s->state.state.data_file_length) &&
        (info->s->nonmmaped_inserts > MAX_NONMAPPED_INSERTS))
    {
      if (info->s->concurrent_insert)
        rw_wrlock(&info->s->mmap_lock);
      mi_remap_file(info, info->s->state.state.data_file_length);
      info->s->nonmmaped_inserts= 0;
      if (info->s->concurrent_insert)
        rw_unlock(&info->s->mmap_lock);
    }
+3 −0
Original line number Diff line number Diff line
@@ -152,6 +152,7 @@ typedef struct st_mi_isam_pack {
  uchar version;
} MI_PACK;

#define MAX_NONMAPPED_INSERTS 1000      

typedef struct st_mi_isam_share {	/* Shared between opens */
  MI_STATE_INFO state;
@@ -211,6 +212,8 @@ typedef struct st_mi_isam_share { /* Shared between opens */
  rw_lock_t *key_root_lock;
#endif
  my_off_t mmaped_length;
  uint     nonmmaped_inserts;           /* counter of writing in non-mmaped
                                           area */
  rw_lock_t mmap_lock;
} MYISAM_SHARE;