powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Размер БД 10 Gb
65 сообщений из 65, показаны все 3 страниц
Размер БД 10 Gb
    #32333463
Artem V.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какую СУБД посоветуете выбрать?
Ключевые критерии:
- цена
- надежность
- производительность
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32333470
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Ключевые критерии

ты уж опрeделись.

вся первая пятерка баз этим условиям удовлетворяет.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32333504
Фотография KiLLun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIREBIRD/INTERBASE
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32333574
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2KiLLun Сообщений: 298 FIREBIRD/INTERBASE

на 10 Tb ? я даже про 1Tb на ней не слышал
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32333612
Denis A.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik

10 Гб, а не 10 Тб. Если данные меняющиеся - Interbase умрет тихой смертью со своей версионностью. MSSQL или Oracle.

И как говорят - выбирайте любые два пункта.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32333635
student_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
количество транзакций и тд и тп ?
под какое железо и тд и тп ?
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32333644
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sybase ASA. Дешево, надежно и производительно.

Если хочешь что-то совсем бесконечно масштабируемое, то бери ДБ2.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32333671
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSSQL 2000 или Sybase ASA 9. В обоих случаях получится дешевое, производительное и надежное решение, плюс для каждой из СУБД свои навороты и расширения, смотреть надо под конкретные условия эксплуатации.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32333674
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sybase ASA 9 справится.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32333694
Фотография Владимир П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interbase умрет тихой смертью со своей версионностью

Oracle, который Вы рекомендуете, тоже версионник.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32333729
Фотография Markelenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, есть СУБД, у которых версии не меняются?
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32333797
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело не в версиях СУБД. Просто есть версионники, есть блокировочники, каждые имеют свои преимущества и недостатки.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32334187
Фотография KiLLun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Lepsik

Многофайловая БД может состоять из 65535 файлов, таким образом теоретический предел для одной базы данных IB - 132 терабайта.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32334190
Фотография KiLLun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все таки если ключевой критерий ЦЕНА то однозначно FB

Be Well...
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32334548
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10 Гб, а не 10 Тб. Если данные меняющиеся - Interbase умрет тихой смертью со своей версионностью. MSSQL или Oracle.

Иногда лучше жевать, чем говорить. Как могут быть связаны версионность и размер базы. Похоже на зависимость соленого от длинного.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32334719
Denis A.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир П.
Oracle позиционируется и применяется как промышленная СУБД именно для немаленьких БД.

У Interbase ядро неправильное, его удел - небольшие автономные БД, не требующие обслуживания, с небольшим количеством юзеров и небольшими изменениями в БД.

aston
При частом изменении записей плодяца версии записей, а IB хранит измененные записи именно как дельты от предыдущего состояния. При частом изменении записей дельт накапливается много и снижается производительность, порой значительно.


Кстати количество пользователей и другие требования до сих пор не оглашены. Быть может mysql подойдет в плане исключительно selectов =) он и бесплатный к тому же =)
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32334727
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Interbase ядро неправильное, его удел - небольшие автономные БД, не требующие обслуживания

я конечно ничего плохого сказать не хочу :-)
но мне это нравится :-) если бд нетребует обслуживания, значит у него ядро не правильное :-)
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32334738
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу сказать про IB, что в силу ряда причин его код долгое время не развивался, только косметика навешивалась. Что касается InterBase 7.1, так говорят, что он там невиданные чудеса производительности показывает и ядро сервера там так переколбасили, что мало не покажется...

А если не нравиться FB, посмотри в сторону Postgres. Он тоже версионник и буквально вчера я читал по нему доки - там очень много всяких вкусностей и он бесплатный.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32334840
f_w_p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При частом изменении записей плодяца версии записей, а IB хранит измененные записи именно как дельты от предыдущего состояния. При частом изменении записей дельт накапливается много и снижается производительность, порой значительно.
Дельта уничтожается при закрытии транзакции ее породившей. Поэтому о накоплении можно говорить только при очень длинных транзакциях.
Другое дело, что при удалении версий образуются дырки, которые убираются сжатием БД. Впрочем как-то читал статью о повышении производительности IB именно на использовании дырок.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32334849
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Denis A.

автор писал:При частом изменении записей плодяца версии записей, а IB хранит измененные записи именно как дельты от предыдущего состояния. При частом изменении записей дельт накапливается много и снижается производительность, порой значительно

Это не совсем так.
Я бы посоветовал вам почитать вот это : http://www.ibase.ru/devinfo/oitoat.htm
(про транзакции, версионность и сборку мусора в interbase).
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32334864
vic123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А 10 Gb чего и в чем? 10 000 000 записей в 10 000 таблиц или 10 картинок по 1 Gb? Отсюда выбирай БД. А то разговор ни о чем.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32334899
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis A.

f_w_p Вам уже вкратце ответил.
От себя добавлю, что как версионники, так и блокировочники на типовых задачах (коих большинство) покажут примерно одинаковую производительность.

Преимущества архитектуры сервера проявляетя в:
очень жесткий OLTP (от 1 тыс. транзакций в секунду) - блокировочник будет явно предпочтительнее, так как выгодней будет потратить ресурсы на блокировки, чем на операции по записи версий в блоки данных;

OLAP или преоблдание ad-hoc запросов - версионник рулит, так как версии не плодятся вообще.

З.Ы. Здесь кто-то обозвал Oracle версионником. IMHO, это не совсем так. Он, по сути дела, все таки нечто среднее между версионником и блокировочником.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32334957
Фотография Владимир П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle версионник, т.к. блокировка возникает только при одновременном обновлении одной и той же строки. Читатели не блокируются писателями и наоборот. И какая разница: сохраняет он в специальной структуре новые версии строк или старые?
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32335000
Denis A.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
Ключевое слово - небольшие.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32335050
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Владимир П.

автор писал:Oracle версионник, т.к. блокировка возникает только при одновременном обновлении одной и той же строки. Читатели не блокируются писателями и наоборот.

Логичнее сказать что Oracle "не блокировочник". Об остальном можно говорить после того, как кто-нибудь запостит сюда каноническое определение "что такое версионник".

--
Хотя я тоже склонен считать его версионником...
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32335136
xz321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aston писал:
OLAP или преоблдание ad-hoc запросов - версионник рулит, так как версии не плодятся вообще.


Muzhik, ty sam ponyal chto skazal??? Eto zhe warehouse => pochti read only.
DB2 EEE, Informix XPS, Teradata.

Ad-hoc query??? Oracle optimizer is not so good as DB2 or Teradata...

P.S. Sorry for English
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32335528
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир П.

Oracle версионник, т.к. блокировка возникает только при одновременном обновлении одной и той же строки. Читатели не блокируются писателями и наоборот. И какая разница: сохраняет он в специальной структуре новые версии строк или старые?

T1 -> SELECT SomeField FROM SomeTabe FOR UPDATE
...
T2 -> SELECT SomeField FROM SomeTabe FOR UPDATE
или
T2-> UPDATE SomeTable SET SomeField=NewValue
...

Обе транзакции читающие (по крайней мере, пока). T2 ждет на блокировке, причем на самой сильной - X блокировке, хотя и зря, можно было бы наложить более уместную в этом случае S блокировку - но это уже другая тема. Так что все-таки зачатки блокировочника имеются.

xz321

Я писал - "..преобладание ad-hoc запросов", что вовсе не означает, что нужно городить DataWarehouse. К тому же OLAP запросы в Oracle можно получать на рабочей базе, а не выносить всю аналитику в хранилище - сказывается больший уклон в сторону версионника - ему такое по плечу. Вот делать OLAP на рабочей базе или гнать много ad-hoc запросов на чистом блокировочнике не рекомендуется, так как блокировки являются ресурсом , причем конечным. Поэтому разумным решением для OLAP на блокировочнике - вынести всю аналитику на отдельный сервер, так как with nolock не всегда использовать уместно, а использовать Dirty Read просто опасно.

