Code:
create table t1 (x varchar2(10)); -- table with two ITL slots (the default)
-- Row one
insert into t1 values('ROW ONE');
commit;
-- Block dump:
scn: 0x0000.207b8fd2 seq: 0x01 flg: 0x02 tail: 0x8fd20601
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0001.018.0001d45f 0x0080000a.0ce5.0e --U- 1 fsc 0x0000.207b8fd2
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
block_row_dump:
tab 0, row 0, @0x1f8d
tl: 11 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 7] 52 4f 57 20 4f 4e 45
-- the transaction took slot 1 and the row lock byte points at slot 1: lb = 0x1
--
-- Insert row two
insert into t1 values('ROW TWO');
commit;
scn: 0x0000.207b9076 seq: 0x01 flg: 0x02 tail: 0x90760601
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0001.018.0001d45f 0x0080000a.0ce5.0e --U- 1 fsc 0x0000.207b8fd2
0x02 0x000a.022.00018db4 0x0080009e.0b4a.13 --U- 1 fsc 0x0000.207b9076
block_row_dump:
tab 0, row 0, @0x1f8d
tl: 11 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 7] 52 4f 57 20 4f 4e 45
tab 0, row 1, @0x1f82
tl: 11 fb: --H-FL-- lb: 0x2 cc: 1
col 0: [ 7] 52 4f 57 20 54 57 4f
-- the new transaction took slot 2 and the row lock byte points at slot 2: lb = 0x2
--
-- Insert row three
insert into t1 values('ROW THREE');
commit;
scn: 0x0000.207b90cf seq: 0x01 flg: 0x02 tail: 0x90cf0601
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0004.00c.0001baf5 0x00800235.0a54.4c --U- 1 fsc 0x0000.207b90cf
0x02 0x000a.022.00018db4 0x0080009e.0b4a.13 C--- 0 scn 0x0000.207b9076
block_row_dump:
tab 0, row 0, @0x1f8d
tl: 11 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 7] 52 4f 57 20 4f 4e 45
tab 0, row 1, @0x1f82
tl: 11 fb: --H-FL-- lb: 0x0 cc: 1
col 0: [ 7] 52 4f 57 20 54 57 4f
tab 0, row 2, @0x1f75
tl: 13 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 9] 52 4f 57 20 54 48 52 45 45
-- the new transaction over-wrote slot 1 and the row 3 lock byte points at slot 1: lb = 0x1
-- the lock bytes for rows 1 and 2 were zeroed.
Statistics: Posted by vc — 16 Oct 2004 03:39
Statistics: Posted by tengiz — 15 Oct 2004 21:37
Statistics: Posted by Alex Shtern — 15 Oct 2004 20:59
Statistics: Posted by vc — 15 Oct 2004 20:32
Statistics: Posted by Alex Shtern — 15 Oct 2004 19:12
Statistics: Posted by tengiz — 15 Oct 2004 18:32
Statistics: Posted by Alex Shtern — 15 Oct 2004 16:00
А что из себя представляет snapshot isolation framework? Это сервис, процесс, механизм или просто режим работы сервера с базой?
Statistics: Posted by tengiz — 05 Dec 2003 23:55
Code:
with d2(id, folder, level) as (
select id, folder, 0 as level
from docs
where folder in (2,3)
union all
select d1.id, d1.folder, level+1
from docs d1 join d2 on d1.folder=d2.id
)
select * from d2
5 2 0
7 3 0
8 3 0
10 2 0
6 5 1
Statistics: Posted by vc — 05 Dec 2003 17:14
Statistics: Posted by Dmitry67 — 05 Dec 2003 16:45
Code:
drop table docs;
create table Docs(ID int , Folder int);
insert into docs values(1,0);
insert into docs values(2,1);
insert into docs values(3,1);
insert into docs values(4,1);
insert into docs values(5,2);
insert into docs values(6,5);
insert into docs values(7,3);
insert into docs values(8,3);
insert into docs values(9,4);
insert into docs values(10,2);
select * from docs
ID Folder
----------- -----------
1 0
2 1
3 1
4 1
5 2
6 5
7 3
8 3
9 4
10 2
with d2(id, folder, level) as (
select id, folder, 0 as level
from docs
where folder=0
union all
select d1.id, d1.folder, level+1
from docs d1 join d2 on d1.folder=d2.id
)
select * from d2
id folder level
----------- ----------- -----------
1 0 0
2 1 1
3 1 1
4 1 1
9 4 2
7 3 2
8 3 2
5 2 2
10 2 2
6 5 3
(10 rows affected)
1>
Statistics: Posted by vc — 05 Dec 2003 16:19
Statistics: Posted by Merle — 05 Dec 2003 15:46
Statistics: Posted by Merle — 05 Dec 2003 15:05
Statistics: Posted by Dmitry67 — 05 Dec 2003 11:42
Statistics: Posted by tengiz — 03 Dec 2003 20:36
Statistics: Posted by Merle — 03 Dec 2003 20:20
Statistics: Posted by Dmitry67 — 02 Dec 2003 09:09
Statistics: Posted by tengiz — 02 Dec 2003 00:25
tengiz wrote:Копирование старой версии строки происходит в момент изменения строки. Наложение X блокировки ещё ничего не создаёт. Если в этот момент (после наложения блокировки но до фактического изменения) другой транзакции на версионном уровне изоляции понадобилось прочитать это строку, то строка будет прочитана безотносительно к блокировке.
Statistics: Posted by Merle — 01 Dec 2003 12:39
Кстати, интересен вопрос: как можно ощутить, измерить (потрогать) наличие (или отсутствие) версионности, если приложение написано исходя из принципов блокировочника? Не даст ли в этом случае версионность негативного эффекта?
Statistics: Posted by tengiz — 01 Dec 2003 02:04
Statistics: Posted by tengiz — 01 Dec 2003 01:51
Примерно также как и происходит отработка контрольных точек (checkpoints)- по времени или по необходимости, если нет места в tempdb. Нагрузка учитывается - через отслеживание наличия активных транзакций, которым требуются версии.как вообще происходит очистка устаревших версий? Это какой-то процесс который запускается по расписанию?
Копирование старой версии строки происходит в момент изменения строки. Наложение X блокировки ещё ничего не создаёт. Если в этот момент (после наложения блокировки но до фактического изменения) другой транзакции на версионном уровне изоляции понадобилось прочитать это строку, то строка будет прочитана безотносительно к блокировке.Как именно происходит копирование старых версий из базы в tempdb? Может ли возникнуть ситуация при которой пишущая транзакция уже захватила запись на изменение, но зафиксированной копии в tempdb еще не появилось? Как я понял из документации обязанность класть копию записи в tempdb возлагается на изменяющую транзакцию?
Нет, не вступают. Нет, не станет.не вступают ли в конфликт методы оптимизации для версионности и методы оптимизации необходимые для работы с временными таблицами? Не станет ли работа с временными таблицами из-за этого более тяжелой?
Statistics: Posted by tengiz — 01 Dec 2003 01:46
zVlad wrote: В рамках же обсуждаемой темы я вижу один лишь поинт зачем Microsoft это (snapshot) понадобилось - чтобы упростить перевод приложений с Оракл на SQL Server. Разве не так?
Вы многократно и очень убедительно доказывали, что serialazable - есть только цель достойная достижения в теоритическом смысле. Как коммунизм в теории развития общества. Но если коммунизм, по разным причинам, оказался на данном этапе не возможен, то в нашем случае, и без чудес, а просто используя адекватные по мощности сервера и другие компоненты системы можно уже сегодня переводить приложения в режим serializable, обеспечивающий требуемую параллельность.
Statistics: Posted by zVlad — 30 Nov 2003 22:50
Statistics: Posted by Dmitry67 — 30 Nov 2003 19:00
Dmitry67 wrote:Пока вот какой минус. Конечно работал я мало... но... c интерфейсом надо чтото делать То что раньше занимало один клик, теперь целаю проблема.
Statistics: Posted by Dmitry67 — 30 Nov 2003 17:53
zVlad wrote:Tengiz! Положа руку на сердце скажите: есть нынче, на уровне SQL 2000 неразрешимые проблемы конкурентного доступа?..........
Согласен, будет круче, не надо будет вкладываться в образование прикладных программеров, СУБД будет толлерантна ко многим глубостям. Наверное это может согреть сердце девелопера СУБД, но.... как-то противится этому душа DBA-я, работающего "в поле"
Statistics: Posted by zVlad — 30 Nov 2003 15:09
Statistics: Posted by Merle — 30 Nov 2003 13:29
Да, в BOL есть некая неточность...
Statistics: Posted by tengiz — 30 Nov 2003 00:09
Statistics: Posted by Merle — 29 Nov 2003 20:30
Вообще идеальным мне видится вариант, при котором поддержка версий может выставляться не на уровне базы, а на уровне отдельной таблицы.
Statistics: Posted by tengiz — 29 Nov 2003 18:45
Statistics: Posted by tengiz — 29 Nov 2003 18:25
Statistics: Posted by Dmitry67 — 29 Nov 2003 15:46
Statistics: Posted by Merle — 29 Nov 2003 13:16
Поступает запрос: "А столько у нас на данный момент изделий "Ю" имеется на складе?"
Это как раз OLPT проблема. И как Вам здесь поможет OLAP?
Правильной (на мой взгляд) реакцией девелоперов СУБД являются: триггеры и их более понятное для прикладных программеров воплощение - материализованные "примочки". Ну не понимаю я SnapShot Isolation Level!
Statistics: Posted by tengiz — 29 Nov 2003 06:32
Statistics: Posted by tengiz — 29 Nov 2003 06:19
zVlad wrote:А зачем усложнять и гоняться за решениями, которые противоречат естественному ходу вещей в материальной природе и обществе, отражать которые призваны наши системы?
Представьте например ситуацию когда на складе идет приемка новых партии различных единиц хранения и выдача их же. Учет бумажный. Поступает запрос: "А столько у нас на данный момент изделий "Ю" имеется на складе?"
Statistics: Posted by zVlad — 29 Nov 2003 04:50
Statistics: Posted by zVlad — 29 Nov 2003 04:12
Представьте например ситуацию когда на складе идет приемка новых партии различных единиц хранения и выдача их же. Учет бумажный. Поступает запрос: "А столько у нас на данный момент изделий "Ю" имеется на складе?"
Statistics: Posted by tengiz — 29 Nov 2003 02:34
zVlad wrote:Эта проблема решается элементарно репликацией (warehouse, data mart and so on). А также адекватным пониманием того что есть OLAP и что есть OLTP. Я имею в виду когда говорят что мол нужен отчет по всей базе и именно на любой текущий момент времени - то это есть не понимание сути OLAP. Проблема устраняется путем непродолжительной душевной беседы с тем кто этого просит.
Statistics: Posted by zVlad — 28 Nov 2003 22:12