Блокировки и транзакции в Caché
Содержание
Транзакции
Транзакции в Caché
Пример применения транзакций
Откат транзакции
Автоматический откат транзакций
Содержание
Блокировки
Примеры блокировок
Транзакции и блокировки
Пример блокировки
Управление блокировками
Дополнительная информация о блокировках
Содержание
Управление concurrency объектов
No Locking
Atomic
Shared
Shared/Retained
Exclusive
Увеличение/Понижение Concurrency
Пример стратегии управления Concurrency
Спасибо!
292.50K
Категория: Базы данныхБазы данных

Блокировки и транзакции в Caché

1. Блокировки и транзакции в Caché

Вадим Федоров

2. Содержание

• Транзакции
• Блокировки
• Параллельная работа с классами

3. Транзакции

Последовательность логически взаимосвязанных
изменений БД
• Атомарность
• Целостность
• Изолированность
• Долговечность

4. Транзакции в Caché

Команда SQL
%BEGTRANS
Команда
Определение и краткое
COS
описание
TStart Начало транзакции
$Zutil(34) Показывает, обрабатывается
ли транзакция
COMMIT WORK
TCommit Успешное завершение
транзакции
ROLLBACK WORK TRollback Неудачное завершение
транзакции, все операции с БД
откатываются
%INTRANS

5. Пример применения транзакций

Trans
Tstart
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:pc
oper(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. Пример блокировки

TSTART
LOCK +(^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
English     Русский Правила