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

Содержание

Слайд 2

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

Содержание

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

Слайд 3

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

Транзакции

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

Слайд 4

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

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

Слайд 5

Пример применения транзакций Trans Tstart Set $Ztrap=“Error” Set ^A(1)=1 Set ^A(1,1)=11

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

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

Откат транзакции

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 - добавление

Блокировки

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

Примеры блокировок

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)

Транзакции и блокировки

Блокировки остаются до окончания транзакции
##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”) // ^A IS LOCKED SHARED LOCK

Пример блокировки

TSTART
LOCK +(^A#”S”) // ^A IS LOCKED SHARED
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”) // ^A IS UNLOCKED
TCOMMIT
Слайд 13

Управление блокировками Увеличение таблицы блокировок Удаление блокировок (конкретной блокировки, блокировок процесса,

Управление блокировками

Увеличение таблицы блокировок
Удаление блокировок (конкретной блокировки, блокировок процесса, всех блокировок

сервера) с помощью Панели управления или утилиты LOCKTAB
Слайд 14

Дополнительная информация о блокировках Чтобы избежать DeadLock (два процесса выполняют инкрементную

Дополнительная информация о блокировках

Чтобы избежать 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( ).%OpenId(id,concurrency) Уровни concurrency 0: No Locking

Управление concurrency объектов

Set oref=##class().%OpenId(id,concurrency)
Уровни concurrency
0: No Locking
1: Atomic
2: Shared
3: Shared/Retained
4: Exclusive

Слайд 17

No Locking

No Locking

Слайд 18

Atomic

Atomic

Слайд 19

Shared

Shared

Слайд 20

Shared/Retained

Shared/Retained

Слайд 21

Exclusive

Exclusive

Слайд 22

Увеличение/Понижение Concurrency Do obj.%UpgradeConcurrency(n) Do obj.%DowngradeConcurrency(n)

Увеличение/Понижение Concurrency

Do obj.%UpgradeConcurrency(n)
Do obj.%DowngradeConcurrency(n)

Слайд 23

Пример стратегии управления Concurrency Если приложение показывает свойства объектов и позволяет

Пример стратегии управления Concurrency

Если приложение показывает свойства объектов и позволяет

редактировать объекты, но вероятность изменения мала, можно предложить следующую стратегию:
Открыть объект с Concurrency 3
Если пользователь хочет изменять объект, поднять Concurrency до 4
%Save
Понизить Concurrency до 3