|
|
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Можноли в plqsl делать commit типа for c in ... loop insert ... ; delete ...; ... commit; end loop; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 10:23:08 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Можно, а зачем ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 10:28:11 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 10:30:19 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
В смысле, зачем в цикле ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 10:52:42 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
to gluk Например в цикле идёт обновление большого количества записей. Для предотвращения разростания RBS неплохо например после каждого 100 изменения делать commit ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 11:17:21 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
to Vladimir_: Распространнёная ошибка, что как можно чаще нужно делать COMMIT. Однако знающие люди скажут, что расходов от частого коммита куда больше, чем от правильно настроенных сегментов отката. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 11:23:51 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Ага, гикнется он у тебя где-нить на 1000 цикле, будешь то что навтыкал ручками вычищать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 11:24:12 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Вообще Том Кайт пишет, что использование промежуточных коммитов не есть хорошо. Эту привычку обычно имеют перешедшие из других баз. Почему не хорошо: 1) Фактически, тратится больше ресурсов при промежуточных комитах, чем при одной долгой транзакции. 2) При одной работающей транзакции данные в RBS заблокированы и не могут быть перезаписаны, так как могут понадобится для отката. Что исключает ошибку -1555 в других сенсах из за этой транзакции. При промежуточных комитах, эти данные в RBS могут быть перезаписаны. 3) При промежуточных комитах можно получить неконсистентность данных при сбое в работе пакетного задания, откат всех изменений не будет возможен из за промежуточных комитов. А что RBS будет расти так это не страшно - можно просто выделять особый RBS для такого пакетного задания а потом удалять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 11:32:31 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Дополнительно к тому что есть плохо что сказала Violina: За счёт частых COMMIT увеличивается обьём редо-лога, то есть он быстрее заполняется, то есть чаще происходит переключение журналов, что может приводить к Checkpoint not complete, что в конечном счётё так подвешивает систему, что о никаких преимуществах частого коммита говорить вообще не приходится. to Gluk (Kazan): Я вообще сказал выше, что нужно по уму настроить сегменты отката, тогда ничего не будет. Дейстивтельно у Тома Кайта по этому поводу хорошо расписано. Советую почитать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 11:38:06 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
коммит надо делать только тогда когда этого требует логика программы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 11:38:55 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
to softbuilder За счёт частых COMMIT увеличивается обьём редо-лога, то есть он быстрее заполняется А это почему? Сам по себе ведь commit мало что делает. Мое предположение, потому что при commite происходит сброс изменений из redo buffer в redo log. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 11:47:00 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
по поводу коммита хорошо описано в книге тома кайта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 11:55:33 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
to Violina: Дело не в том, что делает COMMIT и сколько в контексте того что я имел ввиду. Сама команда COMMIT непосредственно помещается в редо-лог. Если скажем производится 20000 различых операций INSERT, DELETE, UPDATE. И скажем делать COMMIT после каждых 100 операций, то в редо-логах будет 200 коммитов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 11:56:52 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
2 softbuilder@inbox.ru Первый том читаю уже по третьему кругу, второго еще не дождался. Если Вы заметили, в своих постах я высказался против частого COMMIT, или Вы не так меня поняли ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 12:01:58 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Ага понял, просто оба поста пришли практически одновременно. Это я не с softbuilder@inbox.ru дискутировал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 12:04:39 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
to softbuilder Я не говорил о частых commitах и о пользе данного дела. Я уже приводил пример о расчёте абоненткой платы, когда данное действие повторяется для каждого абонента. Назначать специальный RBS для данной операции у конечного пользователя мне кажется не очень хороший подход. Нужно всегда пытаться найти оптимальное решение поставленной задачи. И иногда в этом помогает использование промежуточных commit. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 12:27:39 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Просто для информации (не для подтверждения или опровержения какого либо утверждения здесь). Встретила в Enterprise DBA Part 1A: Architecture and Administration Because the redo log buffer may be flushed before the COMMIT, the size of the transaction does not affect the amount of time needed for an actual COMMIT operation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 13:10:29 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
попробуйте поиспользовать автономные транзакции том кайт доказал, что 1. один sql оператор засовывающий в базу 1 млн строк работает гораздо быстрейчем тысяча операторов делающих тоже самое 2. тысяча операторов с одним коммитом, работает быстрей чем тысяча операторов с кучей коммитов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 13:28:15 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
А причем тут автономные транзакции ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 14:04:34 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
просто удобно вызываешь процедуру, которая работает с одним абонентом сто раз вызвал, сто абонентов счастливы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 14:11:39 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
что-то я не совсем понимаю смысл использования автономных транзакций в данном случае. Если я не ошибаюсь, то будет только хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 14:23:03 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
чем хуже то?? тебе нужно же делать коммит для каждого абонента? самый простой вариант for... loop вызываем автономную процедуру для работы с одним абонентом end loop; если потом в главной сессии все отвалится у этих абонентов все изменения остануться, в чем то плюс в чем то минус можно на эту тему спорить и обсуждать полдня:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 15:30:55 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Вопрос был вызван тем что возникала ошибка ora-xxxx не помню уж какая Когда commit из цикла выкинул все ok Наверно версия oracle была кривая , 8.?.? Или девелоперы чето написали не того , заразы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2003, 20:29:10 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
2 Simon Хуже тем, что такие изменения должны проходить либо все сразу, либо не одно, иначе приходится много работать руками. Сам работаю с биллингом, неоднократно на подобные грабли вставал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 08:52:34 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
я тоже работал с биллингом:) все зависит от ситуации и от предпочтений программиста если я, например, провожу обсчет объемных скидок на pl/sql, то мне нафиг не надо чтобы при возникновении ошибки у одного абонента откатилась информация по другим(просто мне ее потом пересчитывать в ломы) есть куча архитектурных решений как это сделать одно лучше другое хуже, но они все могут существовать p.s. или, например, я параллельно пишу в журнал тех абонентов, которых обработал, тут вообще лучший способ - автономные транзакции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 09:24:33 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Согласен, но это требует дополнительной логики, да и запутаться легко ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 10:23:29 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Skazannoe verno, no.. tol'ko dlya prosto DBA. Lyboi Application DBA ( ne putat' s DBA Oracle Application ) dast vam kuchu primerov zelesoobraznosti takoi operazii, xot' v tom ge Billing / Online Biiling. Ne byvaet polnost'u universal'nyx reshenii:: izmenenie granichnyx yslovii vlechet za soboi izmenenie poryadka reshenii. Izvechnyi spor zeny i zelesoobraznosti... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 10:26:50 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Кроме извечного вопроса про цену/целесообразность и спора, как правильно писать billing (который автономен для каждого клиента, между прочим -- редко, когда двум разным клиентам нужно обсчитывать в рамках одной транзакции), добавлю ещё один повод делать частый commit -- когда параллельно с этими insert/update/delete живёт какое-либо приложение, которое эти данные не только использует, но и меняет. Потому как deadlock однако будет (или блокировка, в лучшем случае). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 16:10:48 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Deadlock в Oracle штука редкая, его нужно специально добиваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2003, 16:42:45 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
2 Gluk (Kazan): Вы, судя по всему, никогда не сталкивались с приложениями, где конкуренция за данные явление более чем нормальное. С точки зрения Оракула, никакого deadlock не возникает -- просто кто-то будет очень долго ждать, а время отклика станет на порядок больше. А вот если взглянуть со стороны, то станет видно, что один (состоящий из нескольких десятков параллельных процессов) ждёт другого, который в свою очередь ждёт первого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2003, 00:07:52 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Как пример. Deadlock возник при увеличении кол-ва операций в транзакции в пакетной обработке с 500 до 1000. Конфликт возник у пользовательской сессии при обращении к тому-же русурсу. Ошибка произошла после истечения тайм-аута, потому-что транзакция была достаточно долгой. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2003, 08:53:59 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Просто я стараюсь делать транзакции с update, insert и delete максимально короткими и прозрачными. А select-ы блокировок не накладывают. Операторов у меня действительно не много ~20 рабочих мест, но все таки я считаю, что deadlock в Oracle в очень большой степени ошибка разработчика (я знаю, что они снимаются автоматически). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2003, 08:56:48 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Пакетные задания у меня выполняются ночью, когда операторы спят. И что характерно, не конфликтуют между собой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2003, 09:03:14 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
2Глюк Везет тебе, а вот когда абонентов станет побольше, они у тебя будут идти круглосуточно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2003, 09:14:03 |
|
||
|
for цикл commit
|
|||
|---|---|---|---|
|
#18+
Абонентов у меня 40000 в телевизионном биллинге и 4000 в интернет, плюс оплата по PIN-картам по 1000 штук в день. Операторов 10~20, филиалов 3. Плюс рекламщики (планирование эфира). Интернет биллинг - Абсолют, остальное самописное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2003, 09:41:15 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1989906]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
176ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 180ms |
| total: | 417ms |

| 0 / 0 |
