1 of 36

page 1: p1

mtr.m_memo:

[0] - index s-lock

[1] - page 1 latch, p1

Case 1, cursor points to root, don’t unlatch anything

2 of 36

page 1: p1, p2

mtr.m_memo:

[0] - index s-lock

[1] - page 1 latch, p1, p2

Case 1, cursor points to root, don’t unlatch anything

3 of 36

page 1: p2

mtr.m_memo:

[0] - index s-lock

[1] - page 1 latch, p2

[2] - page 2 latch, p1

page 2: p1

Case 2, p1’s parent is p2, don’t unlatch anything

4 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 1 latch

[2] - page 2 latch, p1, p2

page 2: p1, p2

5 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 2 latch, p1, p2

page 2: p1, p2

Case 3, p2 fetching, erase mtr.m_memo[1]

6 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 2 latch, p2

[2] - page 3 latch, p1

page 2: p2

page 3: p1

page 4

Case 2, p1’s parent is p2, don’t unlatch anything

7 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 2 latch

[2] - page 3 latch, p1

[3] - page 4 latch, p2

page 2

page 3: p1

page 4: p2

8 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 3 latch, p1

[2] - page 4 latch, p2

page 2

page 3: p1

page 4: p2

Case 3, p2 fetching, erase mtr.m_memo[1]

9 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 3 latch

[2] - page 4 latch, p2

[3] - page 5 latch, p1

page 2

page 3

page 4: p2

page 5: p1

page 6

10 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 4 latch, p2

[2] - page 5 latch, p1

page 2

page 3

page 4: p2

page 5: p1

page 6

Case 4, p1 fetching, erase mtr.m_memo[1]

11 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 4 latch

[2] - page 5 latch, p1

[3] - page 6 latch, p2

page 2

page 3

page 4

page 5: p1

page 6: p2

12 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 5 latch, p1

[2] - page 6 latch, p2

page 2

page 3

page 4

page 5: p1

page 6: p2

Case 3, p2 fetching, erase mtr.m_memo[1]

13 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 5 latch

[2] - page 6 latch, p2

[3] - page 7 latch, p1

page 2

page 3

page 4

page 5

page 6: p2

page 7: p1

page 11

page 9

page 10

page 8

14 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 6 latch, p2

[2] - page 7 latch, p1

page 2

page 3

page 4

page 5

page 6: p2

page 7: p1

page 11

page 9

page 10

page 8

Case 4, p1 fetching, erase mtr.m_memo[1]

15 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 6 latch, p2

[2] - page 7 latch, p1

[3] - page 8 latch

page 2

page 3

page 4

page 5

page 6: p2

page 7: p1

page 11

page 9

page 10

page 8

Estimate n_rows on level.

Case 5, first page is fetched during estimating n_rows in level, don’t unlatch anything.

16 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 6 latch, p2

[2] - page 7 latch, p1

[3] - page 8 latch

[4] - page 9 latch

page 2

page 3

page 4

page 5

page 6: p2

page 7: p1

page 11

page 9

page 10

page 8

Estimate n_rows on level.

17 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 6 latch, p2

[2] - page 7 latch, p1

[3] - page 9 latch

page 2

page 3

page 4

page 5

page 6: p2

page 7: p1

page 11

page 9

page 10

page 8

Estimate n_rows on level.

Case 6, next page is fetched during estimating n_rows in level, unlatch mtr.m_memo[3]

(or last - 1).

18 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 6 latch, p2

[2] - page 7 patch, p1

[3] - page 9 latch

[4] - page 10 latch

page 2

page 3

page 4

page 5

page 6: p2

page 7: p1

page 11

page 9

page 10

page 8

Estimate n_rows on level.

19 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 6 latch, p2

[2] - page 7 latch, p1

[3] - page 10 latch

page 2

page 3

page 4

page 5

page 6: p2

page 7: p1

page 11

page 9

page 10

page 8

Estimate n_rows on level.

Case 6, next page is fetched during estimating n_rows in level, unlatch mtr.m_memo[3]

(or last - 1).

20 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 6 latch, p2

[2] - page 7 latch, p1

page 2

page 3

page 4

page 5

page 6: p2

page 7: p1

page 11

page 9

page 10

page 8

Case 7, last page is fetched during estimating n_rows in level, unlatch mtr.m_memo[3] (or last).

Estimate n_rows on level.

21 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 6 latch

[2] - page 7 latch, p1

[3] - page 11 latch, p2

page 2

page 3

page 4

page 5

page 6

page 7: p1

page 11: p2

page 9

page 10

page 8

22 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 7 latch

[2] - page 11 latch, p2

[3] - page 12 latch, p1

page 2

page 3

page 4

page 5

page 6

page 7

page 11: p2

page 9

page 10

page 8

page 12: p1

page 50

page 21

page 20

Case 3, p2 fetching, erase mtr.m_memo[1]

23 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 11 latch, p2

[2] - page 12 latch, p1

page 2

page 3

page 4

page 5

page 6

page 7

page 11: p2

page 9

page 10

page 8

page 12: p1

page 50

page 21

page 20

Case 4, p1 fetching, erase mtr.m_memo[1]

24 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 11 latch, p2

[2] - page 12 latch, p1

page 2

page 3

page 4

page 5

page 6

page 7

page 11: p2

page 9

page 10

page 8

page 12: p1

page 50

page 21

page 20

25 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 11 latch, p2

[2] - page 12 latch, p1

[3] - page 20 latch

page 2

page 3

page 4

page 5

page 6

page 7

page 11: p2

page 9

page 10

page 8

page 12: p1

page 50

page 21

page 20

Estimate n_rows on level.

26 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 11 patch, p2

[2] - page 12 latch, p1

[3] - page 20 latch

[4] - page 21 latch

page 2

page 3

page 4

page 5

page 6

page 7

page 11: p2

page 9

page 10

page 8

page 12: p1

page 50

page 21

page 20

Estimate n_rows on level.

27 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 11 latch, p2

[2] - page 12 latch, p1

[3] - page 21 latch

page 2

page 3

page 4

page 5

page 6

page 7

page 11: p2

page 9

page 10

page 8

page 12: p1

page 50

page 21

page 20

Estimate n_rows on level.

Case 6, next page is fetched during estimating n_rows in level, unlatch mtr.m_memo[3]

(or last - 1).

28 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 11 latch, p2

[2] - page 12 latch, p1

page 2

page 3

page 4

page 5

page 6

page 7

page 11: p2

page 9

page 10

page 8

page 12: p1

page 50

page 21

page 20

Estimate n_rows on level.

Case 7, last page is fetched during estimating n_rows in level, unlatch mtr.m_memo[3] (or last).

29 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 11 patch

[2] - page 12 latch, p1

[3] - page 50 latch, p2

page 2

page 3

page 4

page 5

page 6

page 7

page 11

page 9

page 10

page 8

page 12: p1

page 50: p2

page 21

page 20

30 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 12 patch

[2] - page 50 latch, p2

[3] - page 51 latch, p1

page 2

page 3

page 4

page 5

page 6

page 7

page 11

page 9

page 10

page 8

page 12

page 50: p2

page 21

page 20

page 51: p1

page 100

leaves

Case 3, p2 fetching, erase mtr.m_memo[1]

31 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 50 latch, p2

[2] - page 51 latch, p1

page 2

page 3

page 4

page 5

page 6

page 7

page 11

page 9

page 10

page 8

page 12

page 50: p2

page 21

page 20

page 51: p1

page 100

leaves

Case 4, p1 fetching, erase mtr.m_memo[1]

32 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 50 latch, p2

[2] - page 51 latch, p1

page 2

page 3

page 4

page 5

page 6

page 7

page 11

page 9

page 10

page 8

page 12

page 50: p2

page 21

page 20

page 51: p1

page 100

leaves

Estimate n_rows on level.

33 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 50 latch

[2] - page 51 latch, p1

[3] - page 100 latch, p2

page 2

page 3

page 4

page 5

page 6

page 7

page 11

page 9

page 10

page 8

page 12

page 50

page 21

page 20

page 51: p1

page 100: p2

leaves

34 of 36

page 1

mtr.m_memo:

[0] - index s-lock

[1] - page 51 latch, p1

[2] - page 100 latch, p2

page 2

page 3

page 4

page 5

page 6

page 7

page 11

page 9

page 10

page 8

page 12

page 50

page 21

page 20

page 51: p1

page 100: p2

leaves

Case 3, p2 fetching, erase mtr.m_memo[1]

35 of 36

page 1

mtr.m_memo:

[0] - page 51 latch, p1

[1] - page 100 latch, p2

page 2

page 3

page 4

page 5

page 6

page 7

page 11

page 9

page 10

page 8

page 12

page 50

page 21

page 20

page 51: p1

page 100: p2

leaves

Unlatch index s-lock. We can’t do it earlier, because page 100 can’t be latched(and page 50 unlatched) before we finish estimating rows on 0 level.

36 of 36

page 1

mtr.m_memo:

commit

page 2

page 3

page 4

page 5

page 6

page 7

page 11

page 9

page 10

page 8

page 12

page 50

page 21

page 20

page 51

page 100

leaves

Cases 1,2,3,4 can be joined in the following code in btr_est_cur_t::fetch_child():

if (parent_block && parent_block != right_parent) mtr.rollback_to_savepoint(1, 2);