Commit b512c8b8 authored by unknown's avatar unknown

Transactions in AUTOCOMMIT=0 mode didn't rotate binary log

Don't enable any bulk insert or record caching code if inserting less than MIN_ROWS_TO_USE_BULK_INSERT rows (100)


myisam/mi_check.c:
  Fixed bug in copying statistics for disabled index
mysql-test/r/distinct.result:
  Fix result after not doing key statistics for first insert.
mysql-test/r/fulltext.result:
  Fix result after not doing key statistics for first insert.
mysql-test/r/insert.result:
  Fix result after not doing key statistics for first insert.
mysql-test/r/key_diff.result:
  Fix result after not doing key statistics for first insert.
mysql-test/r/order_by.result:
  Fix result after not doing key statistics for first insert.
mysql-test/r/select.result:
  Fix result after not doing key statistics for first insert.
mysql-test/r/show_check.result:
  Fix result after not doing key statistics for first insert.
sql/ha_myisam.cc:
  Don't disable index when inserting only a few rows
sql/log.cc:
  Transactions in AUTOCOMMIT=0 mode didn't rotate binary log.
sql/sql_insert.cc:
  Don't enable any bulk insert or record caching code if inserting less than MIN_ROWS_TO_USE_BULK_INSERT
parent fd977631
...@@ -368,8 +368,8 @@ int chk_key(MI_CHECK *param, register MI_INFO *info) ...@@ -368,8 +368,8 @@ int chk_key(MI_CHECK *param, register MI_INFO *info)
{ {
/* Remember old statistics for key */ /* Remember old statistics for key */
memcpy((char*) rec_per_key_part, memcpy((char*) rec_per_key_part,
(char*) share->state.rec_per_key_part+ (char*) (share->state.rec_per_key_part +
(uint) (rec_per_key_part - param->rec_per_key_part), (uint) (rec_per_key_part - param->rec_per_key_part)),
keyinfo->keysegs*sizeof(*rec_per_key_part)); keyinfo->keysegs*sizeof(*rec_per_key_part));
continue; continue;
} }
...@@ -1912,8 +1912,8 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, ...@@ -1912,8 +1912,8 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
{ {
/* Remember old statistics for key */ /* Remember old statistics for key */
memcpy((char*) rec_per_key_part, memcpy((char*) rec_per_key_part,
(char*) share->state.rec_per_key_part+ (char*) (share->state.rec_per_key_part +
(uint) (rec_per_key_part - param->rec_per_key_part), (uint) (rec_per_key_part - param->rec_per_key_part)),
sort_param.keyinfo->keysegs*sizeof(*rec_per_key_part)); sort_param.keyinfo->keysegs*sizeof(*rec_per_key_part));
continue; continue;
} }
...@@ -2272,8 +2272,8 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info, ...@@ -2272,8 +2272,8 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
{ {
/* Remember old statistics for key */ /* Remember old statistics for key */
memcpy((char*) rec_per_key_part, memcpy((char*) rec_per_key_part,
(char*) share->state.rec_per_key_part+ (char*) (share->state.rec_per_key_part+
(uint) (rec_per_key_part - param->rec_per_key_part), (uint) (rec_per_key_part - param->rec_per_key_part)),
sort_param[i].keyinfo->keysegs*sizeof(*rec_per_key_part)); sort_param[i].keyinfo->keysegs*sizeof(*rec_per_key_part));
i--; i--;
continue; continue;
...@@ -2435,7 +2435,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info, ...@@ -2435,7 +2435,7 @@ int mi_repair_parallel(MI_CHECK *param, register MI_INFO *info,
got_error=0; got_error=0;
if (&share->state.state != info->state) if (&share->state.state != info->state)
memcpy( &share->state.state, info->state, sizeof(*info->state)); memcpy(&share->state.state, info->state, sizeof(*info->state));
err: err:
got_error|= flush_blocks(param,share->kfile); got_error|= flush_blocks(param,share->kfile);
......
...@@ -173,9 +173,9 @@ INSERT INTO t2 values (1),(2),(3); ...@@ -173,9 +173,9 @@ INSERT INTO t2 values (1),(2),(3);
INSERT INTO t3 VALUES (1,'1'),(2,'2'),(1,'1'),(2,'2'); INSERT INTO t3 VALUES (1,'1'),(2,'2'),(1,'1'),(2,'2');
explain SELECT distinct t3.a FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a; explain SELECT distinct t3.a FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a;
table type possible_keys key key_len ref rows Extra table type possible_keys key key_len ref rows Extra
t1 ALL PRIMARY NULL NULL NULL 2 Using temporary t3 index a a 5 NULL 6 Using index; Using temporary
t2 ref a a 4 t1.a 1 Using index t2 index a a 4 NULL 5 Using index; Distinct
t3 ref a a 5 t1.b 1 Using where; Using index t1 eq_ref PRIMARY PRIMARY 4 t2.a 1 Using where; Distinct
SELECT distinct t3.a FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a; SELECT distinct t3.a FROM t3,t2,t1 WHERE t3.a=t1.b AND t1.a=t2.a;
a a
1 1
...@@ -190,7 +190,7 @@ insert into t3 select * from t4; ...@@ -190,7 +190,7 @@ insert into t3 select * from t4;
explain select distinct t1.a from t1,t3 where t1.a=t3.a; explain select distinct t1.a from t1,t3 where t1.a=t3.a;
table type possible_keys key key_len ref rows Extra table type possible_keys key key_len ref rows Extra
t1 index PRIMARY PRIMARY 4 NULL 2 Using index; Using temporary t1 index PRIMARY PRIMARY 4 NULL 2 Using index; Using temporary
t3 ref a a 5 t1.a 1 Using where; Using index; Distinct t3 ref a a 5 t1.a 10 Using where; Using index; Distinct
select distinct t1.a from t1,t3 where t1.a=t3.a; select distinct t1.a from t1,t3 where t1.a=t3.a;
a a
1 1
......
...@@ -135,8 +135,8 @@ id ...@@ -135,8 +135,8 @@ id
3 3
show keys from t2; show keys from t2;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
t2 1 tig 1 ticket A 3 NULL NULL YES BTREE t2 1 tig 1 ticket A NULL NULL NULL YES BTREE
t2 1 tix 1 inhalt A 1 1 NULL YES FULLTEXT t2 1 tix 1 inhalt A NULL 1 NULL YES FULLTEXT
show create table t2; show create table t2;
Table Create Table Table Create Table
t2 CREATE TABLE `t2` ( t2 CREATE TABLE `t2` (
......
...@@ -46,7 +46,7 @@ insert into t1 values ('skr',NULL),('skr',NULL),('test',NULL); ...@@ -46,7 +46,7 @@ insert into t1 values ('skr',NULL),('skr',NULL),('test',NULL);
select * from t1; select * from t1;
sid id sid id
skr 1 skr 1
skr 1 skr 2
test 1 test 1
insert into t1 values ('rts',NULL),('rts',NULL),('test',NULL); insert into t1 values ('rts',NULL),('rts',NULL),('test',NULL);
select * from t1; select * from t1;
...@@ -54,7 +54,7 @@ sid id ...@@ -54,7 +54,7 @@ sid id
rts 1 rts 1
rts 2 rts 2
skr 1 skr 1
skr 1 skr 2
test 1 test 1
test 2 test 2
drop table t1; drop table t1;
......
...@@ -36,7 +36,7 @@ a a a a ...@@ -36,7 +36,7 @@ a a a a
explain select t1.*,t2.* from t1,t1 as t2 where t1.A=t2.B; explain select t1.*,t2.* from t1,t1 as t2 where t1.A=t2.B;
table type possible_keys key key_len ref rows Extra table type possible_keys key key_len ref rows Extra
t1 ALL a NULL NULL NULL 5 t1 ALL a NULL NULL NULL 5
t2 ref b b 4 t1.a 1 Using where t2 ALL b NULL NULL NULL 5 Using where
select t1.*,t2.* from t1,t1 as t2 where t1.A=t2.B order by binary t1.a,t2.a; select t1.*,t2.* from t1,t1 as t2 where t1.A=t2.B order by binary t1.a,t2.a;
a b a b a b a b
A B a a A B a a
......
...@@ -450,9 +450,9 @@ gid sid uid ...@@ -450,9 +450,9 @@ gid sid uid
103853 5 250 103853 5 250
EXPLAIN select t1.gid, t2.sid, t3.uid from t3, t2, t1 where t2.gid = t1.gid and t2.uid = t3.uid order by t1.gid, t3.uid; EXPLAIN select t1.gid, t2.sid, t3.uid from t3, t2, t1 where t2.gid = t1.gid and t2.uid = t3.uid order by t1.gid, t3.uid;
table type possible_keys key key_len ref rows Extra table type possible_keys key key_len ref rows Extra
t3 index PRIMARY PRIMARY 2 NULL 6 Using index; Using temporary; Using filesort t1 index PRIMARY PRIMARY 4 NULL 6 Using index
t2 ref PRIMARY,uid uid 2 t3.uid 1 Using where t2 eq_ref PRIMARY,uid PRIMARY 4 t1.gid 1
t1 eq_ref PRIMARY PRIMARY 4 t2.gid 1 Using index t3 eq_ref PRIMARY PRIMARY 2 t2.uid 1 Using where; Using index
EXPLAIN SELECT t1.gid, t3.uid from t1, t3 where t1.gid = t3.uid order by t1.gid,t3.skr; EXPLAIN SELECT t1.gid, t3.uid from t1, t3 where t1.gid = t3.uid order by t1.gid,t3.skr;
table type possible_keys key key_len ref rows Extra table type possible_keys key key_len ref rows Extra
t1 index PRIMARY PRIMARY 4 NULL 6 Using index t1 index PRIMARY PRIMARY 4 NULL 6 Using index
......
...@@ -3239,8 +3239,8 @@ Field Type Null Key Default Extra Privileges ...@@ -3239,8 +3239,8 @@ Field Type Null Key Default Extra Privileges
show keys from t2; show keys from t2;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
t2 0 PRIMARY 1 auto A 1199 NULL NULL BTREE t2 0 PRIMARY 1 auto A 1199 NULL NULL BTREE
t2 0 fld1 1 fld1 A 0 NULL NULL BTREE t2 0 fld1 1 fld1 A 1199 NULL NULL BTREE
t2 1 fld3 1 fld3 A 1199 NULL NULL BTREE t2 1 fld3 1 fld3 A NULL NULL NULL BTREE
drop table t4, t3, t2, t1; drop table t4, t3, t2, t1;
DO 1; DO 1;
DO benchmark(100,1+1),1,1; DO benchmark(100,1+1),1,1;
......
...@@ -9,7 +9,7 @@ Table Op Msg_type Msg_text ...@@ -9,7 +9,7 @@ Table Op Msg_type Msg_text
test.t1 check status Table is already up to date test.t1 check status Table is already up to date
check table t1 changed; check table t1 changed;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 check status Table is already up to date test.t1 check status OK
insert into t1 values (5,5,5); insert into t1 values (5,5,5);
check table t1 changed; check table t1 changed;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
......
...@@ -682,17 +682,24 @@ void ha_myisam::deactivate_non_unique_index(ha_rows rows) ...@@ -682,17 +682,24 @@ void ha_myisam::deactivate_non_unique_index(ha_rows rows)
mi_extra(file, HA_EXTRA_NO_KEYS, 0); mi_extra(file, HA_EXTRA_NO_KEYS, 0);
else else
{ {
/* Only disable old index if the table was empty */ /*
if (file->state->records == 0) Only disable old index if the table was empty and we are inserting
a lot of rows.
We should not do this for only a few rows as this is slower and
we don't want to update the key statistics based of only a few rows.
*/
if (file->state->records == 0 &&
rows >= MI_MIN_ROWS_TO_USE_BULK_INSERT)
mi_disable_non_unique_index(file,rows); mi_disable_non_unique_index(file,rows);
else else
{ {
mi_init_bulk_insert(file, mi_init_bulk_insert(file,
current_thd->variables.bulk_insert_buff_size, rows); current_thd->variables.bulk_insert_buff_size,
table->bulk_insert= 1; rows);
table->bulk_insert= 1;
}
} }
} }
}
enable_activate_all_index=1; enable_activate_all_index=1;
} }
else else
......
...@@ -1239,6 +1239,13 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache) ...@@ -1239,6 +1239,13 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache)
log_file.pos_in_file))) log_file.pos_in_file)))
goto err; goto err;
signal_update(); signal_update();
if (my_b_tell(&log_file) >= (my_off_t) max_binlog_size)
{
pthread_mutex_lock(&LOCK_index);
new_file(0); // inside mutex
pthread_mutex_unlock(&LOCK_index);
}
} }
VOID(pthread_mutex_unlock(&LOCK_log)); VOID(pthread_mutex_unlock(&LOCK_log));
DBUG_RETURN(0); DBUG_RETURN(0);
......
...@@ -187,7 +187,8 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields, ...@@ -187,7 +187,8 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
thd->proc_info="update"; thd->proc_info="update";
if (duplic == DUP_IGNORE || duplic == DUP_REPLACE) if (duplic == DUP_IGNORE || duplic == DUP_REPLACE)
table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
if ((lock_type != TL_WRITE_DELAYED && !(specialflag & SPECIAL_SAFE_MODE))) if ((lock_type != TL_WRITE_DELAYED && !(specialflag & SPECIAL_SAFE_MODE)) &&
values_list.elements >= MIN_ROWS_TO_USE_BULK_INSERT)
{ {
table->file->extra_opt(HA_EXTRA_WRITE_CACHE, table->file->extra_opt(HA_EXTRA_WRITE_CACHE,
min(thd->variables.read_buff_size, min(thd->variables.read_buff_size,
......
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