powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE12.5 порядок комманд в транзакции
16 сообщений из 16, страница 1 из 1
ASE12.5 порядок комманд в транзакции
    #36257577
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, подскажите пожалуйста, гарантирует ли ASE порядок комманд в транзакции, т.е.

begin tran
insert into table 1
insert into table 2
insert into table 3
commit

Будет ли всегда сначала вставка в таблицу 1, потом в таблицу 2 и потом в таблицу 3 или сервер сам решит в каком порядке делать вставку в таблицы.

Можно ли как-то повлиять на это?

Может кто знает какую-нибудь доку где об этом говорится.

Заранее спасибо.
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36257654
sn1251
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вы знаете СУБД по щучьему велению, по своему хотению меняющие порядок поступающих команд?

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

Сменить порядок вставки искусственно можно с помощью before- или instead-of- триггера, но в ASE этого нет.
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36257711
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kru гарантирует ли ASE порядок комманд в транзакции

В каком порядке написали, в таком и будет!

Kru Можно ли как-то повлиять на это?

А зачем?

sn1251 Сменить порядок вставки искусственно можно с помощью before- или instead-of- триггера, но в ASE этого нет.

Уже давно есть insted trigger начиная с ASE 15
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36258054
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, спасибо за ответ.
Вопрос этот прозвучал на собеседовании. До этого я никогда не заморачивался.
Если будет возможность, то попробую узнать какой был правильный ответ и обязательно его размещу.

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

Что если, например таблица 1 залочена каким-нибудь процессом, в то время как таблицы 2 и 3 свободны.
Можно же сначала добавить записи в таблицы 2 и 3 и потом снова попробовать таблицу 1? Если она к тому моменту освободится, то транзакция пройдёт нормально.

Т.е. не сразу сдаваться, а попробовать :-) почему бы и нет.

Вот только где-бы узнать про то как реально себя сервер ведёт.

Насчёт пятнашки - у нас её пока нет, так что триггеры используем самые обыкновенные.

Заранее спасибо за дальнейшие отклики.
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36258284
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru wrote:
> Господа, подскажите пожалуйста, гарантирует ли ASE порядок комманд в
> транзакции, т.е.

Да, гарантирует. Иначе ты бы не смог ни одной программы на транзакте
написать.

> Будет ли всегда сначала вставка в таблицу 1, потом в таблицу 2 и потом в
> таблицу 3 или сервер сам решит в каком порядке делать вставку в таблицы.

Будет. Но вот если написать

insert into mytable
select *
from myothertable

, и даже добавить ORDER BY, порядок вставки не
гарантируется.

> Можно ли как-то повлиять на это?

Можно, написать INSERT-ы в другом порядке вставки.

> Может кто знает какую-нибудь доку где об этом говорится.

Ну, это как бы мировые константы. Само собой разумеется.
Если этого бы не было, то TSQL не был бы Тьюринг-полным
языком, а тогда бы на нём нельзя было бы программировать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36258287
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru wrote:

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

Туд достаточно подумать, а не знать. ПОдумай, как шли бы вставки
трёх записей, вторая из которых ссылалась бы на первую по FOREIGN KEY,
а третья -- на вторую. Если бы сервер переставлял записи местами,
то

0) ты бы не мог проверить последовательно результаты вставок записей.
1) исход транзакции зависил бы от того порядка, в котором сервер бы
вставлял записи. В каких -то случаях записи бы вставились, и
транзакция завершилась бы, а в других случаях не все записи бы
вставились, и транзакции пришлось бы откатиться, а это уже называется
несериализуемая транзакция, этого любая ACID-система не может допускать.

> Т.е. не сразу сдаваться, а попробовать :-) почему бы и нет.

Ага, уже. Я ж говорю, транзакция сериализоваться не будет.

> Вот только где-бы узнать про то как реально себя сервер ведёт.

Меня спроси

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36258289
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru wrote:

> Вот только где-бы узнать про то как реально себя сервер ведёт.

