Прошу подсказать
Прошу подсказать
1. Может ли IB, в ответ на читающий запрос (select), дать deadlock? Конечно, при этом еще масса разных транзакций. Как избежать этого?
Параметры транзакции данного запроса:
READ COMMITTED, READONLY, NOWAIT
fibplus 4.8.1
2. В пределах одного коннекта ждет ли транзакция завершения выполнения предыдущей, при наличии достаточных ресурсов сервера (RAM & CPU)? Или они выполняются параллельно?
READ COMMITTED, READONLY, NOWAIT
fibplus 4.8.1
Параметры транзакции данного запроса:
READ COMMITTED, READONLY, NOWAIT
fibplus 4.8.1
2. В пределах одного коннекта ждет ли транзакция завершения выполнения предыдущей, при наличии достаточных ресурсов сервера (RAM & CPU)? Или они выполняются параллельно?
READ COMMITTED, READONLY, NOWAIT
fibplus 4.8.1
1. нет. только если база повреждена или к базе обращаются по разным путям (см. faq) в старых версиях
2. www.ibase.ru/devinfo/ibtrans.htm, www.ibase.ru/devinfo/mga.htm
сначала почитал бы, потом вопрос задавал. Какие ресурсы, какой cpu???
2. www.ibase.ru/devinfo/ibtrans.htm, www.ibase.ru/devinfo/mga.htm
сначала почитал бы, потом вопрос задавал. Какие ресурсы, какой cpu???
kdv писал(а):1. нет. только если база повреждена или к базе обращаются по разным путям (см. faq) в старых версиях
2. www.ibase.ru/devinfo/ibtrans.htm, www.ibase.ru/devinfo/mga.htm
сначала почитал бы, потом вопрос задавал. Какие ресурсы, какой cpu???
- означает ли это, что транзакции выполняются сервером параллельно и могут завершаться не в том порядке, в котором стартовались? Если можно, ответ - без отсылок, а просто словами (приличными!). Спасибо заранее.kdv в статье писал(а): Собственно, IB обладает возможностью в одном коннекте стартовать много
транзакций, что очень удобно (потом трудно будет привыкнуть к отсутствию
данной возможности в других серверах). Приложение должно стартовать
транзакцию, выполнить набор операторов, составляющих эту транзакцию, и
завершить транзакцию. Причем еще раз подчеркну, что именно клиентское
приложение решает, допустимы ли ошибки при выполнении операторов в
транзакции, и как завершать транзакцию с учетом наличия или отсутствия
ошибок.
Гео писал(а):kdv писал(а):1. нет. только если база повреждена или к базе обращаются по разным путям (см. faq) в старых версиях
2. www.ibase.ru/devinfo/ibtrans.htm, www.ibase.ru/devinfo/mga.htm
сначала почитал бы, потом вопрос задавал. Какие ресурсы, какой cpu???- означает ли это, что транзакции выполняются сервером параллельно и могут завершаться не в том порядке, в котором стартовались? Если можно, ответ - без отсылок, а просто словами (приличными!). Спасибо заранее.kdv в статье писал(а): Собственно, IB обладает возможностью в одном коннекте стартовать много
транзакций, что очень удобно (потом трудно будет привыкнуть к отсутствию
данной возможности в других серверах). Приложение должно стартовать
транзакцию, выполнить набор операторов, составляющих эту транзакцию, и
завершить транзакцию. Причем еще раз подчеркну, что именно клиентское
приложение решает, допустимы ли ошибки при выполнении операторов в
транзакции, и как завершать транзакцию с учетом наличия или отсутствия
ошибок.
Мне ОЧЕНЬ не нравится KDV - он постоянно дает ссылки, такое впечателение, что СВОЕГО ума у него нет
мало того, он как ВЛАСТ (кстати я не ошибся - именно ВЛАСТ) ИМУЩИЙ (читай админ форума) - посылает куда-то....
Не знаю, как у Вас, а у меня все старты и коммиты - происходят в
startTransation;
try
commitTransation;
except
RollBackTransation;
end
и кстати, писать ReadOnly d параиетре транскаций необязательно
read
nowait
rec_version
read_committed
т.е. читать только подтвержденные транзакции, а если произошло измненние, но не было еще Commit, то Ваш запрос возьмет старую версию записи - немодифицированную
дык, согласен. на свои же статьи давать ссылки - особого ума не надо. Кстати если я мало того что статьи буду писать, да еще и популярно объяснять (тем кто НЕ хочет читать статьи, которые я пишу) - тогда я буду всем нравиться?Martyn писал(а):Мне ОЧЕНЬ не нравится KDV - он постоянно дает ссылки, такое впечателение, что СВОЕГО ума у него нет
](./images/smilies/eusa_wall.gif)
вопрос совершенно невменяемый. Если сервер не может выполнять транзакции параллельно, то это не сервер, а незнамо что.Гео писал(а): - означает ли это, что транзакции выполняются сервером параллельно и могут завершаться не в том порядке, в котором стартовались? Если можно, ответ - без отсылок, а просто словами (приличными!).
Да, он ОБЯЗАН выполнять (и делает это) транзакции параллельно, и завершать их в каком угодно порядке.
такая конструкция совершенно необязательна. Это дело вкуса. Клиент сам решает, в каком случае как ему завершить транзакцию. Если в транзакции выполнялся один оператор, и он даже не выполнился, то все равно можно делать Commit. А в ряде случаев на Rollback сервер сам делает Commit. Это к тому, что статьи все-таки надо читать, причем не обязательно только мои...Martyn писал(а): Не знаю, как у Вас, а у меня все старты и коммиты - происходят в
startTransation;
try
commitTransation;
except
RollBackTransation;
end
в общем, если человек залез на форум, то он может и статью прочитать, не переломится. Где ясно написано, что никакие "модифицированные" версии ни при каком уровне изолированности IB/FB клиенту не показывает. Никогда.Martyn писал(а):т.е. читать только подтвержденные транзакции, а если произошло измненние, но не было еще Commit, то Ваш запрос возьмет старую версию записи - немодифицированную