← Back to team overview

maria-discuss team mailing list archive

locking on endpoints of range deletes

 

Anyone see why tx_isolation=REPEATABLE-READ should have a next-record lock on record 3 rather than a record lock?


SESSION 1:


MariaDB [drupal_test]> create table x ( x bigint unsigned not null auto_increment, PRIMARY KEY x) );
Query OK, 0 rows affected (0.02 sec)

MariaDB [drupal_test]> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)


MariaDB [drupal_test]> insert into x values (1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0



MariaDB [drupal_test]> begin
    -> ;
Query OK, 0 rows affected (0.00 sec)



MariaDB [drupal_test]> delete from x where x <= 3;
Query OK, 3 rows affected (0.00 sec)





---TRANSACTION 290E30, ACTIVE 12 sec
2 lock struct(s), heap size 376, 4 row lock(s), undo log entries 3
MySQL thread id 7437, OS thread handle 0x7f37307f5700, query id 3298653 localhost debian-sys-maint sleeping
TABLE LOCK table `drupal_test`.`x` trx id 290E30 lock mode IX
RECORD LOCKS space id 82547 page no 3 n bits 72 index `PRIMARY` of table `drupal_test`.`x` trx id 290E30 lock_mode X



SESSION 2:

MariaDB [drupal_test]> insert into x values (DEFAULT);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction




And it works in READ-COMMITTED


SESSION 1:

MariaDB [drupal_test]> set tx_isolation='READ-COMMITTED'; begin; delete from x where x <= 3;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 3 rows affected (0.00 sec)



SESSION 2:

---TRANSACTION 290E33, ACTIVE 44 sec
2 lock struct(s), heap size 376, 3 row lock(s), undo log entries 3
MySQL thread id 7437, OS thread handle 0x7f37307f5700, query id 3298661 localhost debian-sys-maint sleeping
TABLE LOCK table `drupal_test`.`x` trx id 290E33 lock mode IX
RECORD LOCKS space id 82547 page no 3 n bits 72 index `PRIMARY` of table `drupal_test`.`x` trx id 290E33 lock_mode X locks rec but not gap


MariaDB [drupal_test]> insert into x values (DEFAULT);
Query OK, 1 row affected (0.00 sec)




-- 
-- 
Daniel Black, Engineer @ Open Query (http://openquery.com.au)
Remote expertise & maintenance for MySQL/MariaDB server environments.