Scud
Новичок
Вопрос по LOCK/UNLOCK TABLES и PHP как FASTCGI
Вот возник у меня такой вопрос: в MySQL с помощью LOCK/UNLOCK TABLES можно блокировать таблицы на чтение и на запись, блокировки эти PER THREAD, т.е. как я понимаю пока один поток пишет, другие ждут. Но что будет если у меня PHP работает через mod_fastcgi, т.е. куча запросов от клиентов обрабатывается одним и тем же php, т.е. одним thread, получается что в такой конфигурации эти блокировки бесполезны? И лучше использовать user level lock? Можеть кто-нибудь подтвердить или опровергнуть мои выводы
-~{}~ 19.11.05 17:50:
Ну что ж продолжаю монолог Внимание грабли!
Для persistent соединений:
-----------------------------------
Если вы поставили LOCK на таблицу, потом случайно отвалились без UNLOCK, то таблица останется залоченой и никто туда уже ничего не запишет (очевидно пока не умрет mysql'ый thread залочивший таблицу).
Для обычных соединений:
----------------------------------
Unlock будет происходить автоматически при закрытии соединения, так что единственное что вам грозит если вы отвалитесь в середине некой многошаговой (много-insert'ой) операции записи данных в базу, так это несогласованность данных в таблице (таблицах). Зато никаких блокировок не останеться.
Вывод: для чтения лучше использовать persitent соединения, для записи с блокировкой лучше использовать обычные соединения.
Вот возник у меня такой вопрос: в MySQL с помощью LOCK/UNLOCK TABLES можно блокировать таблицы на чтение и на запись, блокировки эти PER THREAD, т.е. как я понимаю пока один поток пишет, другие ждут. Но что будет если у меня PHP работает через mod_fastcgi, т.е. куча запросов от клиентов обрабатывается одним и тем же php, т.е. одним thread, получается что в такой конфигурации эти блокировки бесполезны? И лучше использовать user level lock? Можеть кто-нибудь подтвердить или опровергнуть мои выводы
-~{}~ 19.11.05 17:50:
Ну что ж продолжаю монолог Внимание грабли!
Для persistent соединений:
-----------------------------------
Если вы поставили LOCK на таблицу, потом случайно отвалились без UNLOCK, то таблица останется залоченой и никто туда уже ничего не запишет (очевидно пока не умрет mysql'ый thread залочивший таблицу).
Для обычных соединений:
----------------------------------
Unlock будет происходить автоматически при закрытии соединения, так что единственное что вам грозит если вы отвалитесь в середине некой многошаговой (много-insert'ой) операции записи данных в базу, так это несогласованность данных в таблице (таблицах). Зато никаких блокировок не останеться.
Вывод: для чтения лучше использовать persitent соединения, для записи с блокировкой лучше использовать обычные соединения.