03.03.2005, 16:47 | #1 |
Участник
|
Разница NotInTTS и Found
Поскажите, в чем отличие между кешированием таблиц
NotInTTS и Found Из документации непонятно как внутри транзакций ведут себя запросы к таблицам с типом кеширования Found. 1. Данные берутся из кеша или вычитываются заново ? 2. Если из кеша, то как гарантировать внутри транзакции, что мы получили актуальные данные ? Если же вычитываются заново из базы, то тогда в чем разница между NotInTTS и Found ? |
|
03.03.2005, 16:56 | #2 |
Модератор
|
Разница в поведении при
PHP код:
|
|
05.03.2005, 11:21 | #3 |
----------------
|
Запросы к БД при разных CacheLookup
Для опытов я выбрал табличку InventLocation
PHP код:
None SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' TTSBEGIN SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A(UPDLOCK) WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A(UPDLOCK) WHERE INVENTLOCATIONID='Нет склада' TTSCOMMIT SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' NoneInTTS SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' TTSBEGIN SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A(UPDLOCK) WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A(UPDLOCK) WHERE INVENTLOCATIONID='Нет склада' TTSCOMMIT SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' Found SELECT * FROM InventLocation A(NOLOCK) WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A(NOLOCK) WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A(NOLOCK) WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' TTSBEGIN SELECT * FROM InventLocation A(UPDLOCK) WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A(NOLOCK) WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A(NOLOCK) WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A(UPDLOCK) WHERE INVENTLOCATIONID='Нет склада' TTSCOMMIT SELECT * FROM InventLocation A(NOLOCK) WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A(NOLOCK) WHERE INVENTLOCATIONID='Нет склада' SELECT * FROM InventLocation A WHERE INVENTLOCATIONID='Нет склада' FoundAndEmpty SELECT * FROM InventLocation A(NOLOCK) WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A(NOLOCK) WHERE INVENTLOCATIONID='Нет склада' TTSBEGIN SELECT * FROM InventLocation A(UPDLOCK) WHERE INVENTLOCATIONID='MW' SELECT * FROM InventLocation A(UPDLOCK) WHERE INVENTLOCATIONID='Нет склада' TTSCOMMIT EntireTable SELECT * FROM InventLocation A(NOLOCK) TTSBEGIN SELECT * FROM InventLocation A(UPDLOCK) WHERE INVENTLOCATIONID='MW' TTSCOMMIT Как говорится "почувствуйте разницу" |
|
|
За это сообщение автора поблагодарили: kashperuk (5), sukhanchik (8), Logger (8), alex55 (1), Molchun (1), Kabardian (3). |
05.03.2005, 11:44 | #4 |
Участник
|
Большое спасибо за исчерпывающий ответ !
|
|
05.03.2005, 12:11 | #5 |
Участник
|
Интересно, получается все же, что внутри транзакции
None и NoneInTTS ведут себя по разному. Доверяй документации, но проверяй ! |
|
05.03.2005, 12:32 | #6 |
Участник
|
Спасибо.
Перенес в базу знаний. |
|
18.09.2008, 12:35 | #7 |
Участник
|
Цитата:
When inside a transaction, the record is read once from database and subsequently from cache. То есть нигде не сказано, что внутри транзакции записи не кэшируются, наоборот, кэш используется, если запись закэширована внутри TTS. По моему так. Знатоки, поправьте, если я не так что-то понял! |
|
Теги |
cache, cache lookup, faq, кэширование, полезное, таблица, транзакции |
|
|