Ad-hoc query??? Oracle optimizer is not so good as DB2 or Teradata...

Перед таким высказыванием обычно ставят - "IMHO" или "по данным таких-то источников...".
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32335967
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 aston

автор писал:T1 -> SELECT SomeField FROM SomeTabe FOR UPDATE
...
T2 -> SELECT SomeField FROM SomeTabe FOR UPDATE
или
T2-> UPDATE SomeTable SET SomeField=NewValue
...
Обе транзакции читающие (по крайней мере, пока).

На лицо типичная подмена понятий... SELECT FOR UPDATE специально предназначен для блокирования записей и говорить, что это просто читающая транзакция (и при этом осознанно блокировать записи) не корректно. С таким-же успехом можно заблокировать всю таблицу с помошью LOCK TABLE, и также наивно заявить - "Обе транзакции читающие (по крайней мере, пока)"
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32336024
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Zaxx.

Не все так просто, как кажется.
Итак, поехали.

SELECT FOR UPDATE нужен для того, чтобы обеспечивать упорядоченность транзакций, т.е. с помощью него реализуется уровень изоляции SERIALIZABLE.

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

Цитата из документации по Oracle:
.../appdev.920/a96590/adg08sql.htm#15057

"...Because Oracle does not use read locks, even in SERIALIZABLE transactions, data read by one transaction can be overwritten by another. Transactions that perform database consistency checks at the application level should not assume that the data they read will not change during the execution of the transaction (even though such changes are not visible to the transaction). Database inconsistencies can result unless such application-level consistency checks are coded carefully, even when using SERIALIZABLE transactions..."

Полную версию описания данного явления читайте "Oracle9i Application Developer's Guide - Fundamentals
Release 2 (9.2) chapter 7 How Oracle Processes SQL Statements".

Ключевое поняте здесь - database consistency checks at the application level.
Т.е. когда не используются констрэйнты, а вся логика лежит на клиенте.

Рассмотрим теперь эти 2 архитектуры построения приложений с точки зрения обработки клиентских вызовов:

если используется SERIALIZABLE и consistency checks at the application level:
от клиента получаем данные, сравниваем их с чем нибудь, выполняя SELECT FOR UPDATE (а иногда и вовсе LOCK TABLE - да, да - может и так), проверяем данные - если они правильные - то записываем данные и коммитим транзакцию, если нет - то отправляем сообщение об ошибке клиенту; конкурирующие транзакции при этом ждут на блокировке;


если испольуются констрэйнты - то просто отправляем данные в базу и если они нарушают ограничения целостности, получаем RAISE и отфутболиваем транзакцию - самый очевидный, распространенный и простой вариант.

Так вот, первый вариант при очень большом количестве транзакций иногда будет предпочтительнее, так как дешевле проверить данные "вручную" и подержать на блокировках конкурирующие транзакции, а не получать RAIS'ы. Именно в таких ситауциях чистые блокировочники (MSSQL, DB2) имеют потенциальное преимущество, потому что их LockManager'ы, в зависимости от степени загрузки сервера, анализа конкурирующих запросов к страницам данных, селективности индексов могут динамически управлять блокировками - реализовывать т.н. эскалацию блокировок вплоть до полного LOCK TABLE, к тому же могут накладывать т.н. S-блокировки, что повышает concurrency, а Oracle накладывает только X блокировки - но все равно позволяет вести себя как блокировочник.

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

Уф. Вроде бы все.
Спасибо за внимание.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32336070
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 aston

автор писал:SELECT FOR UPDATE нужен для того, чтобы обеспечивать упорядоченность транзакций, т.е. с помощью него реализуется уровень изоляции SERIALIZABLE.

Это не так. SELECT FOR UPDATE нужен чтобы заблокировать нужные записи в таблице (причём иного способа это сделать нету).

автор писал:Данный уровень изоляции необходим тогда, когда согласованность базы данных проверяется на уровне приложения.

Для чего он нужен я прекрастно знаю и использую. Но SELECT FOR UPDATE тут не причём. SERIALIZABLE включается путём : ALTER SESSION SET ISOLATION_LEVEL=SERIALIZABLE или set transaction isolation level serializable.

автор писал:Цитата из документации по Oracle:
.../appdev.920/a96590/adg08sql.htm#15057

Это к "SELECT FOR UPDATE" вообще отношения не имеет.

автор писал:...если используется SERIALIZABLE и consistency checks at the application level: от клиента получаем данные, сравниваем их с чем нибудь, выполняя SELECT FOR UPDATE (а иногда и вовсе LOCK TABLE...

В SERIALIZABLE - режиме НЕ ИМЕЕТ СМЫСЛА лочить записи или всё таблицу, если вы боитесь, что кто-то изменить ваши данные, которые вы выбрали предыдущим select-ом. База данных гарантирует НЕПРОТИВОРЕЧИМОСТЬ данных по чтению в течении всей вашей транзакции от первого select (без всякого "for update") до последнего commit (даже если между этими событиями другая сессия изменила интересующие вас записи), если установлен SERIALIZABLE - режим.

Иногда в SERIALIZABLE - режиме вы можете получить - ORA-08177: can't serialize access. Тогда Rollback и начинаем снова...

автор писал:если испольуются констрэйнты - то просто отправляем данные в базу и если они нарушают ограничения целостности, получаем RAISE и отфутболиваем транзакцию - самый очевидный, распространенный и простой вариант.

При чём тут SELECT FOR UPDATE ? Причём тут SERIALIZABLE ?

автор писал:к тому же могут накладывать т.н. S-блокировки, что повышает concurrency, а Oracle накладывает только X блокировки - но все равно позволяет вести себя как блокировочник.

Oracle тоже может накладывать S-блокировки...и что ? А X-блокировки oracle без вашего вмешательства с "select for update" тоже просто-так накладывать не будет.

автор писал:Oracle все же способен их покрывать, действуя при этом как блокировочник, хотя и с некоторыми оговорками.

Не нужно ему действовать как блокировочнику...безо всяких оговорок!
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32336071
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
Про S-блокировки, у оракла на пару порядков меньше блокировок и имеено поэтому такого смысла как в блокировочнике не видит (бонус слишком мал). Тем кому все же такое нужно есть пакет DBMS_LOCK и пользовательские блокировки... но не знаю кто таким пользуется.
Про эскалацию, она вообще нафиг нужна, т.к. влияет на конкуренси, что четко видно на тестах tpc-c, т.е. это говорит о том что эскалация как минимум съедает все расходы оракла на хранение в файлах данных.
плюс системы редко чистое OLPT или OLAP, у обычных смертных это смешаные ... вот именно тогда версионность реально рулит.
В Юконе грят уже будет версионность (snapshot), интересно какой режим выберут большинство через пару лет, а главное почему :)
Пророчество: след битва RAC vs федеративный кластер :)

Gt_
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32336257
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zaxx

автор писал:Это не так. SELECT FOR UPDATE нужен чтобы заблокировать нужные записи в таблице (причём иного способа это сделать нету).

Я бы сказал так: SELECT FOR UPDATE необходим для того, чтобы заблокировать нужные записи в таблице чтением . Поймите, выполнение SELECT FOR UPDATE не означает, что мы будем менять данные, а означает, что мы " может быть будем менять данные, но нам необходимо, чтобы все транзакции отвечали бы критерию упорядоченности" и для этого просим заблокировать запись.
В этом случае это эквивалентно обычному SELECT на блокировочнике. То же можно сказать в обратную сторону - SELECT ... WITH NOLOCK на блокировочнике с оговорками примерно соответствует обычному SELECT на версионнике. Что и требовалось доказать – ORACLE может вести себя как блокировочник . Другое дело, что чистый блокировочник на определенном круге задач способен реализовать блокировки и concurrency более эффективно, так как присутствует полноценный LockManager и, следует честно признаться, весьма продвинутый (MSSQL, DB2).


