Similar presentations:
Блокировки и транзакции в Caché
1. Блокировки и транзакции в Caché
Вадим Федоров2. Содержание
• Транзакции• Блокировки
• Параллельная работа с классами
3. Транзакции
Последовательность логически взаимосвязанныхизменений БД
• Атомарность
• Целостность
• Изолированность
• Долговечность
4. Транзакции в Caché
Команда SQL%BEGTRANS
Команда
Определение и краткое
COS
описание
TStart Начало транзакции
$Zutil(34) Показывает, обрабатывается
ли транзакция
COMMIT WORK
TCommit Успешное завершение
транзакции
ROLLBACK WORK TRollback Неудачное завершение
транзакции, все операции с БД
откатываются
%INTRANS
5. Пример применения транзакций
TransTstart
Set $Ztrap=“Error”
Set ^A(1)=1
Set ^A(1,1)=11
Set ^Log(1)=error
Tcommit
Set ^B(1,$Horolog)=1
Quit
Error Trollback
Set ^B(1,$Horolog)=0
Quit
6. Откат транзакции
• TRollback• ##sql(ROLLBACK WORK)
• %ETN
7. Автоматический откат транзакций
• При старте системы, когда есть открытые транзакции• Если выполнении Halt система спрашивает про
закрытие транзакции. В фоновых процессах (Job)
транзакции откатываются автоматически
• Если администратор останавливает процесс
8. Содержание
• Тразакции• Блокировки
• Параллельная работа с классами
9. Блокировки
LOCK:pcoper(lockname#locktype,...):timeout
L:pc oper(lockname#locktype,...):timeout
• pc – postcondition
• oper - добавление или снятие блокировки
• Lockname – имя блокируемого
ресурса(ресурсов)
• Locktype – тип применяемой блокировки
• timeout – задержка по времени
10. Примеры блокировок
• Lock• Lock ^a:5 else
write "Try again later."
• Lock +^a
• Lock +^a#”S”
• Lock -^a
• Lock -^a#”I”
(немедленное (до
окончания транзакции) освобождение
переменной, заблокированной в данной
транзации)
• Lock -^a#”SI”
11. Транзакции и блокировки
• Блокировки остаются до окончания транзакции##sql(%BEGTRANS)
Lock ^A(0) set id=^A(0)+1,^A(0)=id
Lock ^A(id) set ^A(id)=name
// обработка продолжается ...
Lock
##sql(COMMIT WORK)
12. Пример блокировки
TSTARTLOCK +(^A#”S”)
SHARED
// ^A IS LOCKED
LOCK +(^A)// ^A IS LOCKED EXCLUSIVE
LOCK -(^A#”I”) // ^A IS LOCKED SHARED
LOCK -(^A#”S”) // ^A IS STILL LOCKED
SHARED, BECAUSE THERE WAS NO “I”
LOCK -(^A#”SI”)
TCOMMIT
// ^A IS UNLOCKED
13. Управление блокировками
• Увеличение таблицы блокировок• Удаление блокировок (конкретной блокировки,
блокировок процесса, всех блокировок сервера) с
помощью Панели управления или утилиты LOCKTAB
14. Дополнительная информация о блокировках
• Чтобы избежать DeadLock (два процесса выполняютинкрементную блокировку уже заблокированных
переменных) используйте timeout
• Когда процесс прерывается Caché выполняет lock
• $Increment гораздо быстрее!
Lock +^a Set ^a=^a+1,c=^a Lock -^a
Set c=$Increment(^a)
15. Содержание
• Транзакции• Блокировки
• Параллельная работа с классами
16. Управление concurrency объектов
• Set oref=##class(<classname>).%OpenId(id,concurrency)• Уровни concurrency
–
–
–
–
–
0: No Locking
1: Atomic
2: Shared
3: Shared/Retained
4: Exclusive
17. No Locking
18. Atomic
19. Shared
20. Shared/Retained
21. Exclusive
22. Увеличение/Понижение Concurrency
• Do obj.%UpgradeConcurrency(n)• Do obj.%DowngradeConcurrency(n)
23. Пример стратегии управления Concurrency
• Если приложение показывает свойства объектов ипозволяет редактировать объекты, но вероятность
изменения мала, можно предложить следующую
стратегию:
– Открыть объект с Concurrency 3
– Если пользователь хочет изменять объект,
поднять Concurrency до 4
– %Save
– Понизить Concurrency до 3
24. Спасибо!
[email protected]www.intersystems.ru
(095) 956-8808