Commit db8019ef authored by Oleksandr Byelkin's avatar Oleksandr Byelkin

Merge branch '10.4' into 10.5

parents 6173a4a1 c8f2e9a5
Subproject commit f1e2165c591f074feb47872a8ff712713ec411e1
Subproject commit 4fbd4fd36a21efd9d1a7e17aba390e91c78693b1
Subproject commit 7fdb3eab66384a355475704332d11cc1ab82499a
Subproject commit d204e83104222844251b221e9be7eb3dd9f8d63d
......@@ -9,4 +9,3 @@
# Do not use any TAB characters for whitespace.
#
##############################################################################
innodb_rc_insert_before_delete : MDEV-30490 2023-01-28 andrei see the MDEV description
connection default;
set @@global.binlog_checksum=none;
set @@session.debug_dbug='d,crash_before_write_second_checkpoint_event';
set @@global.binlog_checksum=crc32;
ERROR HY000: Lost connection to MySQL server during query
connection default;
NOT FOUND /Replication event checksum verification failed/ in mysqld.1.err
End of the tests
connect pause_purge,localhost,root;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
connection default;
CREATE TABLE t (pk int PRIMARY KEY, sk INT UNIQUE) ENGINE=InnoDB;
INSERT INTO t VALUES (10, 100);
connect con1,localhost,root;
BEGIN;
SELECT * FROM t WHERE sk = 100 FOR UPDATE;
pk sk
10 100
connect con2,localhost,root;
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL insert_wait_started";
INSERT INTO t VALUES (5, 100) # trx 1;
connect con3,localhost,root;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET DEBUG_SYNC="now WAIT_FOR insert_wait_started";
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL delete_started_waiting";
BEGIN;
UPDATE t SET sk = 200 WHERE sk = 100; # trx 2;
connection con1;
SET DEBUG_SYNC="now WAIT_FOR delete_started_waiting";
DELETE FROM t WHERE sk=100;
COMMIT;
disconnect con1;
connection con2;
disconnect con2;
connection con3;
must be logged in ROW format as the only event of trx 2 (con3)
INSERT INTO t VALUES (11, 101);
COMMIT;
include/show_binlog_events.inc
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Query # # use `test`; DELETE FROM t WHERE sk=100
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Query # # use `test`; INSERT INTO t VALUES (5, 100) # trx 1
master-bin.000001 # Xid # # COMMIT /* XID */
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
master-bin.000001 # Annotate_rows # # INSERT INTO t VALUES (11, 101)
master-bin.000001 # Table_map # # table_id: # (test.t)
master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */
disconnect con3;
connection default;
SELECT * FROM t;
pk sk
5 100
11 101
disconnect pause_purge;
SET DEBUG_SYNC="RESET";
DROP TABLE t;
......@@ -7657,6 +7657,7 @@ best_access_path(JOIN *join,
rec= MATCHING_ROWS_IN_OTHER_TABLE; // Fix for small tables
Json_writer_object trace_access_idx(thd);
double eq_ref_rows= 0.0, eq_ref_cost= 0.0;
/*
full text keys require special treatment
*/
......@@ -7701,7 +7702,10 @@ best_access_path(JOIN *join,
tmp= adjust_quick_cost(table->opt_range[key].cost, 1);
else
tmp= table->file->avg_io_cost();
tmp*= prev_record_reads(join_positions, idx, found_ref);
eq_ref_rows= prev_record_reads(join_positions, idx,
found_ref);
tmp*= eq_ref_rows;
eq_ref_cost= tmp;
records=1.0;
}
else
......@@ -8019,8 +8023,8 @@ best_access_path(JOIN *join,
Set the effective number of rows from "tmp" here.
*/
keyread_tmp= tmp/ 2;
rows= tmp;
keyread_tmp= COST_ADD(eq_ref_cost / 2, s->startup_cost);
rows= eq_ref_rows;
}
else
rows= record_count * records;
......
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