автор писал:Для чего он нужен я прекрастно знаю и использую. Но SELECT FOR UPDATE тут не причём. SERIALIZABLE включается путём : ALTER SESSION SET ISOLATION_LEVEL=SERIALIZABLE или set transaction isolation level serializable.

Фишка в том, что не надо включать этот режим изоляции явно или такой режим не всегда нужен в пределах сессии, а эмулировать его средствами приложения, чтобы не получать …
автор писал:Иногда в SERIALIZABLE - режиме вы можете получить - ORA-08177: can't serialize access. Тогда Rollback и начинаем снова...
Потому как всегда писать в базу, наталкиваться на констрэйнты, получать exception и заново накатывать транзакцию не всегда бывает дешевле - иногда лучше подержать конкурентов на блокировках.

автор писал:Это к "SELECT FOR UPDATE" вообще отношения не имеет.

Советую вам все-таки прочитать этот раздел документации от начала до конца .

автор писал:При чём тут SELECT FOR UPDATE ? Причём тут SERIALIZABLE ?

Констрэйнты гарантируют согласованное состояние базы. С помощью SELECT FOR UPDATE тоже можно обеспечить согласованное состояние без увлечения констрэйнтами (например, при обеспечении согласованности с удаленной базой или еще каким-нибудь внешним хранилищем) и transisolation level. Как я уже сказал - это нетипичное поведение, но такие ситуации бывают, где SELECT FOR UPDATE будет предпочтительнее – но это типичное поведение блокировочника, когда читатель получил ресурс и заблокировал писателя.

автор писал:Oracle тоже может накладывать S-блокировки...и что ? А X-блокировки oracle без вашего вмешательства с "select for update" тоже просто-так накладывать не будет


S-блокировки в Oracle можно наложить только с помощью LOCK TABLE – но это на всю таблицу. При управлении блокировками на уровне строк, для чего и служит SELECT FOR UPDATE – он всегда накладывает только X блокировку. Попробуйте:
T1 - > SELECT SomeField FROM SomeTable WHERE ID=1 FOR UPDATE
T2 - > SELECT SomeField FROM SomeTable WHERE ID=1 FOR UPDATE
Вторая транзакция стоит на блокировке, т.е. T1 получила ресурс в режиме eXclusive. Заметьтьте, T2 не пыталась обновить данные, она лишь запросила блокировку. Если бы была наложена более уместная Shared блокировка, то SELECT FOR UPDATE во второй транзакции прошел бы без проблем и на блокировку бы она натолкнулась только тогда, когда стала записывать данные. Но не факт, что у T2 возникла бы потребность изменять данные после SELECT FOR UPDATE. За счет этого в некоторых случаях здорово можно выиграть в скорости – потому что часть транзакций типа T2, которые отказывались бы от записи в базу, могли бы не стоять на блокировках.

Эмулирование S-блокировок на уровне строк можно реализовать, используя пакет DBMS_LOCK (причем даже более продвинутые, так как можно наложить блокировку в одной транзакции, а снять в другой), но это эмулирование , следовательно, проигрыш в скорости обязательно будет, т.к. переключение между SQL и PL/SQL engine не дается даром.


автор писал:Не нужно ему действовать как блокировочнику...безо всяких оговорок!

Нет, ну все-таки нужно перед такими утверждениями ставить “IMHO” и попытаться обстоятельно объяснить в доступной форме свою позицию.

З.Ы. По моему, все движется к тому, что в версионники будут добавляться фичи блокировочников и наоборот. Вон недавно Oracle10 ходил в лидерах по tpc-с, IMHO наверное, за счет более продвинутого механизма блокировок – в жестком OLTP они реально могут дать прирост. Говорят, и грядущий Yukon будет «не совсем чистым» блокировочником. Однако это пока только слухи - время покажет. Ждем полной официальной документации по Oracle10 и релиза Yukon.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32336356
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Aston

автор писал:Я бы сказал так: SELECT FOR UPDATE необходим для того, чтобы заблокировать нужные записи в таблице чтением.

Повторюсь: Oracle не блокирует записи чтением. НИКОГДА. SELECT FOR UPDATE необходим для того, чтобы заблокировать нужные записи в таблице БЛОКИРОВАНИЕМ.
Вы сами, намеренно ставите X-блокировку и заявляете, что Oracle неэффективно управляет блокировками. LockManager в M$SQL естественно будет управлять блокировками эффективней чем программист, который где попало накладывает X-блокировки.

автор писал:ORACLE может вести себя как блокировочник
Без вашего вмешательства это не проявляется.
Блокировочник блокирует по чтению. Чтение это SELECT (без "for update").

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

Вы предлагаете есть суп вилками, при наличии ложек. При этом вы ссылаетесь на то, что соседи едят кашу вилками намного эффективнее, чем мы вилками едим суп. Возьмите наконец ложку. SERIALIZABLE - режим позволит вам получить непротиворечивость гораздо эффективнее чем блокировки.

автор писал:Констрэйнты гарантируют согласованное состояние базы. С помощью SELECT FOR UPDATE тоже можно обеспечить согласованное состояние без увлечения констрэйнтами

Не надо сюда ещё констрэйнты впутывать. Без них уже не разгрести. Согласованное состояние далеко не всегда можно обеспечить констрейнтами. Констрейнт работает на уровне одной записи, а условие согласованности может быть быть гораздо сложнее, на уровне набора записей или наборов записей в нескольких таблицах.

автор писал:Как я уже сказал - это нетипичное поведение, но такие ситуации бывают, где SELECT FOR UPDATE будет предпочтительнее – но это типичное поведение блокировочника, когда читатель получил ресурс и заблокировал писателя.

читатель НЕ получил ресурс, а намеренно заблокировал ресурс.
Как я уже сказал это поведение не Oracle, а поведение программиста. Наличие в Oracle различных средств наложения блокировок не делает Oracle блокировочником. Даже если блокировка действительно необходима и иного выбора у программиста не было и это было самое эффективное и производительное решение, это решение программиста. И Oracle от этого блокировочником не становиться.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32336471
xz321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dear, aston

You say what locks is limited resources. Additional pages in Oracle is not limited resources??? Create 1 new page (block 4K) data in oracle is aproximate 113 row locks in DB2 or MSSQL. And for increase concurency you need decrease amount of data on you page. This mean you table get more space. This mean what you shoud have more I/O... May this limit for you resources may be not. But on server with pessimistic model of processing transaction you also can have good perfomance on mixed workloads. Who recomend you not run mixed workload on DB2, Informix, MSSQL??? About optimizer. When Oracle released they own cost based optimiser and when IBM with Teradata????

P.S. Sorry for english?
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32336486
xz321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32336621
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 xz321

>About optimizer. When Oracle released they own cost based optimiser and when IBM with Teradata????

Типа, чья религия древнее, та и истинная ? Арбалет тоже древнее чем снайперская винтовка... Да и догонять всегда легче, чем изобретать с нуля.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32336920
xz321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здесь нет никакой религии. Достаточно понять что IBM по патентам далеко впереди.
А если учесть что патенты Informix перешли к IBM.

http://www-3.ibm.com/software/data/highlights/db2innovation/patents.html
http://www.crn.com/Sections/BreakingNews/dailyarchives.asp?ArticleID=32502
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32336954
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
а если чуть подумать и вспомнить Alpha ?

все решает маркетинг, м$ красиво это показывет.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337012
xz321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю как в России, но здесь в Германии у IBM c этим все в порядке.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337165
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zaxx

Ну вот, уже какой-то прогресс есть. Вопросы с chapter 7 How Oracle Processes SQL Statements сняты, вопросы о том, может ли Oracle накладывать S-блокировки тоже. Идем дальше.


автор писал:Повторюсь: Oracle не блокирует записи чтением. НИКОГДА. SELECT FOR UPDATE необходим для того, чтобы заблокировать нужные записи в таблице БЛОКИРОВАНИЕМ

При этом получив значения полей чтением. Вы не поверите, но это и есть типичное поведение классического блокировочника. Только блокировочник он на то и блокировочник, что не нужно указывать в конце FOR UPDATE.

автор писал:Вы сами, намеренно ставите X-блокировку и заявляете, что Oracle неэффективно управляет блокировками.

Я его прошу поставить блокировку FOR UPDATE, а то, что Oracle ставит X-блокировку вместо более уместной в этом случае S-блокировки - и есть основание, которое позволяет мне усомниться в эффективности реализации блокировок.

автор писал: автор писал:
ORACLE может вести себя как блокировочник

Без вашего вмешательства это не проявляется.
Блокировочник блокирует по чтению.

Но если я вмешаюсь - он будет вести себя как блокировочник , что и дает мне основание утверждать, что он все-таки гибрид. Вот MSSQL не заставишь никакими средствами вести себя как версионник - следовательно - он чистый блокировочник.

автор писал:Чтение это SELECT (без "for update").
SELECT FOR UPDATE - это чтение и блокирование. Ну согласитесь - данные то я все-таки считываю. Написав SELECT FOR UPDATE, мы говорим Oracle: прочитай нам данные, но поступи как блокировочник.


автор писал:SERIALIZABLE - режим позволит вам получить непротиворечивость гораздо эффективнее чем блокировки.
По этому поводу я уже высказывался - не факт - возбуждение исключения, лишний rollback(особенно) и накат транзакций - штука по меркам БД весьма не дешевая.

Про констрэйнты поскипано.


автор писал:читатель НЕ получил ресурс, а намеренно заблокировал ресурс.
Ну ладно, обзовем это не ресурсом, а данными. Но он их все-таки прочитал.


автор писал:Как я уже сказал это поведение не Oracle, а поведение программиста. Наличие в Oracle различных средств наложения блокировок не делает Oracle блокировочником. Даже если блокировка действительно необходима и иного выбора у программиста не было и это было самое эффективное и производительное решение, это решение программиста. И Oracle от этого блокировочником не становиться.


Никто и не говорит, что он блокировочник - он, как я уже говорил, IMHO - гибрид. В зависимости от желания программиста он может вести себя как версионник (в подавляющем большинстве случаев реальной практики), так и (в нужные программисту моменты) как блокировочник (ведь приемы и методы те же).

Не следует считать все мое словоблудие как наезд на Oracle. Я лишь пытаюсь изложить свое мнение насчет того, является ли Oracle чистым версионником. IMHO - чистым не является. И именно за счет этого при прочих равных я считаю его на данный момент времени лучшим СУБД (эх, ему бы еще S-блокировки - тогда вообще монстрюга).


xz321

автор писал:You say what locks is limited resources. Additional pages in Oracle is not limited resources??? Create 1 new page (block 4K) data in oracle is aproximate 113 row locks in DB2 or MSSQL. And for increase concurency you need decrease amount of data on you page. This mean you table get more space. This mean what you shoud have more I/O... May this limit for you resources may be not. But on server with pessimistic model of processing transaction you also can have good perfomance on mixed workloads.

Честно говоря, я не совсем основательно подкован в вопросе, как Oracle хранит блокировки, но пользуясь недолгими, но утомительными выкладками, умозаключаю:раз Oracle хранит блокировки в блоках данных (насколько я помню - в заголовках), т.е. вместе с данными, то получается, что ивлекая данные, он всегда знает - заблокированы они или нет. Если заблокированы- он достает данные из сегмента отката (в чистом SELECT, без FOR UPDATE). Таким образом блокировка в Oracle является практически неисчерпаемым ресурсом - ограничением является только размер доступной физической памяти на винтах. Хотя вы правы в том, что присутствуют дополнительные I/O-операции. Но никогда, понимаете, никогда я не видел, когда при длинных транзакциях в Oracle росло потребление памяти и заметно падала производительность. За подробностями остылаю к Тому Кайту.

Как хранит блокировки, к примеру, MSSQL - там это отдельная структура в памяти , где каждая блокировка занимает X байт. Следовательно, чем длиньше транзакции, тем больше блокировок - тем меньше памяти. Эффект видел своими глазами. Ресурс исчерпаемый. Поэтому в блокировочниках длинные большие транзакции - вред.

Если чего перемудрил - знающие люди поправят.


автор писал:Who recomend you not run mixed workload on DB2, Informix, MSSQL???
Жизнь. На MSSQL приходится выносить аналитические данные в суррогатные аггрегирующие таблицы или вьюхи, для того, чтобы понизить concurrency cost.

автор писал:About optimizer. When Oracle released they own cost based optimiser and when IBM with Teradata????
Вам самому не смешно?

автор писал:Regarding TPC-C and what Oracle have more good locking model
Я не считаю, что Oracle имеет more good locking model. Напротив, здесь есть над чем работать.
Насчет тестов TPC - IMHO, это маркетинг (кто платит-то за эти тесты), лишь косвенно отображающий потребительские достоинства СУБД. К тому же это соревнование не только софта, но и железа.

Спасибо за внимание.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337197
Gt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt_
Гость
Я его прошу поставить блокировку FOR UPDATE, а то, что Oracle ставит X-блокировку вместо более уместной в этом случае S-блокировки - и есть основание, которое позволяет мне усомниться в эффективности реализации блокировок.

SELECT FOR UPDATE - это чтение и блокирование. Ну согласитесь - данные то я все-таки считываю. Написав SELECT FOR UPDATE, мы говорим Oracle: прочитай нам данные, но поступи как блокировочник.


1. еще раз FOR UPDATE не блокирует читателей, это не X блокировка MSSQLа ! поэтому кол-во блокировок ГОРАЗДО меньше и необходимости ставит S на порядок меньше.

2. если нужно читать согласовано есть read only transaction
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337199
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 aston

автор писал:Вопросы с chapter 7 How Oracle Processes SQL Statements сняты

У меня по этому поводу вопросов и не было. Вы эту ссылку как я уже говорил не по делу засунули.

автор писал:При этом получив значения полей чтением. Вы не поверите, но это и есть типичное поведение классического блокировочника. Только блокировочник он на то и блокировочник, что не нужно указывать в конце FOR UPDATE.

Опять началось... Вы же сами признаёте что "блокировочник он на то и блокировочник, что не нужно указывать в конце FOR UPDATE".
Блокировочник блокирует по ЧТЕНИЮ. Оракл этого не делает.

Вообще мне это старый анекдот напоминает:
процесс над самогонщиком.
Судья:
- Подсудимый! У вас был обнаружен самогонный аппарат?
Подсудимый:
-Да.
Судья:
- Вы гнали самогон?
Подсудимый:
- Нет.
Судья:
- Но у вас же был аппарат - значит гнал!
Подсудимый:
- Тогда судите меня еще за изнасилование.
Судья:
- Вы кого-нибудь изнасиловали?
Подсудимый:
- Нет, но АППАРАТ имеется!

Вот и у вас так. Блокировать умеет - значит блокировочник.

автор писал:Я его прошу поставить блокировку FOR UPDATE, а то, что Oracle ставит X-блокировку вместо более уместной в этом случае S-блокировки

Кстати, а вы уверены что это именно X-блокировка ? Что вы понимаете под X-блокировкой ? Exclusive lock ?

Select for update накладывает такую-же row-level lock как и обычный UPDATE или DELETE. Это не exclusive, а share lock который допускает SELECTы от других сессий и запрещает им менять заблокированные записи. Если это Х-блокировка, то чем она вас не устраивает / какую вы хотите ?

--
Совет: Выгоните всех юзеров из базы, "чтобы все транзакции отвечали бы критерию упорядоченности" и, исходя из принципа "АППАРАТ имеется", с полным правом заявляйте в форуме, что Oracle ведёт себя как однопользовательская СУБД.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337406
Фотография Владимир П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любой, даже версионник, блокирует запись при ее обновлении.
Иногда бывает нужно запретить изменение открытой одним пользователем записи другими пользователями, чтобы подготовить эту запись для будущего изменения.
Можно так:

UPDATE tab
SET id=id
WHERE id= :id_текущей_записи.

Чтобы избежать такого уродства, в Oracle введен синтаксис SELECT ... FOR UPDATE. Назначение и поведение у такого запроса то же, что у псевдообновления, приведенного выше. И это не делает Oracle менее версионным, чем другие версионные БД.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337433
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zaxx

... поскипано, поскольку это уводит нас от темы.

автор писал:Вот и у вас так. Блокировать умеет - значит блокировочник.

Скажем так, он может вести себя как блокирововчник. Но это не значит, что он блокировочник - он гибрид.

автор писал:Кстати, а вы уверены что это именно X-блокировка ? Что вы понимаете под X-блокировкой ? Exclusive lock ?

Да

автор писал:Select for update накладывает такую-же row-level lock как и обычный UPDATE или DELETE.

Да. А зря.

автор писал:Если это Х-блокировка, то чем она вас не устраивает / какую вы хотите ?

Я хочу S-блокировку. Поясню на абстрактном примере.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE PROCEDURE Foo(AID IN NUMBER, AValue IN NUMBER)
DECLARE
  var1 NUMBER;
BEGIN
  SELECT SomeField
  INTO var1
  FROM SomeTable
  WHERE ID=AID
  FOR UPDATE;

  IF AValue != var1 THEN
    UPDATE SomeTable SET SomeField = AValue WHERE ID=AID;
  END IF;
END;

Данные в SomeTable
ID SomeField
---- ---------
1 1
2 2

T1 -> Foo(1, 2) --not commuted
T2 -> Foo(1, 1) --not commited

T2 стоит и ждет на блокировке, т.е. на SELECT FOR UPDATE. Но процедура с параметрами, как в T2, никогда бы не произвела UPDATE. Соответственно, пока выполняется T1, Т2 вполне могла бы не стоять на блокировке и ждать завершения Т1. А по логике же, надо, чтобы она вошла в блокировку в том случае, если 2-ой параметр был бы не равен 1 и не в SELECT FOR UPDATE, а при UPDATE. Зачем забирать строку в монопольное пользование, если нет уверенности в том, что она все таки будет изменена. Вот при изменении и возникла бы блокировка. А тут на тебе, X блокировка и никаких вариантов.

Пример, как говорится, абстрактный, но показывает, что во время SELECT FOR UPDATE нелья быть уверенным в том, что в дальнейшем потребуется изменение.


автор писал:...с полным правом заявляйте в форуме, что Oracle ведёт себя как однопользовательская СУБД.

Сбавьте тон и перечитатйте мои посты - я такого нигде не заявлял.


Владимир П.

автор писал:Любой, даже версионник, блокирует запись при ее обновлении.
Разумеется. Вот при обновлении и нужна X-блокировка, но не при запросе блокировки.

автор писал:Иногда бывает нужно запретить изменение открытой одним пользователем записи другими пользователями, чтобы подготовить эту запись для будущего изменения.
Все правильно. Но если при SELECT FOR UPDATE еще не известно, будет ли обновляться запись. См. пример.

автор писал:Чтобы избежать такого уродства, в Oracle введен синтаксис SELECT ... FOR UPDATE. Назначение и поведение у такого запроса то же, что у псевдообновления, приведенного выше

Ну, я сильно сомневаюсь в этом. Для исключения уродства можно было ввести конструкцию типа
Код: plaintext
LOCK INTO SomeTable WHERE SomeField=SomeValue 
- зачем данные то извлекать.

SELECT FOR UPDATE - это чтение и запрос блокировки . Первое и второе равноправны. И это типичное поведение блокировочника.


автор писал:И это не делает Oracle менее версионным, чем другие версионные БД.

Разумеется - кто то утверждал обратное? Я лишь пытаюсь объяснить - что в некоторых ситуациях блокировочник может иметь преимущество перед версионником - и Oracle позволяет вести себя как блокировочник. А не устравиает то, что они сказали A (SELECT FOR UPDATE), но не сказали Б (накладывать при этом более уместные S-блокировки).

Спасибо за внимание.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337514
Фотография Я и ёжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Zaxx
автор писал:Вот и у вас так. Блокировать умеет - значит блокировочник.
Вы будете смеятся, но это действительно так.
Классический, т.е. ТЕОРИТИЧЕСКИЙ версионник НЕ ИСПОЛЬЗУЕТ блокировок ВООБЩЕ. Каждая транзакция работает со своей версией данных, конфликты решаются при завершении транзакции. Но поскольку откат транзакций дело достаточно дорогое, зачастую дешевле предотвратить конфликты чем разбираться с ними позже. Поэтому в Oracle пошли на создание гибридной схемы, с постановкой блокировок на изменяемые записи, т.е. внесение элементов блокировочника и это оказалось достаточно удачным решением.
В InterBase наскольяко я незнаю:) та же проблема решается путем разрешения только одной незакомиченной версии данных, т.е. транзакция пытающаяся создать еще одну новую версию получает отлуп, эффект похожий на наличие блокировки и в их терминах вроде даже называется Deadlock-ом (наряду с реальной ситуацией deadlock-а), но реально блокировки(как специального объекта базы данных) там нет.
На русском к сожалению книг по Concurrency control я не видел, но в сети вроде можно накопать некоторые классические труды типа "Concurrency control and recovery in database systems." Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman на языке оригинала, куда и отсылаю если появится желание покопаться в теории.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337531
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>> ...с полным правом заявляйте в форуме, что Oracle ведёт себя как однопользовательская СУБД.
>Сбавьте тон и перечитатйте мои посты - я такого нигде не заявлял.

Это продолжение вашей логики "Блокировки есть - значит блокировочник".
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337537
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aston писал:T2 стоит и ждет на блокировке, т.е. на SELECT FOR UPDATE. Но процедура с параметрами, как в T2, никогда бы не произвела UPDATE. Соответственно, пока выполняется T1, Т2 вполне могла бы не стоять на блокировке и ждать завершения Т1. А по логике же, надо, чтобы она вошла в блокировку в том случае, если 2-ой параметр был бы не равен 1 и не в SELECT FOR UPDATE, а при UPDATE. Зачем забирать строку в монопольное пользование, если нет уверенности в том, что она все таки будет изменена. Вот при изменении и возникла бы блокировка. А тут на тебе, X блокировка и никаких вариантов.
Так кто Вам мешает select for update перенести в блок условия ? Конструкция select for update как раз и служит тем самым инструментом для проектировщика, позволяющим вручную заблокировать нужные записи, чтобы быть уверенным, что в пределах транзакции они не изменились. Например у меня при том же расчете ЕСН в зарплате оператором select for update блокируются на изменение записи многих таблиц, которые участвуют внутри довольно большой ХП расчета ЕСН. Опять же, если бы к блокируемым таблицам в качестве требования выдвигались условия, что они не могут иметь долгих блокировок, то и методы обработки информации были бы другими и уже выгоднее было бы например воспользоваться временными таблицами. Так что считаю, что все зависит не от СУБД, а проектировщика.

P.S. Все это IMHO, Oracle не знаю, работаю на WatcomSQL ASA, которая является блокировочником, хотя по семантике WatcomSQL очень близок к PLSQL, естественно многое в них отрабатывает по разному.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337557
Фотография Я и ёжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Aston

автор писал:Я его прошу поставить блокировку FOR UPDATE, а то, что Oracle ставит X-блокировку вместо более уместной в этом случае S-блокировки

Вы ошибаетесь в том , что в этом случае нужна S-блокировка, как видно
из написания FOR UPDATE, это всетаки случай наложения блокировки для последующих изменений, если тут накладывать S-блокировку мы будем получать классический DEADLOCK.
Привожу пример:
1) Транзакция T1 выдает select for update на строку Y, и ставит по вашему мнению достаточную S-блокировку.
2) Транзакция T2 выдает select for update на ту же строку Y, и ставит S-блокировку, что возможно S блокирповки совместимы. Имеем две S блокировки на строке Y, допустим S1,S2.
3) T1 пытается сделать Update строки Y, для этого ей надо наложить X блокировку, но этого она сделать не может из за наличия блокировки S2.
T1 вподает в ожидание пока T2 снимет S2.
4) T2 пытается сделать Update строки Y, для этого ей надо наложить X блокировку, но этого она сделать не может из за наличия блокировки S1.
T2 вподает в ожидание пока T1 снимет S1.
5) Имеем классический Deadlock

FOR UPDATE в Oracle используется для предотвращения эффекта "потерянных изменений" на уровне изоляции Read Comitted, и для "упорядочевания" транзакций на уровне изоляции Serialize ( во избежание эффектов типа Write Skew), гы... кстати, интересно зачем его назвали Serialize если он реально транзакци не упорядочивает?

Строчная S-блокировка, конечно могла бы в Oracle пригодится при некоторых специфических случаях работы и наличии требования обеспечить пессимистическую стратегию блокирования, но никак не вместо X-блокировки в SELECT FOR UPDATE. А пока юзайте dbms_lock в таких случаях.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337588
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Ёжик

>Классический, т.е. ТЕОРИТИЧЕСКИЙ версионник НЕ ИСПОЛЬЗУЕТ блокировок ВООБЩЕ

Приведите пример такой СУБД. Хотя-бы одну...

>Каждая транзакция работает со своей версией данных, конфликты решаются при завершении транзакции.

Где вы такое видели ? В какой СУБД ?

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

Это и есть блокировка. Точно так-же как и в оракле. Обновить запись может только один. И неважно как они это назвали. Только в оракле второй обычно ждёт, а в интербейзе отваливается.

>эффект похожий на наличие блокировки и в их терминах вроде даже называется Deadlock-ом

Deadlock-ом у них называется взаимоблокировку транзакций и конфликт обновления данных. Те. Deadlock это не блокировка в их терминах, это результат наложения блокировки на заблокированный ресурс.

> (наряду с реальной ситуацией deadlock-а), но реально блокировки(как специального объекта базы данных) там нет.

Там есть Transaction Inventory Page (TIP) и у каждой версии записи есть идентификатор транзации.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337635
Фотография Я и ёжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Zaxx
автор писал:>Где вы такое видели ? В какой СУБД ?
Один источник я вам уже приводил: "Concurrency control and recovery in database systems." Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman.
Существует достаточно большой список подобных работ, но не на русском :(, посмотрите например у Дейта, он листа на три ссылок наставил.
Тут ёжик очень просил обратить Ваше внимание на слово "Теоритический".
Люди производят исследовательские изыскания, пишут умные книжки,
результатами их работ уже пользуются другие.
В теории БД и "Concurrency control" описано несколько механизмов обеспечения целостности базы данных при работе паралельных транзакций, для которых доказана их верность. Основные два из них это использование механизма блокировок и механизм многоверсионности, кроме того доказывается и возможность использования гибридных схем.

Пример СУБД работающей по классическому механизму многоверсионнасти я привести не могу, не встречал такой, думаю как раз потому что это достаточно затратный механизм в случае конфликтов, но и отрицать существование таких СУБД не буду.

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

Это и есть блокировка. Точно так-же как и в оракле.
Нет, не есть и не то же самое.
В Oracle блокировка это физический объект, хранящийся в заголовке блока данных, и наложен он может быть не только при update но и при select for update т.е. без всяких изменений данных.
В InterBase это невозможность создать новую версию, эффект в принципе тот же, но механизмы то разные. Вот и ножиком можно человека убить и из пистолета застрелить, но вы же не будете утверждать, что пистолет и нож одно и то же?
Правда про InterBase спорит не буду, не знаю я его и механизмы работы представляю очень поверхностно.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337727
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ёжик
Ну по поводу теорий...Вы слышали анекдот "про сферического коня в вакууме" ?
То что нет реальных СУБД работающих на "совсем без блокировок" говорит о многом. Как минимум о нежизнеспособности и неприменимости этого на практике.

автор писал:В Oracle блокировка это физический объект, хранящийся в заголовке блока данных, и наложен он может быть не только при update но и при select for update т.е. без всяких изменений данных.

Ну а в InterBase блокировка это и есть версия записи в совокупности с записью в TIP о состоянии породившей её транзакции. Они тоже физически существуют.

автор писал:Вот и ножиком можно человека убить и из пистолета застрелить, но вы же не будете утверждать, что пистолет и нож одно и то же?

Я об этом и говорю. Результат это БЛОКИРОВКА, и неважно ножом или пистолетом она достигнута.

автор писал:Правда про InterBase спорит не буду, не знаю я его и механизмы работы представляю очень поверхностно.

И не надо...
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337851
Фотография Я и ёжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:То что нет реальных СУБД работающих на "совсем без блокировок" говорит о многом. Как минимум о нежизнеспособности и неприменимости этого на практике.
Если я не вижу суслика, это еще не значит , что сусликов не существует.
Если широко распространенные СУБД не работают "совсем без блокировок" говорит не о "нежиснеспособности", а о малом круге задач где подход жизнеспособен.

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

автор писал:Я об этом и говорю. Результат это БЛОКИРОВКА, и неважно ножом или пистолетом она достигнута.
Опять вопрос терминологии.
Еще раз, блокировка (LOCK) в теории БД это не результат каких то действий и не ситуация когда одна транзакция не дает двигаться дальше другой, а инструмент при помощи которого транзакция заявляет свои права на некоторый объект (т.е. именно пистолет, можно убить, а можно неубивать а просто его на стену повесить). Выставление блокировки (LOCK) еще не означает что возник какой то конфликт, он может не возникнуть вообще. Именно при помощи таких блокировок блокировочники достигают правильности выполнения паралельных транзакций. И именно такого типа блокировку накладывает Oracle, т.е. транзакция создает некий объект который означает, что она обладает некими правами на некоторые данные в
базе данных. И наличие такого механизма делает Oracle "немного блокировочником".
Вы же, в приведенном примере, блокировкой называете ситуацию конфликта между транзакциями, которая может возникнуть для любого типа сервера, как для блокировочника так и для версионника и возникновение такой ситуации как раз ничего не говорит о механизмах работы сервера.

автор писал:Ну а в InterBase блокировка это и есть версия записи в совокупности с записью в TIP о состоянии породившей её транзакции. Они тоже физически существуют.
Ну хорошо, значит это тоже гибридный сервер а не чисто версионный :).
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337894
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Ёжик

Ну вот, наконец-то хоть один собеседник в конструктивной форме с примерами озвучил свое мнение, а не стал рассказывать анекдоты и утверждать, что документация это не та документация.

автор писал:5)... Имеем классический Deadlock

Не, ну реализовать Deadlock Manager то надо, обязательно.

автор писал:...но никак не вместо X-блокировки в SELECT FOR UPDATE. А пока юзайте dbms_lock в таких случаях.

Ну ладно, пускай придумают команду SELECT FOR SHARED UPDATE - меня это вполне устроит.

2 ASCRUS

Я же говорил, пример абстрактный. Понятно, что грамотным проктированием можно решить почти любые проблемы, но реализовать, IMHO, вполне полезные вещи на движке все же как-то лучше.

И все таки - есть еще сомневаюшиеся, что Oracle - чистый версионник и не может вести себя как блокирововчник?
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337917
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Ежик

автор писал:Если я не вижу суслика, это еще не значит , что сусликов не существует.

Если лохнесского чудовища никто не видел, значит его нет. Если кто-то считает что оно существует, то бремя доказательства лежит на нём.

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

Ну во первых я ещё не над кем не потешался. А во вторых то что мы с aston-ом считаем классическим блокировочником (я думаю в этом у нас полный консесус) это СУБД которая блокирует по ЧТЕНИЮ в режиме READ COMMITED. То-есть то что одна транзакция читает, другаю не может изменить, и наоборот : то что одна транзакция меняет, другая не может прочитать. Пример этого явления MsSQL. Oracle и Interbase лишены этого недостатка благодаря rollback-сегментам в первом и версионности во втором случае.
Ни о каких "теоретических" "совсембезблокировочниках" речь до вас тут не шла. Следовательно ничего вы не показали.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32337966
Фотография Я и ёжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 aston
автор писал:Не, ну реализовать Deadlock Manager то надо, обязательно.

Надо, но обнаружение ситуации deadlock-a вещь дорогая, требующая построения графов ожидания блокировок. Да и откат убиваемой транзакции тоже вещь недешовая. Поэтому возникновения этой ситуации стараются избегать, в том числе и путем грамотного использования for update.

И почему все обращаются только к ёжику? Да он диктует, но набиваю то Я, обыдно да....

2 Zaxx
автор писал:А во вторых то что мы с aston-ом считаем классическим блокировочником (я думаю в этом у нас полный консесус) это СУБД которая блокирует по ЧТЕНИЮ в режиме READ COMMITED
А у меня сложилось впечатление, что только Вы так это трактуете, отсюда и беспредметный спор каждого из ваc в своих терминах, если это не так то я не прав (ёжик попутал) и приношу извинения. Давайте спросим у aston
aston, вы действительно так считали и мы с ёжиком зря влезли пытаясь привести ваш с Zaxx спор к общей терминологии, когда она у вас и так общая?
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32338155
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отвечу обоим и процитирую последний пост Zaxx.

автор писал:...это СУБД которая блокирует по ЧТЕНИЮ в режиме READ COMMITED

Я считаю, что SELECT FOR UPDATE и есть чтение, но это чтение подозрительно похоже на чтение в блокировочниках (без NOWAIT). Из чего я и делаю вывод,что Oracle гибрид .MSSQL не заподозришь в шагах в сторону версионности, а Interbase в сторону блокировочника. А вот Oracle, рожденный версионником и полностью реализующий версионную модель СУБД со своим SELECT FOR UPDATE также пытается играть на поле блокировочников, что я, IMHO, считаю огромным плюсом (еще бы чуть-чуть и...).
Я не согласен, что SELECT FOR UPDATE это "блокирование блокированием" (цитата из поста Zaxx). Для блокирования блокированием в Oracle, наверное, придумали бы какой нибудь LOCK INTO TABLE и не надо было бы извлекать данные из блоков, тратиться курсор и т.д.

Вот в этом, IMHO, и есть суть наших расхождений с Zaxx. Не так ли?

Спасибо за внимание.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32338182
Фотография Я и ёжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну значит я был не прав по вашему поводу :)

автор писал:Я считаю, что SELECT FOR UPDATE и есть чтение, но это чтение подозрительно похоже на чтение в блокировочниках (без NOWAIT). Из чего я и делаю вывод,что Oracle гибрид .

Ну тогда в MS SQL есть конструкция SELECT WITH (NOLOCK), чтение без блокирования, "подозрительно похоже" на чтение в версионниках, надо делать вывод типа MS SQL версионник? ;) (это, типа, шутка и ответа не требует).

автор писал:MSSQL не заподозришь в шагах в сторону версионности
Говорят уже можно заподозрить, типа, в Yukon или как его там есть уровень изоляции Snapshot.

автор писал: Для блокирования блокированием в Oracle, наверное, придумали бы какой нибудь LOCK INTO TABLE и не надо было бы извлекать данные из блоков,
В Oracle надо было бы извлекать данные в любом случае, он блокировки хранит прямо в блоках данных, т.е. что бы поставить блокировку надо сначала достать этот блок, механизм там такой.

Всем удачных выходных!
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32340279
Zaxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Я и ёжик

авторДля блокирования блокированием в Oracle, наверное, придумали бы какой нибудь LOCK INTO TABLE и не надо было бы извлекать данные из блоков

Я так подозреваю, что SELECT FOR UPDATE не в oracle придумали. Это SQL92. Типа стандарт...

авторInterbase в сторону блокировочника
В Interbase, по моему, тоже есть SELECT FOR UPDATE, только он ничего не блокирует и применяется для ...WHERE CURRENT OF...
Хотя я где-то видел что в Firebird 1.5 обещали SELECT FOR UPDATE WITH LOCK...
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32355006
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое впечатление что кроме Oracle и Firebird ничего больше нет. Если критерий "стоимость СУБД" очень важен то ничего лучше SAP DB не найдешь.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32355013
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати насчет надежности и производительности SAP DB - то что на ней работает например ERP система SAP о чем то говорит.
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32355217
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я читал тут недавно, если память не изменяет мне, что SAP выложил на сайт нерабочую инсталляцию
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32361219
QWE1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>> кстати насчет надежности и производительности SAP DB - то что на ней работает например ERP система SAP о чем то говорит.

туфта, R/3 может работать В ТОМ ЧИСЛЕ и с sap db. Но это не сильно рекомендуется, поскольку морально устаревшая система (клон adabas) - sap отказывается от её поддержки

>>А я читал тут недавно, если память не изменяет мне, что SAP выложил на сайт нерабочую инсталляцию

не понял - чего исталляцию? sap db - так он бесплатный, кроме sap его в куче мест можно взять
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32362570
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
http://www.wintercorp.com/vldb/2003_TopTen_Survey/TopTenWinners.asp
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32362594
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Understanding Snapshot Isolation
Snapshot isolation consists of these components:

Snapshot isolation framework
Instructs Microsoft® SQL Server™ "Yukon" Beta 1 to keep versions of incoming updates.

Snapshot transaction isolation level
Allows individual applications to execute snapshot isolation queries.

The framework for snapshot isolation must be established for each database before applications can execute snapshot queries. To access data in the database using snapshot queries, the snapshot isolation level for the connection must be set to SNAPSHOT for each application before the application initiates snapshot isolation transactions (transactions execute snapshot queries when reading the data). For more information, see Using Snapshot Isolation.

When the snapshot isolation framework is established, any new update causes SQL Server to store in tempdb a logical copy (or version) of the previously committed value. SQL Server maintains a snapshot of all database changes at the time when snapshot isolation starts. All the versions of a record are marked with a timestamp of the transactions that made the change. The versions of updated records are chained using a link list and stored in tempdb. The newest record value is stored in a database page and linked to the version store in tempdb.

When a user in a snapshot isolation transaction reads the data, SQL Server first accesses the last committed record, and then retrieves the record value from the version store by traversing the chain of pointers to the specific record version of the data.

Disk space of 14-bytes is required for each record being updated for a particular database with the snapshot isolation framework enabled. These 14 bytes are added once for each record during the initial update, and are used to maintain record version information of the most current record stored in the database.

It is recommended that enough disk space be allocated to accommodate this requirement. When there is not enough space available on the current index or data page under snapshot isolation, the process of maintaining record version information with the most current record can cause index-page splits or the allocation of a new data page. SQL Server automatically reclaims the 14-byte space with the first update executed after the snapshot isolation framework is turned off.

Storage in tempdb
Establishing the snapshot isolation framework causes all update records for a particular database to be versioned and stored in tempdb, regardless of whether any users are currently trying to read the data using snapshot isolation scans. SQL Server maintains these records and dynamically claims or releases the disk space for unused versions.

Database administrators must plan ahead and allocate adequate space in tempdb. The following formula provides an approximate value for the version store space allocation in tempdb:

Total version store (KB) = Version generation rate (KB/sec.)* the longest transaction time (sec.)
The version store generation and the longest transaction time can be obtained using SQL Server performance counters available for snapshot isolation.

Data Availability to Readers
The presence of record versions of data in tempdb increases the availability of and concurrent access to the data for users.

The following snapshot isolation properties increase the availability of data:

Read operations with a transactionally consistent snapshot of the database.
Users do not lock data during a read operation (readers do not block writers).
Users can access the last committed value of the row while other transactions are updating the row.
Writers do not block readers and vice versa.
Reduces the number of deadlocks for SQL Server.
Snapshot Isolation Scenario
For example, User 1 is modifying data when User 2 tries to read the same data, both in a snapshot isolation transaction. User 2 is not blocked from reading the data. Although the data is currently locked for updates by User 1, a previous version of the data is available to User 2.

When User 1 commits the updates to the data, future reads of the data executed from a new snapshot isolation transaction will access the updated data.

If User 2 updates the data, SQL Server checks if the data has changed since the start of User 2's transaction. If it has changed, SQL Server rolls back the update transaction of User 2 and returns an error. However, if the data has not changed, SQL Server applies the updates by User 2. Future reads of the data inside the same transaction will show the updates of User 2.

Illustration of Snapshot Isolation Scenario
The following example shows how row versioning works.

User 1: Reader User 2: Writer
USE AdventureWorks
GO
/*Enable snapshot isolation on the database.*/
ALTER DATABASE AdventureWorks
SET ALLOW_SNAPSHOT_ISOLATION ON
CREATE TABLE AWTable (C1 int PRIMARY KEY, C2 int)
INSERT AWTable VALUES (1, 5)


/*Start a snapshot transaction on connection 1.*/
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN
SELECT C2 FROM AWTable WHERE C1=1
/*Here is the result set: 5*/

/*Start a new transaction on connection 2.*/
USE AdventureWorks
GO
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN
SELECT C2 FROM AWTable WHERE C1=1
/*Here is the result set: 5*/


UPDATE AWTable SET C2=6 WHERE C1=1
SELECT C2 FROM AWTable WHERE C1=1
/*SQL Server is supposed to return 6.*/


/*Return to connection 1 and read AWTable row 1.*/
SELECT C2 FROM AWTable WHERE C1=1
/*Reader is able to read data despite the update transaction in connection 2. Here is the result set: 5*/


/*Commit the update on Connection 2.*/
COMMIT


SELECT C2 FROM AWTable WHERE C1=1
/*SQL Server now returns 6, the updated committed value.*/



Benefits and Costs of Row Versioning
Row versioning in snapshot isolation transactions are most useful in avoiding reader-reader, reader-writer, and writer-reader blocking scenarios and in reducing the number of potential deadlocks. Use snapshot isolation primarily for read transactions or when an occasional transaction rollback due to mandatory conflict detection is not a major issue.

Benefits of Snapshot Isolation Transactions
The benefits include:

Nonblocking consistent reporting and ad hoc queries running parallel with an OLTP application.
Application migration to SQL Server from other relational database systems supporting nonblocking reads.
Consistency of aggregates, such as AVG, COUNT, and SUM, as well as index intersections and index joins without escalating read scans to a higher isolation level.
Deadlock reduction.
Costs of Snapshot Isolation Transactions
The following costs associated with enabling snapshot isolation transactions should be considered when you decide to use row versioning:

When snapshot isolation framework is enabled, update transactions for a particular database must maintain record versions, even if there are currently no readers.
Enough disk space for the version store must be provided. Versions are stored in tempdb. If there are very long-running transactions, all the versions generated by update transactions during the time must be kept in tempdb. If tempdb runs out of space, update operations do not fail, but the snapshot isolation queries might fail.
The overhead of 14 bytes per record must be set aside.
Update performance can be slower due to the work involved in maintaining older versions. The actual difference in the system throughput with the snapshot isolation framework set to ON depends on what percentage of the system resource is spent on updates for the workload. For OLTP workloads where each update changes just a few rows in a database, the performance degradation for database updates is within a few percents compared to nonversioned databases with the snapshot isolation framework turned off. If a very large amount of data is changed in each update, the performance degradation could be higher compared to nonversioned databases.
Data readers face the extra cost of traversing the version link list. Constructing a snapshot of data involves system resources (CPU and memory). The older the snapshot, the slower the process of accessing it in a snapshot isolation transaction. Since the record versions are stored in tempdb, the more tempdb pages can be stored in memory during snapshot version construction, the better is the performance and the lower is the number of issued I/Os.
Some update transactions using snapshot isolation might have to be rolled back because of mandatory conflict detection for update operations.
Limitations of Snapshot Isolation Transactions
Consider the following limitations when working with snapshot isolation transactions:

Distributed transactions, including queries in distributed partitioned databases, are not supported.
If applications use Global temp tables, you must allow snapshot isolation in tempdb. Global temp tables are stored in tempdb.
Snapshot transactions fail when:
A database is made read-only after the snapshot transaction starts, but before the snapshot transaction accesses the database.
The database state was changed in such a way that database recovery occurred after a snapshot transaction starts, but before the snapshot transaction accesses the database. Some examples of this situation include: the database was set to OFFLINE and then to ONLINE, database auto-close and open, database detach and attach.
The following data definition language (DDL) statements are executed inside snapshot isolation transaction:
ALTER INDEX

ALTER PARTITION FUNCTION

ALTER TABLE

CREATE INDEX

CREATE XML INDEX

DBCC DBREINDEX

DROP INDEX

SQL Server does not keep multiple versions of the system meta data. Data definition language (DDL) statements on tables and other database objects (indexes, views, data types, stored procedures, and common language runtime functions) cause subsequent snapshot isolation queries on those objects to fail if the DDL happened after the snapshot isolation transaction started.
This example illustrates what happens in a snapshot isolation transaction when a DDL takes place in another transaction.

User 1: Reader User 2: DDL statement (ALTER INDEX REBUILD)
Use AdventureWorks
GO
/*Enable snapshot isolation on the database.*/
ALTER DATABASE AdventureWorks
SET ALLOW_SNAPSHOT_ISOLATION ON
CREATE TABLE AWTable (C1 int, C2 int)
CREATE INDEX AWIndex on AWTable (C1)
INSERT AWTable VALUES (1, 5)



/*Start a snapshot transaction on connection 1.*/
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN
SELECT C2
FROM AWTable
WHERE C1=1
/*Here is the result set: 5*/


/*Start a new transaction on connection 2.*/
USE AdventureWorks
GO


ALTER INDEX AWIndex ON AWTable REBUILD

SELECT C2 FROM AWTable WHERE C1=1
/*SQL Server "Yukon" Beta 1 fails this transaction because a DDL statement on this table was executed (by User 2).*/
...
Рейтинг: 0 / 0
Размер БД 10 Gb
    #32363773
aston
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MiCe

Не прошло и 10 лет.
...
Рейтинг: 0 / 0
65 сообщений из 65, показаны все 3 страниц
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Размер БД 10 Gb
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]