📄 tablelockbasic.out
字号:
ij> set isolation to RR;0 rows inserted/updated/deletedij> run resource 'TableLockBasic.subsql';ij> -- Very basic single user testing of table locking, verify that the right locks-- are obtained for simple operations. This test only looks at table and-- row logical locks, it does not verify physical latches or lock ordering.---- The basic methodology is:-- start transaction-- simple operation-- print lock table which should match the master-- end transation-- 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> create table heap_only (a int);0 rows inserted/updated/deletedij> commit;ij> ---------------------------------------------------------------------------------- Test insert into empty heap, should just get table lock --------------------------------------------------------------------------------insert into heap_only values (1);1 row inserted/updated/deletedij> select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |1 |X |HEAP_ONLY |Tablelock |GRANT|ACTIVE ij> commit;ij> ---------------------------------------------------------------------------------- Test insert into heap with one row, just get table lock --------------------------------------------------------------------------------insert into heap_only values (2);1 row inserted/updated/deletedij> select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |1 |X |HEAP_ONLY |Tablelock |GRANT|ACTIVE ij> commit;ij> ---------------------------------------------------------------------------------- Test select from a heap, should get shared table lock.--------------------------------------------------------------------------------select a from heap_only where a = 1;A -----------1 ij> select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |1 |S |HEAP_ONLY |Tablelock |GRANT|ACTIVE ij> commit;ij> ---------------------------------------------------------------------------------- Test delete from a heap, should get exclusive table lock.--------------------------------------------------------------------------------delete from heap_only where a = 1;1 row inserted/updated/deletedij> select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |2 |X |HEAP_ONLY |Tablelock |GRANT|ACTIVE ij> commit;ij> ---------------------------------------------------------------------------------- Test update to heap, should get exclusive table lock.--------------------------------------------------------------------------------update heap_only set a = 1000 where a = 2;1 row inserted/updated/deletedij> select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |2 |X |HEAP_ONLY |Tablelock |GRANT|ACTIVE ij> commit;ij> ---------------------------------------------------------------------------------- Test drop of heap, should get exclusive table lock.--------------------------------------------------------------------------------drop table heap_only;0 rows inserted/updated/deletedij> select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |3 |X |*** TRANSIEN|Tablelock |GRANT|ACTIVE ij> commit;ij> call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize', '4096');0 rows inserted/updated/deletedij> create table indexed_heap (a int, b varchar(1000));0 rows inserted/updated/deletedij> call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize', NULL);0 rows inserted/updated/deletedij> select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |1 |X |INDEXED_HEAP|Tablelock |GRANT|ACTIVE ij> commit;ij> call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize', '4096');0 rows inserted/updated/deletedij> create index a_idx on indexed_heap (a, b);0 rows inserted/updated/deletedij> call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize', NULL);0 rows inserted/updated/deletedij> select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |4 |S |INDEXED_HEAP|Tablelock |GRANT|ACTIVE APP |UserTran|TABLE |1 |X |INDEXED_HEAP|Tablelock |GRANT|ACTIVE APP |UserTran|TABLE |1 |X |INDEXED_HEAP|Tablelock |GRANT|ACTIVE ij> commit;ij> ---------------------------------------------------------------------------------- Test insert into indexed heap, should just get table lock --------------------------------------------------------------------------------insert into indexed_heap (a) values (1);1 row inserted/updated/deletedij> select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |2 |X |INDEXED_HEAP|Tablelock |GRANT|ACTIVE ij> commit;ij> ---------------------------------------------------------------------------------- Test insert into indexed heap with one row, just get table lock --------------------------------------------------------------------------------insert into indexed_heap (a) values (2);1 row inserted/updated/deletedij> select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |2 |X |INDEXED_HEAP|Tablelock |GRANT|ACTIVE ij> commit;ij> ---------------------------------------------------------------------------------- Test select from a indexed heap, should get shared table lock.--------------------------------------------------------------------------------select a from indexed_heap where a = 1;A -----------1 ij> select * from lock_table order by tabname, type desc, mode, cnt, lockname;USERNAME|TRANTYPE|TYPE |CNT |MODE|TABNAME |LOCKNAME |STATE|STATUS ---------------------------------------------------------------------------APP |UserTran|TABLE |1 |S |INDEXED_HEAP|Tablelock |GRANT|ACTIVE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -