Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
BTW, а зачем вообще Борланд сделал этот RC, если всё и так ладненько было с единственным snapshot'ом ? просто "шоб было как в стандарте" ?
10 окт 12, 20:14    [13298718]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Таблоид
По стандарту стейтмент, стартовавший в RC, должен увидеть все изменения,
зафиксированные другими транзакциями после своего старта ? Да, должен. Ну, и ?

К слову о стандарте:
READ COMMITTED is the default isolation level for SQL Server. It prevents dirty
reads by specifying that statements cannot read data values that have been modified but
not yet committed by other transactions. Other transactions can still modify, insert, or
delete data between executions of individual statements within the current transaction,
resulting in non-repeatable reads, or "phantom" data.

То есть поведение FB вполне стандарту соответствует. Или Ё! опять будет кричать, что
"мартышка не понимает слова "фантом""?..

Posted via ActualForum NNTP Server 1.5

10 окт 12, 20:15    [13298720]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
Нарыл я тут кое-что в 5CD2-02-Foundation-2006-01.pdf, страница 123 (видимая на "листе" PDF), она же 145 по Ctrl-G.
В тексте определено, что может происходить при каждом из уровней изолированности, но в нём нет явно выраженных требований к тому, что НЕ должно происходить (т.е. что запрещено). А главное, там всё упирается в ["добровольное"] перечитывание транзакцией Т1 данных. Но не указано, что она такое перечитывание непременно обязана делать.
5CD2-02-Foundation-2006-01.pdf, pg 145
The isolation level specifies the kind of phenomena that can occur during the execution of concurrent SQL-
transactions. The following phenomena are possible:
1) P1 (“Dirty read”): <... skipped ...>
2) P2 (“Non-repeatable read”): SQL-transaction T1 reads a row. SQL-transaction T2 then modifies or delete that row and performs a COMMIT. If T1 then attempts to reread the row, it may receive the modied value or discover that the row has been deleted.
3) P3 (“Phantom”): <... skipped ...>

Таким обр., Оракл в TIL = RC делает это перечитывание, а ФБ - не всегда (закономерность я не выявил, впрочем). Но повторюсь: не вижу в стандарте утверждения, что такая перечитка обязательна!

К сообщению приложен файл. Размер - 119Kb
10 окт 12, 20:58    [13298859]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 7000
Таблоид,

как обычно, ввечеру ты гонишь. Утром перечитай стандарт и свою писанину.
10 окт 12, 21:05    [13298897]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
dimitr
как обычно, ввечеру ты гонишь. Утром перечитай стандарт и свою писанину.
до утра не дотерплю. Сна не будет, пощади!... Говори прямо сейчас, в чём именно бред ? :-)
10 окт 12, 21:08    [13298914]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
Таблоид
Оракл в TIL = RC делает это перечитывание, а ФБ - не всегда (закономерность я не выявил, впрочем).
а, вижу... поправочку, конечно же, надо: ФБ его не делает. Но и не обязан, насколько я понимаю.
10 окт 12, 21:28    [13298995]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 7000
Таблоид
Говори прямо сейчас, в чём именно бред ? :-)

нет уж, так воспитательного эффекта не будет
10 окт 12, 21:51    [13299111]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Yo.!
Guest
Таблоид
Но повторюсь: не вижу в стандарте утверждения, что такая перечитка обязательна!

и не увидишь, нет там этого требования. стандарт писали под блокировочники полностью проигнорировав версионные уровни и здравый смысл. в стандарте на IL RC требуеться считать лишь закомиченную запись, тот же мсскл на RC может вычитать миллион записей, хотя реальнео в таблице их всего пять, просто пока он читает эти пять записей другие транзакции меняют эту запись так, что она "переезжает" в конец таблицы и стейтмент его читает еще раз. и так миллион раз :-)
лажа ? однозначно, зато полностью в соответствии с ANSI стандартом.

а по примеру ты похоже еще путаешь рестарт, который оракл в таком простом примере не делает. в моем примере оракл по SCN видит, что последний блок таблицы изменился после старта стейтмента. никаких рестартов там не происходит, что бы произошел рестарт более сложный предикат нужно сочинить.

Сообщение было отредактировано: 10 окт 12, 23:51
10 окт 12, 23:00    [13299442]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Yo.!
в моем примере оракл по SCN видит, что последний блок таблицы изменился после
старта стейтмента. никаких рестартов там не происходит

Да-а-а?.. И если в этом изменившемся блоке лежит десять последних записей, включая
свежевставленную, что он будет делать? Неужели телепатически догадается какую из них не
трогать?..

Posted via ActualForum NNTP Server 1.5

10 окт 12, 23:28    [13299551]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Yo.!
Guest
Dimitry Sibiryakov
Да-а-а?.. И если в этом изменившемся блоке лежит десять последних записей, включая
свежевставленную, что он будет делать? Неужели телепатически догадается какую из них не
трогать?..

иди пожуй ! ИТ это совсем не твое.
10 окт 12, 23:32    [13299566]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
Yo.!
делаем IOT таблицу (что бы гарантировать, что пишем в начало и конец)
+
create table shit (id int primary key, a varchar2(20)) organization index;

загоняем туда млн записей начина с ID=2
declare
i int;
begin
for i in 2..1000000
loop
	insert into shit values (i, 'shit-shit-shit-shit') ;
end loop;
end;
сессия1:
update shit set a='updated' where id>0 ;
пока там шуршит

сессия2:
insert into shit values (1,'new') ;
commit;
insert into shit values (1000001,'new') ;
commit;

сколько записей проапдейтит FB ? практически наверняка, проапдейтит 1000001, а 1 оставит нетронутой.
А это... как его... в общем, проверил я в Oracle 11.2.0.3.0 (EE). Результат: он тоже НЕ трогает запись, добавленную в начало таблицы.
DDL:
create table t(id int primary key, f01 number) organization index;
declare
  i number;
begin
  for i in 2..2000000 loop
    insert into t values(i, i/2);
  end loop;
end;
/
create or replace trigger t_bu before update on t 
begin
    dbms_output.put_line('update started at '||current_timestamp);
end;
/

select min(id) min_id, count(*) from t;
table T created.
anonymous block completed
TRIGGER t_bu compiled
MIN_ID COUNT(*)
------ --------
2 1999999


Дальше открываю два sqlplus'a.

session #1
update t set f01=null where id>0; -- Жамкаем Enter, там будет 15-20 сек молотьба

session #2
insert into t values(1, 1000);

1 строка создана.

Затрач.время: 00:00:00.01
commit;

Фиксация обновлений завершена.

Затрач.время: 00:00:00.00

Через примерно 15-20 сек в session #1:
update started at 11.10.12 08:46:21.043752000 +04:00

1999999
строк обновлено.

Затрач.время: 00:00:16.59
select * from t where id=1;

ID F01
---------- ----------
1 1000

Затрач.время: 00:00:00.01

select count(f01),count(*) from t;

COUNT(F01) COUNT(*)
---------- ----------
1 2000000

Затрач.время: 00:00:00.14

ЧЯДНТ ??
11 окт 12, 08:59    [13300288]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Yo.!
Guest
Таблоид,
Конечно не тронул, оракл как и полагается увидел таблицу на момент старта стейтмента. Обе записи появились после
11 окт 12, 09:05    [13300307]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
Впрочем, апдейт в Oracle также "не видит" и такую запись, которая будет добавлена и закоммичена в конец таблицы (в примере выше - с id=2000001).
Я уж забеспокоился, может в serializable работаю, но нет:
X@Y>SELECT s.sid, s.serial#,
2 CASE BITAND(t.flag, POWER(2, 28))
3 WHEN 0 THEN 'READ COMMITTED'
4 ELSE 'SERIALIZABLE'
5 END AS isolation_level
6 FROM v$transaction t
7 JOIN v$session s ON t.addr = s.taddr AND s.sid = sys_context('USERENV', 'SID');

SID SERIAL# ISOLATION_LEVE
---------- ---------- --------------
4 557 READ COMMITTED
11 окт 12, 09:07    [13300315]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
Yo.!
оракл как и полагается увидел таблицу на момент старта стейтмента.
тьфу, не успел я :-)
11 окт 12, 09:09    [13300323]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Таблоид
Member

Откуда:
Сообщений: 9456
Блог
Yo.!
оракл как и полагается увидел таблицу на момент старта стейтмента
Так, хорошо.
А что тогда происходит у него при serializable ? (я понимаю, что это уже совсем не RC, просто интересно: почему ошибка лезет ?)

session #1
set transaction isolation level serializable;

session #2
insert into t values(1,1000);

session #1
update t set f01=null where id>0;

session #2
commit;

session #1
update started at 11.10.12 09:19:13.819510000 +04:00
update t set f01=null where id>0
*
ошибка в строке 1:
ORA-08177: не могу преобразовать в последов.доступ для этой транзакции
11 окт 12, 09:25    [13300382]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Yo.!
Guest
Таблоид
А что тогда происходит у него при serializable ?

это то о чем мы в контексте ROWDEPENDENCIES говорили, оракл заметив что последний блок меняли, перестраховывается. кляуза ROWDEPENDENCIES выставит SCN на каждую запись, тогда поводов перестраховыватся у оракла не будет
11 окт 12, 09:54    [13300497]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
avp_
Member

Откуда:
Сообщений: 123
Народ, решение для FB вполне очевидно - каждый оператор в RC транзакции при старте должен делать "снимок" TIP (как это делается для снапшотов), чтобы использовать этот снимок в процессе своего выполнения. Но это слишком дорого чтобы делать это с каждым оператором по умолчанию.
11 окт 12, 10:13    [13300643]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

avp_
каждый оператор в RC транзакции при старте должен делать "снимок" TIP (как это
делается для снапшотов)

И тут во весь рост встаёт вопрос: а нахрена этот оператор вообще выполняется в RC, если
должен работать "как в снапшоте".

Posted via ActualForum NNTP Server 1.5

11 окт 12, 12:52    [13301802]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
avp_
Member

Откуда:
Сообщений: 123
Dimitry Sibiryakov
И тут во весь рост встаёт вопрос: а нахрена этот оператор вообще выполняется в RC, если
должен работать "как в снапшоте".


Очевидно чтобы в рамках одной транзации RC атомарно выполнить несколько операторов.
Зачем это может быть нужно - хз.
Возможно нужен костыль чтобы нормально работали клиенты которые не замарачиваются менеджементом транзакций.
11 окт 12, 12:58    [13301856]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

avp_
Зачем это может быть нужно - хз.
Возможно нужен костыль чтобы нормально работали клиенты которые не замарачиваются
менеджементом транзакций.

Скорее потому, что "взрослые субд" - простые как горшок: у них транзакция или есть или её
сразу нет. А чтобы сразу было целых две транзакции или даже три - не помещается в их
маленькую головку.

Posted via ActualForum NNTP Server 1.5

11 окт 12, 13:02    [13301896]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
andsm
Member

Откуда: Москва
Сообщений: 1320
Блог
Dimitry Sibiryakov
Таблоид
юзают именно RC, как более способствующий производительности.

С какого бы перепугу? Ты эту "разницу в производительности" мерял?

Мерял на тестовых серверах. На MS SQL Server 2008 разница в производительности между read committed и snapshot составляет примерно 7-10%, для системы с которым я работаю. При этом в случае использования snapshot количество транзакций которые долго выполнялись в несколько десятков раз выше по сравнению с read committed. Система занимается биржевой торговлей, характер нагрузки приложения близок к тестам TPC-E.
Snapshot и read_committed_snapshot у нас на всех OLTP серверах отключены, как раз из-за таких результатов тестов.
Думаю именно из-за того что в спецификации TPC-E прописано что количество долго выполняющихся транзакций не должно быть больше определенного уровня, Оракл не участвует в этих тестах. Вероятно не может обеспечить хорошую производительность так как там невозможно отключить версионность.
11 окт 12, 14:33    [13302727]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Yo.!
Guest
andsm
Мерял на тестовых серверах. На MS SQL Server 2008 разница в производительности между read committed и snapshot составляет примерно 7-10%, для системы с которым я работаю. При этом в случае использования snapshot количество транзакций которые долго выполнялись в несколько десятков раз выше по сравнению с read committed. Система занимается биржевой торговлей, характер нагрузки приложения близок к тестам TPC-E.
Snapshot и read_committed_snapshot у нас на всех OLTP серверах отключены, как раз из-за таких результатов тестов.
Думаю именно из-за того что в спецификации TPC-E прописано что количество долго выполняющихся транзакций не должно быть больше определенного уровня, Оракл не участвует в этих тестах. Вероятно не может обеспечить хорошую производительность так как там невозможно отключить версионность.

я смотрю у некоторых уже пятница наступила
в первом тесте TPC-E майкрософт пыталась без версионности пройти, но похоже нихера не вышло, пришлось майкрософту включать SNAPSHOT и все тесты в TPC-E сделаны с включенной версионностью.
11 окт 12, 15:02    [13302976]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
andsm
Member

Откуда: Москва
Сообщений: 1320
Блог
Yo.!
в первом тесте TPC-E майкрософт пыталась без версионности пройти, но похоже нихера не вышло, пришлось майкрософту включать SNAPSHOT и все тесты в TPC-E сделаны с включенной версионностью.

Проверил, действительно используется уровень snapshot. Вероятно не смогли решить проблему с консистентностью данных, у нас решение этой проблемы тоже заняло немало времени.
Но все же это не отменяет того, что при решении проблемы консистентности версионность в OLTP системах можно использовать только там, где нет требований к времени прохождения транзакций.
11 окт 12, 15:35    [13303288]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Yo.!
Guest
andsm
Но все же это не отменяет того, что при решении проблемы консистентности версионность в OLTP системах можно использовать только там, где нет требований к времени прохождения транзакций.

вам бы проспаться. крупнейшие OLTP системы мира крутятся на версионном оракле. посмотрите TPC-C. уж тут то вроде блокировочным режимам все карты в руки, мелкие транзакции, транзакции не сталкиваются друг с другом. казалось бы идеальные условия для блокировочников и сплошные неудобства ораклу с его консистентным RC и расходами на UNDO. но в тестах, чего то стабильно заруливает версионный оракл, а не блокировочники
http://oraclemind.blogspot.com/2006/11/tpc-c-oracle-10-vs-mssql2k5.html
11 окт 12, 15:45    [13303379]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше FireBird 2.1 или MS SQL 2000?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

andsm
это не отменяет того, что при решении проблемы консистентности версионность в
OLTP системах можно использовать только там, где нет требований к времени прохождения
транзакций.

Не забывай добавлять "на MS SQL 2008". От их способа реализации версионности через
жопу tempdb ничего другого ожидать и не приходится.

PS: Слова "консистентность" и "Read Committed" в одном предложении вообще звучат смешно.

Posted via ActualForum NNTP Server 1.5

11 окт 12, 15:46    [13303386]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить