📄 readbtreesetlocks.subsql
字号:
-- Basic single user testing of read locks on select "set" queries on indexes.---- This ".subsql" test is-- meant to be run from another test such that it gets run under multiple-- isolation levels. This is important as they behave-- differently, depending on isolation levels.---- assume's caller has already done: run 'LockTableQuery.subsql'; to get -- easy access to the lock VTI.-- TEST 0: btree scan-- TEST 1: btree scan, (scan table with some deleted rows)-- TEST 2: btree scan, (scan with "<" qualifier)-- TEST 3: btree scan, (scan with equals qualifier)-- TEST 4: btree scan, (equals qualifier, no rows return)autocommit off;---------------------------------------------------------------------------------- Assumes that calling routine has set up the following simple dataset, -- a heap, and index with following initial values:-- create table a (a int, b int, c somesortofchar, [index_pad]);-- create index a_idx on a (a) or a_idx on a (a, index_pad);---- 1, 10, 'one'-- 2, 20, 'two'-- 3, 30, 'three'-- 4, 40, 'four'-- 5, 50, 'five'-- 6, 60, 'six'-- 7, 70, 'seven'--------------------------------------------------------------------------------select * from a;commit;---------------------------------------------------------------------------------- TEST 0: btree scan-- Test full scan.-- ALL MODES - TABLE IS, "scan page lockname of form (pageno, 1) -- SERIALIZABLE - row S locks as it visits each row, row/table lock -- held until end xact. Also holds one previous key lock.-- REPEATABLE READ - row S locks as it visits each row, row/table locks held-- until end of transaction.-- READ COMMITTED - instantaneous S locks requested on each row. No locks-- held after query finishes.-- READ UNCOMMITTED - no row locks. No locks held after query finishes.--------------------------------------------------------------------------------select a from a;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- TEST 1: btree scan, (scan table with some deleted rows)-- Test full scan on a data set with some deleted rows (the "even" ones).-- ALL MODES - TABLE IS, "scan page lockname of form (pageno, 1) -- SERIALIZABLE - row S locks as it visits each row, row/table lock -- held until end xact. Also holds one previous key lock.-- REPEATABLE READ - row S locks as it visits each row, row/table locks held-- until end of transaction.-- READ COMMITTED - instantaneous S locks requested on each row. No locks-- held after query finishes.-- READ UNCOMMITTED - no row locks. No locks held after query finishes.---- After the delete the base table should look like:-- 1, 10, 'one'-- 3, 30, 'three'-- 5, 50, 'five'-- 7, 70, 'seven'--------------------------------------------------------------------------------delete from a where a = 2 or a = 4 or a = 6;commit;select a from a;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- TEST 2: btree scan, (scan with "<" qualifier)-- Test "less than" qualified scan on a data set.-- ALL MODES - TABLE IS, "scan page lockname of form (pageno, 1) -- SERIALIZABLE - row S locks as it visits each row, row/table lock -- held until end xact. Also holds one previous key lock.-- REPEATABLE READ - row S locks as it visits each row, row/table locks held-- until end of transaction.-- READ COMMITTED - instantaneous S locks requested on each row. No locks-- held after query finishes.-- READ UNCOMMITTED - no row locks. No locks held after query finishes.---- At this point the base table should look like:-- 1, 10, 'one'-- 3, 30, 'three'-- 5, 50, 'five'-- 7, 70, 'seven'--------------------------------------------------------------------------------select a from a where a < 3;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- TEST 3: btree scan, (scan with equals qualifier)-- Test "equals" qualified cursor scan on a data set.-- ALL MODES - TABLE IS, "scan page lockname of form (pageno, 1) -- SERIALIZABLE - row S locks as it visits each row, row/table lock -- held until end xact. Also holds one previous key lock.-- REPEATABLE READ - row S locks as it visits each row, row/table locks held-- until end of transaction.-- READ COMMITTED - instantaneous S locks requested on each row. No locks-- held after query finishes.-- READ UNCOMMITTED - no row locks. No locks held after query finishes.---- At this point the base table should look like:-- 1, 10, 'one'-- 3, 30, 'three'-- 5, 50, 'five'-- 7, 70, 'seven'--------------------------------------------------------------------------------select a from a where a = 5;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;---------------------------------------------------------------------------------- TEST 4: btree scan, (equals qualifier, no rows return)-- Test "equals" qualified scan on a data set, no rows returned.-- ALL MODES - TABLE IS, "scan page lockname of form (pageno, 1) -- SERIALIZABLE - row S locks as it visits each row, row/table lock -- held until end xact. Also holds one previous key lock.-- REPEATABLE READ - row S locks as it visits each row, row/table locks held-- until end of transaction.-- READ COMMITTED - instantaneous S locks requested on each row. No locks-- held after query finishes.-- READ UNCOMMITTED - no row locks. No locks held after query finishes.---- At this point the base table should look like:-- 1, 10, 'one'-- 3, 30, 'three'-- 5, 50, 'five'-- 7, 70, 'seven'---------------------------------------------------------------------------------- no rows expected to qualifyselect a from a where a = 42;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;select * from lock_table order by tabname, type desc, mode, cnt, lockname;commit;drop table a;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -