⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 escalatelock.sql

📁 derby database source code.good for you.
💻 SQL
字号:
-- test lock escalation.  derby.locks.escalationThreshold=100 property -- has been set to force lock escalation-- to occur at the minimum level of 100  locks.run resource 'createTestProcedures.subsql';run resource 'LockTableQuery.subsql';autocommit off;-- TEST 1 - make sure IX row locks are escalated to a persistent X table lock.create table foo (a int);commit;-- first insert 90 rowsinsert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- check to make sure we have IX table and X row locks.select * from lock_table order by tabname, type desc, mode, cnt, lockname;-- now insert 10 more rows, pushing the lock over the escalation limit.insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- check to make sure we now just have a X table lock.select * from lock_table order by tabname, type desc, mode, cnt, lockname;-- insert 10 more rows to make sure we don't get rows locks from now on.insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- check to make sure we now just have a X table lock.select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;-- TEST 2 - make sure IS row locks are escalated to a persistent X table lock.create index foox on foo (a);commit;set isolation serializable;-- get IS row locks on just under 100 of the rows;select a from foo where a < 5;-- check to make sure we have IS table and S row locks.select * from lock_table order by tabname, type desc, mode, cnt, lockname;-- now get enough IS row locks to push over the lock escalation limitselect a from foo where a >= 5;-- check to make sure we now just have a S table lock.select * from lock_table order by tabname, type desc, mode, cnt, lockname;-- make sure subsequent IS locks are recognized as covered by the S table lock.select a from foo where a = 8;-- check to make sure we now just have a S table lock.select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;-- TEST 3 - reproduce abort failure similar to bug 4328create table aborttest (keycol int, data varchar(1000));-- first insert 110 rowsinsert into aborttest values (0, PADSTRING('0',1000)), (0, PADSTRING('1',1000)), (0, PADSTRING('2',1000));insert into aborttest values (0, PADSTRING('3',1000)), (0, PADSTRING('4',1000)), (0, PADSTRING('5',1000));insert into aborttest values (0, PADSTRING('6',1000)), (0, PADSTRING('7',1000)), (0, PADSTRING('8',1000)), (0, PADSTRING('9',1000));insert into aborttest values (0, PADSTRING('0',1000)), (1, PADSTRING('1',1000)), (2, PADSTRING('2',1000));insert into aborttest values (3, PADSTRING('3',1000)), (4, PADSTRING('4',1000)), (5, PADSTRING('5',1000));insert into aborttest values (6, PADSTRING('6',1000)), (7, PADSTRING('7',1000)), (8, PADSTRING('8',1000)), (9, PADSTRING('9',1000));insert into aborttest values (0, PADSTRING('0',1000)), (1, PADSTRING('1',1000)), (2, PADSTRING('2',1000));insert into aborttest values (3, PADSTRING('3',1000)), (4, PADSTRING('4',1000)), (5, PADSTRING('5',1000));insert into aborttest values (6, PADSTRING('6',1000)), (7, PADSTRING('7',1000)), (8, PADSTRING('8',1000)), (9, PADSTRING('9',1000));insert into aborttest values (0, PADSTRING('0',1000)), (1, PADSTRING('1',1000)), (2, PADSTRING('2',1000));insert into aborttest values (3, PADSTRING('3',1000)), (4, PADSTRING('4',1000)), (5, PADSTRING('5',1000));insert into aborttest values (6, PADSTRING('6',1000)), (7, PADSTRING('7',1000)), (8, PADSTRING('8',1000)), (9, PADSTRING('9',1000));insert into aborttest values (0, PADSTRING('0',1000)), (1, PADSTRING('1',1000)), (2, PADSTRING('2',1000));insert into aborttest values (3, PADSTRING('3',1000)), (4, PADSTRING('4',1000)), (5, PADSTRING('5',1000));insert into aborttest values (6, PADSTRING('6',1000)), (7, PADSTRING('7',1000)), (8, PADSTRING('8',1000)), (9, PADSTRING('9',1000));insert into aborttest values (0, PADSTRING('0',1000)), (1, PADSTRING('1',1000)), (2, PADSTRING('2',1000));insert into aborttest values (3, PADSTRING('3',1000)), (4, PADSTRING('4',1000)), (5, PADSTRING('5',1000));insert into aborttest values (6, PADSTRING('6',1000)), (7, PADSTRING('7',1000)), (8, PADSTRING('8',1000)), (9, PADSTRING('9',1000));insert into aborttest values (0, PADSTRING('0',1000)), (1, PADSTRING('1',1000)), (2, PADSTRING('2',1000));insert into aborttest values (3, PADSTRING('3',1000)), (4, PADSTRING('4',1000)), (5, PADSTRING('5',1000));insert into aborttest values (6, PADSTRING('6',1000)), (7, PADSTRING('7',1000)), (8, PADSTRING('8',1000)), (9, PADSTRING('9',1000));insert into aborttest values (0, PADSTRING('0',1000)), (1, PADSTRING('1',1000)), (2, PADSTRING('2',1000));insert into aborttest values (3, PADSTRING('3',1000)), (4, PADSTRING('4',1000)), (5, PADSTRING('5',1000));insert into aborttest values (6, PADSTRING('6',1000)), (7, PADSTRING('7',1000)), (8, PADSTRING('8',1000)), (9, PADSTRING('9',1000));insert into aborttest values (0, PADSTRING('0',1000)), (1, PADSTRING('1',1000)), (2, PADSTRING('2',1000));insert into aborttest values (3, PADSTRING('3',1000)), (4, PADSTRING('4',1000)), (5, PADSTRING('5',1000));insert into aborttest values (6, PADSTRING('6',1000)), (7, PADSTRING('7',1000)), (8, PADSTRING('8',1000)), (9, PADSTRING('9',1000));insert into aborttest values (0, PADSTRING('0',1000)), (1, PADSTRING('1',1000)), (2, PADSTRING('2',1000));insert into aborttest values (3, PADSTRING('3',1000)), (4, PADSTRING('4',1000)), (5, PADSTRING('5',1000));insert into aborttest values  (6, PADSTRING('6',1000)), (7, PADSTRING('7',1000)), (8, PADSTRING('8',1000)), (9, PADSTRING('9',1000));insert into aborttest values (0, PADSTRING('0',1000)), (1, PADSTRING('1',1000)), (2, PADSTRING('2',1000));insert into aborttest values (3, PADSTRING('3',1000)), (4, PADSTRING('4',1000)), (5, PADSTRING('5',1000));insert into aborttest values  (6, PADSTRING('6',1000)), (7, PADSTRING('7',1000)), (8, PADSTRING('8',1000)), (9, PADSTRING('9',1000));call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize', '4096');create index idx on aborttest (keycol, data);call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize', NULL);commit;delete from aborttest where keycol < 3;-- check to make sure we have a X row locks and IX table lock;select * from lock_table order by tabname, type desc, mode, cnt, lockname;delete from aborttest where keycol >= 3 ;-- check to make sure we escalated;select * from lock_table order by tabname, type desc, mode, cnt, lockname;-- now cause space reclamation on the leftmost leafinsert into aborttest values (-1, '-1'), (-1, '-1');-- check to make sure we escalated;select * from lock_table order by tabname, type desc, mode, cnt, lockname;-- Before fix to bug 4328/4330 the following rollback would cause a recovery-- error which would shut down the server, and cause recovery to always fail.-- The problem was that the lock escalation bug would remove locks on -- uncommitted deleted rows, and then the above insert would try and succeed-- at purging rows that it should not have been able.  When undo comes along to-- undo the delete it can't find the row because it has been purged by a-- committed nested internal transaction.rollback;select count(*) from aborttest;select keycol from aborttest;commit;-- TEST 4 - (beetle 4764) make sure no lock timeout if escalate is blocked by -- another user.-- connect 'wombat' as block_escalate_connection;set connection block_escalate_connection;autocommit off;drop table foo;create table foo (a int, data char(10));commit;insert into foo values (1, 'blocker');connect 'wombat' as escalate_connection;set connection escalate_connection;autocommit off;commit;-- insert 100 rows which should try to escalate the lock but then fail, because-- it is blocked by the block_escalate_connectioninsert into foo values (0, '0'), (0, '1'), (0, '2'), (0, '3'), (0, '4'), (0, '5'), (0, '6'), (0, '7'), (0, '8'), (0, '9');insert into foo values (10, '0'), (11, '1'), (12, '2'), (13, '3'), (14, '4'), (15, '5'), (16, '6'), (17, '7'), (18, '8'), (19, '9');insert into foo values (20, '0'), (21, '1'), (22, '2'), (23, '3'), (24, '4'), (25, '5'), (26, '6'), (27, '7'), (28, '8'), (29, '9');insert into foo values (30, '0'), (31, '1'), (32, '2'), (33, '3'), (34, '4'), (35, '5'), (36, '6'), (37, '7'), (38, '8'), (39, '9');insert into foo values (40, '0'), (41, '1'), (42, '2'), (43, '3'), (44, '4'), (45, '5'), (46, '6'), (47, '7'), (48, '8'), (49, '9');insert into foo values (50, '0'), (51, '1'), (52, '2'), (53, '3'), (54, '4'), (55, '5'), (56, '6'), (57, '7'), (58, '8'), (59, '9');insert into foo values (60, '0'), (61, '1'), (62, '2'), (63, '3'), (64, '4'), (65, '5'), (66, '6'), (67, '7'), (68, '8'), (69, '9');insert into foo values (70, '0'), (71, '1'), (72, '2'), (73, '3'), (74, '4'), (75, '5'), (76, '6'), (77, '7'), (78, '8'), (79, '9');insert into foo values (80, '0'), (81, '1'), (82, '2'), (83, '3'), (84, '4'), (85, '5'), (86, '6'), (87, '7'), (88, '8'), (89, '9');insert into foo values (90, '0'), (91, '1'), (92, '2'), (93, '3'), (94, '4'), (95, '5'), (96, '6'), (97, '7'), (98, '8'), (99, '9');insert into foo values (100, '0'), (101, '1'), (102, '2'), (103, '3'), (104, '4'), (105, '5'), (106, '6'), (107, '7'), (108, '8'), (109, '9');-- check to make sure we have not escalated;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;set connection block_escalate_connection;commit;-- see if all the data made it.select a, data from foo;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -