Commit 90f49691 authored by unknown's avatar unknown

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 999f784b
...@@ -201,6 +201,7 @@ uint mi_mmap_pwrite(MI_INFO *info, byte *Buffer, ...@@ -201,6 +201,7 @@ uint mi_mmap_pwrite(MI_INFO *info, byte *Buffer,
} }
else else
{ {
info->s->nonmmaped_inserts++;
if (info->s->concurrent_insert) if (info->s->concurrent_insert)
rw_unlock(&info->s->mmap_lock); rw_unlock(&info->s->mmap_lock);
return my_pwrite(info->dfile, Buffer, Count, offset, MyFlags); return my_pwrite(info->dfile, Buffer, Count, offset, MyFlags);
......
...@@ -85,11 +85,13 @@ int mi_lock_database(MI_INFO *info, int lock_type) ...@@ -85,11 +85,13 @@ int mi_lock_database(MI_INFO *info, int lock_type)
if (share->changed && !share->w_locks) if (share->changed && !share->w_locks)
{ {
#ifdef HAVE_MMAP #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) if (info->s->concurrent_insert)
rw_wrlock(&info->s->mmap_lock); rw_wrlock(&info->s->mmap_lock);
mi_remap_file(info, info->s->state.state.data_file_length); mi_remap_file(info, info->s->state.state.data_file_length);
info->s->nonmmaped_inserts= 0;
if (info->s->concurrent_insert) if (info->s->concurrent_insert)
rw_unlock(&info->s->mmap_lock); rw_unlock(&info->s->mmap_lock);
} }
......
...@@ -152,6 +152,7 @@ typedef struct st_mi_isam_pack { ...@@ -152,6 +152,7 @@ typedef struct st_mi_isam_pack {
uchar version; uchar version;
} MI_PACK; } MI_PACK;
#define MAX_NONMAPPED_INSERTS 1000
typedef struct st_mi_isam_share { /* Shared between opens */ typedef struct st_mi_isam_share { /* Shared between opens */
MI_STATE_INFO state; MI_STATE_INFO state;
...@@ -211,6 +212,8 @@ typedef struct st_mi_isam_share { /* Shared between opens */ ...@@ -211,6 +212,8 @@ typedef struct st_mi_isam_share { /* Shared between opens */
rw_lock_t *key_root_lock; rw_lock_t *key_root_lock;
#endif #endif
my_off_t mmaped_length; my_off_t mmaped_length;
uint nonmmaped_inserts; /* counter of writing in non-mmaped
area */
rw_lock_t mmap_lock; rw_lock_t mmap_lock;
} MYISAM_SHARE; } MYISAM_SHARE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment