|
|
|
RC, select id from T order by id DESC rows 1: не понимаю рез-т при интенс. вставках в <T>
|
|||
|---|---|---|---|
|
#18+
hi all Есть вот такой скриптик: file = `inf.sql` Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. Это значит, что при навигации по этому индексу мы будем видеть примерно вот это: момент времениключи индекса T_ID_DESC при навигации по немуt11t22; 1t33; 2; 1t4 4; 3; 2; 1t55; 4; 3; 2; 1. . .. . .Когда автономка добавит свою порцию строк (в тексте скрипта их 500 тыс), то перед самым своим коммитом она задаст значение контекстной переменной 'INFIN_LOOP_CURR_GEN', равное текущему значению генератора. Очевидно, оно будет расти с шагом, равным числу добавленных строк. Теперь делаю так: Код: plaintext 1. 2. Код: plaintext Код: plaintext Вижу в окне сессии-2: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Как видим, значения в столбе "CURR_G" идут с шагом = 500 тыс - т.е. это значит, что select-стейтмент в сессии-2 может возвращать данные из таблицы только тогда, когда в окне-1 будет выполнен commit автономки. Это подтверждается и трейсом. Вот что он показывает для сессии-1: установка context-переменной + commit произошли в 18:30:32.7770 Код: plaintext 1. 2. 3. 4. стейтмент завершился в 18:30:32.8560 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. И это выглядит странно. Потому что когда в RC-транзакции стартует этот самый select <...> order by id desc rows 1, то он, конечно, может видеть закоммиченные данные после своего старта, но причём тут новые ID'шники, которые поступают в левый хвост листового уровня индекса уже после старта данного селекта ? Допустим, на момент старта селекта в индекса были ключи: 100; 99; 98; ... 10; 9; 8; ... ; 1 - причём, к закоммиченным данным относились только эти: "10; 9; 8; ... ; 1". Дальше, согласно плану ORDER T_ID_DESC, этот селект должен начать с ключа 100, затем идти вправо и остановиться на ключе 10 - и выдать его. С какого перепугу он, селект этот, должен видеть новые ключи (101, 102 етц), которые прут в это время от сессии-1 и ложатся левее того ключа, с которого началась навигация ? Выполняется ли "рестарт" этой самой навигации в случае, когда листовой уровень пополняется слева новым ключами ? И еще. Хотя CURR_G выдаётся строго с шагом = 500 тыс, значение ID'шника от него всё время отстаёт. Дифферент равен примерно половине от шага (чуть меньше). Если селект в сессии-2 смог вернуть данные только тогда, когда сессия-1 закоммитилась (судя по значениям генератора), то что помешало ему увидеть актуальное на тот момент значение ID ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 19:17 |
|
||
|
RC, select id from T order by id DESC rows 1: не понимаю рез-т при интенс. вставках в <T>
|
|||
|---|---|---|---|
|
#18+
Прояснилось. Спасибо ДЕ за промыв мозга: по дефолту RC работает как no record_version. Как только добавил кляузу, так сразу и зашелестело: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 22:39 |
|
||
|
|

start [/forum/topic.php?fid=40&fpage=92&tid=1563450]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 326ms |

| 0 / 0 |
