📄 escalatelock.out
字号:
ij> -- 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';ij> CREATE FUNCTION PADSTRING (DATA VARCHAR(32000), LENGTH INTEGER) RETURNS VARCHAR(32000) EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.Formatters.padString' LANGUAGE JAVA PARAMETER STYLE JAVA;0 rows inserted/updated/deletedij> CREATE PROCEDURE WAIT_FOR_POST_COMMIT() DYNAMIC RESULT SETS 0 LANGUAGE JAVA EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.T_Access.waitForPostCommitToFinish' PARAMETER STYLE JAVA;0 rows inserted/updated/deletedij> run resource 'LockTableQuery.subsql';ij> create view lock_table asselect cast(username as char(8)) as username, cast(t.type as char(8)) as trantype, cast(l.type as char(8)) as type, cast(lockcount as char(3)) as cnt, mode, cast(tablename as char(12)) as tabname, cast(lockname as char(10)) as lockname, state, statusfrom new org.apache.derby.diag.LockTable() l right outer join new org.apache.derby.diag.TransactionTable() ton l.xid = t.xid where l.tableType <> 'S' and t.type='UserTransaction';0 rows inserted/updated/deletedij> --on l.xid = t.xid where l.tableType <> 'S' or l.tableType is null-- order by-- tabname, type desc, mode, cnt, lockname-- lock table with system catalog locks included.create view full_lock_table asselect cast(username as char(8)) as username, cast(t.type as char(8)) as trantype, cast(l.type as char(8)) as type, cast(lockcount as char(3)) as cnt, mode, cast(tablename as char(12)) as tabname, cast(lockname as char(10)) as lockname, state, statusfrom new org.apache.derby.diag.LockTable() l right outer join new org.apache.derby.diag.TransactionTable() ton l.xid = t.xid where l.tableType <> 'S' ;0 rows inserted/updated/deletedij> -- lock table with no join.create view lock_table2 asselect cast(l.xid as char(8)) as xid, cast(l.type as char(8)) as type, cast(lockcount as char(3)) as cnt, mode, cast(tablename as char(12)) as tabname, cast(lockname as char(10)) as lockname, statefrom new org.apache.derby.diag.LockTable() l where l.tableType <> 'S' ;0 rows inserted/updated/deletedij> -- transaction table with no join.create view tran_table asselect *from new org.apache.derby.diag.TransactionTable() t ;0 rows inserted/updated/deletedij> autocommit off;ij> -- TEST 1 - make sure IX row locks are escalated to a persistent X table lock.create table foo (a int);0 rows inserted/updated/deletedij> commit;ij> -- first insert 90 rowsinsert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);10 rows inserted/updated/deletedij> insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);10 rows inserted/updated/deletedij> insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);10 rows inserted/updated/deletedij> insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);10 rows inserted/updated/deletedij> insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);10 rows inserted/updated/deletedij> insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);10 rows inserted/updated/deletedij> insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);10 rows inserted/updated/deletedij> insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);10 rows inserted/updated/deletedij> insert into foo values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);10 rows inserted/updated/deletedij> -- check to make sure we have IX table and X row locks.select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |9 |IX |FOO |Tablelock |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,10) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,11) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,12) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,13) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,14) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,15) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,16) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,17) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,18) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,19) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,20) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,21) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,22) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,23) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,24) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,25) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,26) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,27) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,28) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,29) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,30) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,31) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,32) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,33) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,34) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,35) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,36) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,37) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,38) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,39) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,40) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,41) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,42) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,43) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,44) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,45) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,46) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,47) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,48) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,49) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,50) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,51) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,52) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,53) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,54) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,55) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,56) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,57) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,58) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,59) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,60) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,61) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,62) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,63) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,64) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,65) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,66) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,67) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,68) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,69) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,7) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,70) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,71) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,72) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,73) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,74) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,75) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,76) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,77) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,78) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,79) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,8) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,80) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,81) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,82) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,83) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,84) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,85) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,86) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,87) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,88) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,89) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,9) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,90) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,91) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,92) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,93) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,94) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,95) |GRANT|ACTIVE APP |UserTran|ROW |1 |X |FOO |(1,96) |GRANT|ACTIVE ij> -- 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);10 rows inserted/updated/deletedij> -- check to make sure we now just have a X table lock.select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |11 |IX |FOO |Tablelock |GRANT|ACTIVE APP |UserTran|TABLE |1 |X |FOO |Tablelock |GRANT|ACTIVE ij> -- 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);10 rows inserted/updated/deletedij> -- check to make sure we now just have a X table lock.select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |12 |IX |FOO |Tablelock |GRANT|ACTIVE APP |UserTran|TABLE |1 |X |FOO |Tablelock |GRANT|ACTIVE ij> commit;ij> -- TEST 2 - make sure IS row locks are escalated to a persistent X table lock.create index foox on foo (a);0 rows inserted/updated/deletedij> commit;ij> set isolation serializable;0 rows inserted/updated/deletedij> -- get IS row locks on just under 100 of the rows;select a from foo where a < 5;A -----------0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -