mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
0697ee265f
Keep track of how many pending XIDs (transactions that are prepared in storage engine and written into binlog, but not yet durably committed on disk in the engine) there are in each binlog. When the count of one binlog drops to zero, write a new binlog checkpoint event, telling which is the oldest binlog with pending XIDs. When doing XA recovery after a crash, check the last binlog checkpoint event, and scan all binlog files from that point onwards for XIDs that must be committed if found in prepared state inside engine. Remove the code in binlog rotation that waits for all prepared XIDs to be committed before writing a new binlog file (this is no longer necessary when recovery can scan multiple binlog files).
349 lines
12 KiB
Text
349 lines
12 KiB
Text
drop table if exists t1, t2, t3, t4, t5, t6;
|
|
create table t1 (id int(8), name varchar(32));
|
|
create table t2 (id int(8), name varchar(32)) ENGINE="MyISAM";
|
|
create table t3 (id int(8), name varchar(32)) ENGINE="MEMORY";
|
|
create table t4 (id int(8), name varchar(32)) ENGINE="HEAP";
|
|
create table t5 (id int(8), name varchar(32)) ENGINE="ARCHIVE";
|
|
create table t6 (id int(8), name varchar(32)) ENGINE="InnoDB";
|
|
insert into t1 values (1, 'first value');
|
|
insert into t1 values (2, 'first value');
|
|
insert into t1 values (3, 'first value');
|
|
insert into t1 values (4, 'first value');
|
|
insert into t1 values (5, 'first value');
|
|
insert into t2 values (1, 'first value');
|
|
insert into t2 values (2, 'first value');
|
|
insert into t2 values (3, 'first value');
|
|
insert into t2 values (4, 'first value');
|
|
insert into t2 values (5, 'first value');
|
|
insert into t3 values (1, 'first value');
|
|
insert into t3 values (2, 'first value');
|
|
insert into t3 values (3, 'first value');
|
|
insert into t3 values (4, 'first value');
|
|
insert into t3 values (5, 'first value');
|
|
insert into t4 values (1, 'first value');
|
|
insert into t4 values (2, 'first value');
|
|
insert into t4 values (3, 'first value');
|
|
insert into t4 values (4, 'first value');
|
|
insert into t4 values (5, 'first value');
|
|
insert into t5 values (1, 'first value');
|
|
insert into t5 values (2, 'first value');
|
|
insert into t5 values (3, 'first value');
|
|
insert into t5 values (4, 'first value');
|
|
insert into t5 values (5, 'first value');
|
|
insert into t6 values (1, 'first value');
|
|
insert into t6 values (2, 'first value');
|
|
insert into t6 values (3, 'first value');
|
|
insert into t6 values (4, 'first value');
|
|
insert into t6 values (5, 'first value');
|
|
select * from t1;
|
|
id name
|
|
1 first value
|
|
2 first value
|
|
3 first value
|
|
4 first value
|
|
5 first value
|
|
select * from t2;
|
|
id name
|
|
1 first value
|
|
2 first value
|
|
3 first value
|
|
4 first value
|
|
5 first value
|
|
select * from t3;
|
|
id name
|
|
1 first value
|
|
2 first value
|
|
3 first value
|
|
4 first value
|
|
5 first value
|
|
select * from t4;
|
|
id name
|
|
1 first value
|
|
2 first value
|
|
3 first value
|
|
4 first value
|
|
5 first value
|
|
select * from t5;
|
|
id name
|
|
1 first value
|
|
2 first value
|
|
3 first value
|
|
4 first value
|
|
5 first value
|
|
select * from t6;
|
|
id name
|
|
1 first value
|
|
2 first value
|
|
3 first value
|
|
4 first value
|
|
5 first value
|
|
|
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
|
/*!40101 SET NAMES utf8 */;
|
|
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
|
/*!40103 SET TIME_ZONE='+00:00' */;
|
|
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
|
|
|
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */;
|
|
|
|
USE `test`;
|
|
DROP TABLE IF EXISTS `t1`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t1` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
|
INSERT DELAYED IGNORE INTO `t1` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
|
|
DROP TABLE IF EXISTS `t2`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t2` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
|
|
INSERT DELAYED IGNORE INTO `t2` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
|
|
DROP TABLE IF EXISTS `t3`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t3` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t3` DISABLE KEYS */;
|
|
INSERT DELAYED IGNORE INTO `t3` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t3` ENABLE KEYS */;
|
|
DROP TABLE IF EXISTS `t4`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t4` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t4` DISABLE KEYS */;
|
|
INSERT DELAYED IGNORE INTO `t4` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t4` ENABLE KEYS */;
|
|
DROP TABLE IF EXISTS `t5`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t5` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t5` DISABLE KEYS */;
|
|
INSERT DELAYED IGNORE INTO `t5` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t5` ENABLE KEYS */;
|
|
DROP TABLE IF EXISTS `t6`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t6` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t6` DISABLE KEYS */;
|
|
INSERT IGNORE INTO `t6` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t6` ENABLE KEYS */;
|
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
|
|
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
|
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
|
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
|
|
|
|
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
|
/*!40101 SET NAMES utf8 */;
|
|
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
|
/*!40103 SET TIME_ZONE='+00:00' */;
|
|
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
|
|
|
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */;
|
|
|
|
USE `test`;
|
|
DROP TABLE IF EXISTS `t1`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t1` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
|
INSERT DELAYED INTO `t1` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
|
|
DROP TABLE IF EXISTS `t2`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t2` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
|
|
INSERT DELAYED INTO `t2` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t2` ENABLE KEYS */;
|
|
DROP TABLE IF EXISTS `t3`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t3` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t3` DISABLE KEYS */;
|
|
INSERT DELAYED INTO `t3` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t3` ENABLE KEYS */;
|
|
DROP TABLE IF EXISTS `t4`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t4` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t4` DISABLE KEYS */;
|
|
INSERT DELAYED INTO `t4` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t4` ENABLE KEYS */;
|
|
DROP TABLE IF EXISTS `t5`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t5` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=ARCHIVE DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t5` DISABLE KEYS */;
|
|
INSERT DELAYED INTO `t5` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t5` ENABLE KEYS */;
|
|
DROP TABLE IF EXISTS `t6`;
|
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
|
/*!40101 SET character_set_client = utf8 */;
|
|
CREATE TABLE `t6` (
|
|
`id` int(8) DEFAULT NULL,
|
|
`name` varchar(32) DEFAULT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
|
|
|
/*!40000 ALTER TABLE `t6` DISABLE KEYS */;
|
|
INSERT INTO `t6` VALUES (1,'first value'),(2,'first value'),(3,'first value'),(4,'first value'),(5,'first value');
|
|
/*!40000 ALTER TABLE `t6` ENABLE KEYS */;
|
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
|
|
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
|
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
|
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
|
|
|
drop table t1;
|
|
drop table t2;
|
|
drop table t3;
|
|
drop table t4;
|
|
drop table t5;
|
|
drop table t6;
|
|
SELECT @@global.storage_engine INTO @old_engine;
|
|
SET GLOBAL storage_engine=InnoDB;
|
|
CREATE VIEW v1 AS SELECT * FROM t1;
|
|
INSERT INTO t1 VALUES();
|
|
SELECT COUNT(*) FROM v1;
|
|
COUNT(*)
|
|
1
|
|
SELECT COUNT(*) FROM v1;
|
|
COUNT(*)
|
|
1
|
|
DROP VIEW v1;
|
|
DROP TABLE t1;
|
|
SET GLOBAL storage_engine=@old_engine;
|
|
# Connection default
|
|
SET binlog_format= mixed;
|
|
RESET MASTER;
|
|
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1),(2);
|
|
CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
|
INSERT INTO t2 VALUES (1,0), (2,0);
|
|
SELECT GET_LOCK("block_queries_1", 120);
|
|
GET_LOCK("block_queries_1", 120)
|
|
1
|
|
# Connection c3
|
|
SELECT GET_LOCK("block_queries_2", 120);
|
|
GET_LOCK("block_queries_2", 120)
|
|
1
|
|
# Connection c1
|
|
SET @c= 0;
|
|
SELECT IF(@c<1, @c:=@c+1, GET_LOCK("block_queries_1", 120)) FROM t1 ORDER BY a;
|
|
# Connection c2
|
|
SET binlog_format="row";
|
|
SET @d= 10;
|
|
UPDATE t2 SET b=IF(@d<=10, @d:=@d+1, GET_LOCK("block_queries_2", 120)) ORDER BY a;
|
|
# Connection default
|
|
# Make sure other queries are running (and waiting).
|
|
SELECT RELEASE_LOCK("block_queries_1");
|
|
RELEASE_LOCK("block_queries_1")
|
|
1
|
|
# Connection c3
|
|
SELECT RELEASE_LOCK("block_queries_2");
|
|
RELEASE_LOCK("block_queries_2")
|
|
1
|
|
# Connection c1
|
|
IF(@c<1, @c:=@c+1, GET_LOCK("block_queries_1", 120))
|
|
1
|
|
1
|
|
# Connection c2
|
|
# Connection default
|
|
SELECT * FROM t2 ORDER BY a;
|
|
a b
|
|
1 11
|
|
2 1
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
SHOW BINLOG EVENTS LIMIT 7,3;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 704 Query 1 772 BEGIN
|
|
master-bin.000001 772 Query 1 869 use `test`; INSERT INTO t2 VALUES (1,0), (2,0)
|
|
master-bin.000001 869 Xid 1 896 COMMIT /* XID */
|
|
-- CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=896;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a
|
|
1
|
|
2
|
|
SELECT * FROM t2 ORDER BY a;
|
|
a b
|
|
1 0
|
|
2 0
|
|
DROP TABLE t1,t2;
|