mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
MDEV-24818 Concurrent use of InnoDB table is impossible until the first transaction is finished
In MDEV-515, we enabled an optimization where an insert into an empty table will use table-level locking and undo logging. This may break applications that expect row-level locking. The SQL statements created by the mysqldump utility will include the following: SET unique_checks=0, foreign_key_checks=0; We will use these flags to enable the table-level locked and logged insert. Unless the parameters are set, INSERT will be executed in the old way, with row-level undo logging and implicit record locks.
This commit is contained in:
parent
8dd35a2507
commit
92b2a911e5
7 changed files with 12 additions and 4 deletions
|
@ -2,6 +2,8 @@
|
|||
-- connect (con2,localhost,root,,)
|
||||
|
||||
-- connection con1
|
||||
# Enable MDEV-515 table-level undo logging for insert into empty table
|
||||
SET foreign_key_checks=0, unique_checks=0;
|
||||
SET autocommit=0;
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
-- if ($con1_extra_sql_present) {
|
||||
|
@ -9,6 +11,8 @@ SELECT * FROM t1 FOR UPDATE;
|
|||
-- }
|
||||
|
||||
-- connection con2
|
||||
# Enable MDEV-515 table-level undo logging for insert into empty table
|
||||
SET foreign_key_checks=0, unique_checks=0;
|
||||
SET autocommit=0;
|
||||
SELECT * FROM t2 FOR UPDATE;
|
||||
-- if ($con2_extra_sql_present) {
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
SET foreign_key_checks=0, unique_checks=0;
|
||||
#
|
||||
# MDEV-24715 Assertion !node->table->skip_alter_undo
|
||||
#
|
||||
|
|
|
@ -22,10 +22,6 @@ SET default_storage_engine=InnoDB;
|
|||
# if someone runs ./mysql-test-run.pl --ps-protocol
|
||||
-- disable_ps_protocol
|
||||
|
||||
-- disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2, t3, t4, t5_nontrans;
|
||||
-- enable_warnings
|
||||
|
||||
# we will create a simple deadlock with t1, t2 and two connections
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT);
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
--source include/have_sequence.inc
|
||||
|
||||
# Enable MDEV-515 table-level undo logging for insert into empty table
|
||||
SET foreign_key_checks=0, unique_checks=0;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-24715 Assertion !node->table->skip_alter_undo
|
||||
--echo #
|
||||
|
|
|
@ -115,6 +115,7 @@ title VARCHAR(200),
|
|||
body TEXT,
|
||||
FULLTEXT (title, body) WITH PARSER simple_parser
|
||||
) ENGINE=InnoDB;
|
||||
SET unique_checks=0, foreign_key_checks=0;
|
||||
BEGIN;
|
||||
INSERT INTO articles (title, body) VALUES
|
||||
('MySQL Tutorial','DBMS stands for MySQL DataBase ...'),
|
||||
|
|
|
@ -125,6 +125,8 @@ CREATE TABLE articles (
|
|||
FULLTEXT (title, body) WITH PARSER simple_parser
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
# Enable MDEV-515 table-level undo logging when inserting into empty table
|
||||
SET unique_checks=0, foreign_key_checks=0;
|
||||
BEGIN;
|
||||
INSERT INTO articles (title, body) VALUES
|
||||
('MySQL Tutorial','DBMS stands for MySQL DataBase ...'),
|
||||
|
|
|
@ -2660,6 +2660,7 @@ commit_exit:
|
|||
if (!(flags & BTR_NO_UNDO_LOG_FLAG)
|
||||
&& page_is_empty(block->frame)
|
||||
&& !entry->is_metadata() && !trx->duplicates
|
||||
&& !trx->check_unique_secondary && !trx->check_foreigns
|
||||
&& !trx->ddl && !trx->internal
|
||||
&& block->page.id().page_no() == index->page
|
||||
&& !index->table->skip_alter_undo
|
||||
|
|
Loading…
Reference in a new issue