А, ещё один важный источник информации забыл указать:
своей головой подумай.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36260582
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется, что возможен вариант, когда сервер выполняет команды параллельно - если они не зависят друг от друга. В этом случае возможно что команда 2 завершится до команды 1.
Попробую уточнить и напишу...
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36261329
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru wrote:
> Кажется, что возможен вариант, когда сервер выполняет команды
> параллельно - если они не зависят друг от друга. В этом случае возможно
> что команда 2 завершится до команды 1.

Комманды одного серверного процесса (одного соединения с сервером)
выполняются строго последовательно.
Тут и выяснять нечего.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36261542
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Комманды одного серверного процесса (одного соединения с сервером)
выполняются строго последовательно.
Тут и выяснять нечего.

Мне кажется вопрос требует уточнения. Что есть "выполняются"?
Программный код сервера, реализующий данное действие уровня SQL? Или выполнение неким черным ящиком SQL команд?
В таком случае, при распараллеливании одного процесса на несколько физических ядер такое запросто возможно. Другое дело, что на SQL уровне это будет выглядеть именно как последовательно. А вот на аппаратном - нет.
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36261657
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer wrote:

> Мне кажется вопрос требует уточнения. Что есть "выполняются"?
> Программный код сервера, реализующий данное действие уровня SQL? Или
> выполнение неким черным ящиком SQL команд?

Есть код TSQL, который выполняется, ну скажем, гипотетической
виртуальной машиной ASE. Комманды этого кода выполняются
строго последовательно. Внутри СУБД следующая комманда не
выполняется до тех пор, пока не закончилось выполнение предыдущей
комманды. При выполнении одной комманды может происходить
всё, что угодно, любое распараллеливание или переупорядочивание
кода.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36261851
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Есть код TSQL, который выполняется, ну скажем, гипотетической
виртуальной машиной ASE. Комманды этого кода выполняются
строго последовательно.

В контексте SQL соединения все так и происходит. Последовательность комманд выполняются по порядку и баста. Но это в контексте соединения.

Если же глядеть в ключе непосредственных данных, попадающих на диск, то "гонки возможны". Взять к примеру два устройства хранения данных, один на одном контроллере, другой на другом. Моменты скидывания информации на диск могут сильно отличаться от моментов, рапортуемых контроллерами операционной системе, а тем более от моментов рапортуемых операционной системой к СУБД. Одна табличка в одном устройстве на одном диске, другая в другом. Что уж говорить об иных уровня кэширования, упорядочивания данных, реализованных в RAID массивах и т.п. И такое возможно не только на уровне хранилищ, но и на системной шине и при обменах с памятью. Современное железо очень хитрое и нутро от нас скрыто.

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

А это уже известно только разработчикам сервера. И выглядит как домысливание. Мы не знаем (я во всяком случае), как выполняются комманды одним потоком или разными. Возможно во внутренней структуре есть один поток получающий комманды, который на каждую комманду создает отдельный выполняющий поток, или что-то типа того. И тогда каждый поток может обгонять другой, если они не затрагивают одних и тех же данных, в противном случае семафор остановит выполнение одного до завершения другого. Ну теоретически это же возможно.
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36262177
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВикипедияТранза́кция (англ. transaction) — в информатике, группа последовательных операций, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта. Транзакции обрабатываются транзакционными системами, в процессе работы которых создаётся история транзакций.

И о чем тут спорить? А как сервер это раскручивает, это всем до звезды, и "топикстартеру" я думаю тоже!
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36262786
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer wrote:

> Если же глядеть в ключе непосредственных данных, попадающих на диск, то
> "гонки возможны". Взять к примеру два устройства хранения данных, один

Ты людей-то не пугай. Гонки эти -- внутреннее дело СУБД. И она с ними
великолепно справляется.

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

Ну, ты не знаешь, а я знаю.
И это в общем не секрет, написано в документации.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36265651
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
...И это в общем не секрет, написано в документации.


А можно ссылочку если имеется?

Заранее спасибо.
...
Рейтинг: 0 / 0
ASE12.5 порядок комманд в транзакции
    #36267300
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru wrote:
> А можно ссылочку если имеется?

http://sybooks.sybase.com
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE12.5 порядок комманд в транзакции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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