Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Max Khon                             2:5000/79.666  12 Oct 2001  09:21:44
 To : Anton Voronin
 Subject : MySQL: transactions vs locks
 -------------------------------------------------------------------------------- 
 
 
 12 Oct 01 00:29, Anton Voronin wrote to All:
 
  AV> Как я выяснил опытным путем, когда в Mysql активна транзакция, то не
  AV> работают блокировки (LOCK молчаливо проходит, а на UNLOCK сервер 
  AV> падает по SIGSEGV со словами "...you probably hit a bug..."). И наоборот,
  AV> если хоть одна таблица в базе блокирована, то не работают транзакции 
  AV> (AutoCommit не устанавливается в 0.
 
 ну это на самом деле наверно косяк -- пиши багрепорт
 
  AV> Значит нужно использовать либо то, либо другое. Hапример, когда 
  AV> запросов на изменение (UPDATE/INSERT/etc...) не больше одного, а 
  AV> остальные -  SELECT'ы, то можно обойтись только блокировками, без 
  AV> транзакций, так как целостности
  AV> базы ничего не угрожает. А если все запросы - на изменение данных, то
  AV> можно обойтиь без блокировок, только транзакциями (потому как вся
  AV> последовательность выполняется за одну атомарную операцию и никто 
  AV> другой не сможет внести изменения между запросами этой транзакции).
 
 слушай, а там разве нормальный locking не сделали?
 я в том смысле когда лочится не вся таблица а только строчки или еще лучше
 mvcc как в pgsql или oracle. если не сделали то не совсем понятно
 как они сделали транзакции.
 
  AV> Hо что делать, если и update'ов/insert'ов больше нуля, а select'ов
  AV> больше одного? Транзакция здесь нужна обязательно, но если не делать
  AV> блокировок, то:
  AV> 1. В случае когда сначала делается select, а потом на основе 
  AV> выбранных
  AV> им данных делаются обновления, существует ли гарантия, что между 
  AV> селектом
  AV> и апдейтом не внесено изменений другим пользователем в базу таким 
  AV> образом,
  AV> что данные, на которых основывается дальнайший update, окажутся
  AV> неактуальными? Ведь несмотря на транзакцию, select все равно делается
  AV> сразу, а не во время commit'а.
 
 для таких вещей есть select for update
 
  AV> 2. В случае когда сначала делается серия обновлений, а потом select, 
  AV> который должен отразить эти изменения, не будет ли он читать данные из 
  AV> исходной таблицы, в которой изменения еще не отражены, поскольку коммита 
  AV> еще не было?
 
 если в той же транзакции, то будет читать проапдейченные данные
 если в другой, то зависит от transaction isolation level
 
 в общем я думаю с обоими вопросами лучше в su.dbms -- люди там добрые и
 отзывчивые
 
 а вообще по-моему все это решается переходом на postgresql, но мой совет
 основан только на том, что я не знаю как там у mysql с транзакциями и локами
 (последний раз его трогал очень давно, когда там были только table level locks
 и не было транзакций)
 у potsgresql'я конечно тоже своих косяков достаточно, но чтобы решить твои
 вопросы -- там средств точно хватит
 
 насколько я понимаю использовать oracle или db2 ты не можешь
 
 /fjoe
 
 --- Msged/BSD TE 06 (pre)
  * Origin: the number of the beast is vi vi vi (2:5000/79.666)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 MySQL: transactions vs locks   Anton Voronin   12 Oct 2001 02:29:43 
 MySQL: transactions vs locks   Andrew E. Filonov   12 Oct 2001 09:28:58 
 MySQL: transactions vs locks   Max Khon   12 Oct 2001 09:21:44 
 MySQL: transactions vs locks   Anton Voronin   12 Oct 2001 13:59:28 
 MySQL: transactions vs locks   Max Khon   14 Oct 2001 12:38:02 
 Re: MySQL: transactions vs locks   Igor Sysoev   15 Oct 2001 15:56:51 
Архивное /ru.unix.bsd/40593bc6d17b.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional