|
|
|
JDBC и уровни изоляции
|
|||
|---|---|---|---|
|
#18+
День добрый, уважаемые! Решил освежить JDBC немножко, вот копаюсь. Имею Java 6 + JDBC + MySQL 5.1. Хочу написать шпаргалку для себя на тему уровней изоляции. Написал код, который считывает таблицу, ждет пока я вручную через интерфейс БД исправлю/добавлю ряды, считывает таблицу заново. Результат второго считывания я отмечаю как shown, если оно показало изменения, произошедшие после первого. Получилось так: READ COMMITED if during the read transaction something happens.. all UPDATE are shown all INSERT are shown REPEATABLE READ if during the read transaction something happens.. UPDATE is not shown = "preventing nonrepeatable read" INSERT MUST BE shown = "phantom read" - НО НА ДЕЛЕ ОН НЕ ПОКАЗЫВАЕТСЯ!!! SERIALIZABLE if during the read transaction something happens.. it cannot: they just go one by one Код вот здесь: Код: java 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. Вопросы: Моя шпаргалка верная? Почему я не вижу phantom-read при уровне изоляции REPEATABLE READ? Если внутри транзакции идет UPDATE или INSERT - он гарантировано при любых настройках виден этой же транзакции? Когда будет разница при использовании параметров ResultSet TYPE_SCROLL_SENSITIVE/INSENSITIVE? У меня почему-то всегда если ResultSet получен, то никакие изменения, внесенные в базу после считывания, в него перенесены не будут. А тогда зачем этот параметр. Каков scope изменения уровня изоляции через JDBC? На это: SELECT * FROM information_schema.session_variables WHERE variable_name = 'tx_isolation' JDBC не влияет. Можно гнать несколько запросов через один Connection одновременно? Что с многопоточностью Connection? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 19:38 |
|
||
|
JDBC и уровни изоляции
|
|||
|---|---|---|---|
|
#18+
DymytryВопросы: Моя шпаргалка верная? === нежизненная Почему я не вижу phantom-read при уровне изоляции REPEATABLE READ? === ты их увидишь при commited изоляции. Фантомы вполне нормальное дело. Если внутри транзакции идет UPDATE или INSERT - он гарантировано при любых настройках виден этой же транзакции? === при уровне кммитед - да. А это 99 и 9 процентов нужная изоляция Когда будет разница при использовании параметров ResultSet TYPE_SCROLL_SENSITIVE/INSENSITIVE? У меня почему-то всегда если ResultSet получен, то никакие изменения, внесенные в базу после считывания, в него перенесены не будут. А тогда зачем этот параметр. Каков scope изменения уровня изоляции через JDBC? На это: SELECT * FROM information_schema.session_variables WHERE variable_name = 'tx_isolation' JDBC не влияет. Можно гнать несколько запросов через один Connection одновременно? Что с многопоточностью Connection? === AFAIK одна переменная на коннект. Если этого мало - есть пул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 23:57 |
|
||
|
JDBC и уровни изоляции
|
|||
|---|---|---|---|
|
#18+
Petro123, спасибо за ответ! (1) Насколько я понимаю, я должен видеть phantom reads при READ REPEATABLE тоже: Repeatable reads ( http://en.wikipedia.org/wiki/Isolation_(database_systems)#Repeatable_reads) In this isolation level, a lock-based concurrency control DBMS implementation keeps read and write locks (acquired on selected data) until the end of the transaction. However, range-locks are not managed, so phantom reads can occur. (2) Если внутри транзакции идет UPDATE или INSERT - он гарантировано при любых настройках виден этой же транзакции? === при уровне кммитед - да. А это 99 и 9 процентов нужная изоляция А при других уровнях разве есть разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 01:20 |
|
||
|
JDBC и уровни изоляции
|
|||
|---|---|---|---|
|
#18+
Dymytry, таблица юзает движок InnoDB? Не все базы поддерживают все уровни изоляций, к слову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 02:21 |
|
||
|
JDBC и уровни изоляции
|
|||
|---|---|---|---|
|
#18+
забыл ник, благодарю! Вы правы, дело в innoDB. Оказалось что innoDB поддерживает все уровни изоляции, однако фантомные транзакции в REPEATABLE READ уровне там невозможны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 06:41 |
|
||
|
JDBC и уровни изоляции
|
|||
|---|---|---|---|
|
#18+
DymytryА при других уровнях разве есть разница? я 0,1 процента не проверял и не ставил. В работе никогда нужно не было. Всегда READ_COMMITED, как менее нагружающий БД. Лучше перефразируй вопрос в: "когда он не нужен" и на форум БД. Это их епархия. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 07:44 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38692632&tid=2126919]: |
0ms |
get settings: |
11ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
61ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 370ms |

| 0 / 0 |
