Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
Добрый день. переодически (достаточно редко) происходит откат глобалов - изменения просто исчезают, при этом в программе транзакции не используются вообще. создается документ, с ним происходит работа, и в какой-то момент все откатывается назад (это все в течении нескольких минут). при этом программа "связи" успевает иногда получить (вернее сказать: выдернуть) данные о документе, потом они пропадают. закономерности не выявлено, в логах полная тишина. Может кто сталкивался с таким ? Cache 4, delphi+vism, все без sql заранее благодарен за ответ(ы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 10:20 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
Пропадать не пропадало ничего пока... Вот появлялось порой с задержкой - это бывало... ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 10:41 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
krvsaПропадать не пропадало ничего пока... Вот появлялось порой с задержкой - это бывало... ---------- в программе конструкции вида s gbl="^Documents" l +@gbl s @gbl=@gbl+1 l -@gbl s numdocument=@gbl s @gbl@(numdocument,IDGoods)=quantity s @globalrest@(IDGoods)=@globalrest@(IDGoods)-quantity все проходит, программа на Delphi прекрасно получает сформированный документ, проходит пару минут - документа нет, нумерация не порвана, в примере изменение остатков - тоже ничего не рвет. параллельно запущен процесс который выбирает данные и отправляет из в другую базу - он иногда видит (успевает увидеть) создаваемый документ, но чуть позже под этим же кодом пойдут другой.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 10:47 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
Присваивание numdocument делается вне "защищенной" секции кода, поэтому существует вероятность, что у 2 процессов будет одинаковое значение numdocument. Лучше хотя бы так: Код: plaintext 1. 2. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:03 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovПрисваивание numdocument делается вне "защищенной" секции кода, поэтому существует вероятность, что у 2 процессов будет одинаковое значение numdocument. Лучше хотя бы так: Код: plaintext 1. 2. Код: plaintext согласен... с другой стороны Код: plaintext 1. 2. но после "пропадения" первого документа - глобали @gbl@(numdocument,IDGoods) нет а @globalrest@(IDGoods) содержит изначальное значение процедуры которая бы такое делала в контексте текущего проекта нет. Такие эффекты были замечены при маленьких загрузках - т.е. в программе работал один человек и никто параллельно не мог создать еще такой же документ (это к слову о lock в примере) спасибо за совет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:28 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
beruminДобрый день. переодически (достаточно редко) происходит откат глобалов - изменения просто исчезают, при этом в программе транзакции не используются вообще. хотел дополнить... журналирование глобалей я не включал, если смотреть через панель управления, локальные БД, области, глобалы - галка журналирование не стоит. но были случаи - повреждения БД , в этом случае откат глобалов мог быть достаточно большим - до полдня работы и это происходило после перезапуска каше: в момент его остановки. но тут хоть как-то логично объяснимо, а тут откат в процессе работы без каких-либо "но" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:45 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
Что тут скажешь... Если глобала нет, значит сущестует программный код, который его почистил. К тому же IDGoods вычисляется вне приведенного фрагмента. Ловить такие ошибки, тем более в Cache 4, действительно, тяжело. Там только отладчик в командной строке. Почитайте док-ю, помнится была возможность трассировки выполнения команд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:46 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovЧто тут скажешь... Если глобала нет, значит сущестует программный код, который его почистил. К тому же IDGoods вычисляется вне приведенного фрагмента. Ловить такие ошибки, тем более в Cache 4, действительно, тяжело. Там только отладчик в командной строке. Почитайте док-ю, помнится была возможность трассировки выполнения команд. программного кода уничтожения документа нет в проекте. только обнулить документ, но удаления нет. нумерация документов - простой инкремент - пропусков в нумерации тоже нет. IDGoods - в принципе массив с кодами товаров. Если бы я мог повторить "баг" - то понятно кто был бы виноват, а так ... есть н-цать установок прикладного ПО - переодически - где-то пропадает документ таким образом... может один, может два за месяц.. но при этом документов тысячи. если был бы виноват программный (прикладной) код - то эффект был бы каким-то более постоянным. на каком-то форуме читал был "баг" в каше связанные с реакцией на транзакцию во время перевода системного времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 12:56 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovПрисваивание numdocument делается вне "защищенной" секции кода, поэтому существует вероятность, что у 2 процессов будет одинаковое значение numdocument. Лучше хотя бы так: Код: plaintext 1. 2. Код: plaintext В чем разница твоего варианта и варианта автора? Если некий процесс делает инкремент - другой будет висеть на блокировке Код: plaintext Пока первый не даст команду Код: plaintext Разве не так? Или как тогда понимать термин "защищенной" секции кода ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:42 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
Разница в том, что $I() позволяет отказаться от блокировки. Т.е., 1 команда вместо 3 в предыдущем варианте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:46 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
krvsa, но два процесса одновременно могут обратиться к @gbl и получат одинаковое значение т.е. первый процесс блокирует изменяет, второй ждет первый снимает локи идет к выполнение строчки с получением номера, второй ставит лок, интекрементирует, снимает лок и идет к получению номера и оба процесса получают один номер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 13:47 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovРазница в том, что $I() позволяет отказаться от блокировки. Таки она там "внутри себя" её (блокировку) и делает... Т.ч. никакой потери защищённости у автора нет. Alexey MaslovТ.е., 1 команда вместо 3 в предыдущем варианте. И не более того... Но минус будет еще и в том, что "нарастить" при использовании инкркмента ($i()) ничего не получится... Придется опять таки возвращаться к примеру автора... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:12 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
krvsaAlexey MaslovРазница в том, что $I() позволяет отказаться от блокировки. Таки она там "внутри себя" её (блокировку) и делает... Т.ч. никакой потери защищённости у автора нет. насколько я понимаю, речь идет о том где получать в локальную переменную ID, полученную инкрементом - внутри lock - или снаружи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:17 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
beruminно два процесса одновременно могут обратиться к @gbl и получат одинаковое значение Это уже какой-то нонсенс... "Обратиться" т.е. читать могут все процессы. Но получить одинаковые номера никак не могут. Иначе бы у нас нумерация карточек полетела бы под откос. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Не должны разные процессы вывести на экран одинаковые числа. Код: plaintext 1. 2. 3. Аналог Alexey Maslov . Но "развития" в этом варианте не получится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:19 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
beruminнасколько я понимаю, речь идет о том где получать в локальную переменную ID, полученную инкрементом - внутри lock - или снаружи Без блокировки будет полная не разбериха в нумерации... А с блокировкой только один процесс (блокирнувший первым) получит т.с. доступ к телу. Все остальные будут получать его (доступ) по некой очереди... Но никак все вместе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:22 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
Даже вот так нужно Код: plaintext 1. 2. 3. 4. 5. 6. 7. Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:24 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
Потому как в начальном варианте таки может уже показать значение от другого процесса, т.к. блокировка-то уже снята и мог пройти следующий инкремент... ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:26 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
krvsaberuminно два процесса одновременно могут обратиться к @gbl и получат одинаковое значение Это уже какой-то нонсенс... "Обратиться" т.е. читать могут все процессы. Но получить одинаковые номера никак не могут. Иначе бы у нас нумерация карточек полетела бы под откос. все зависитот нагрузки и влияния фазы луны. я не знаю как уж точно реализовано внутри каше, но теоретически Код: plaintext 1. 2. 3. 4. процесс 2 ждет снятия лока (1) процесс 1 делает инкремент и снимает лок (2,3) переходит к (4) процесс 2 получает свобождение лока (1) и выполняет инкремент (2,3) и переходит к (4) платформа i386 так или иначе однопользовательская... две задачи все равно не поделят один винчестер (тут хоть спорить не будем ? ;-) ) в итоге существует вероятность того что две задачи на шаг(4) прийдут одновременно (или один процесс будет на шаге 4, второй успеет выполнить шаг 2) и оба процесса получают одинаковое значение @gbl а если мы команду (4) перенесем перед (3) то локальную переменную мы заполним внутри лока, тем самым не дадим возможность изменения @gbl другим процессом на период считывания значение с винчестера (бд) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:29 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
krvsa, итого подходящий вариант Код: plaintext 1. 2. 3. 4. я так понимаю мы объясняли одно и тоже, но разными словами ... но к конкретной проблеме (топику) это отношения все-таки не имеет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:33 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
berumin , я же уже писал, что пункты 3 и 4 нужно обязательно (!) поменять местами! Поскольку блокировка уже снята - другие процессы меняют значение и уже что будет присвоено локальной переменной знает только Кащей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:34 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
beruminя так понимаю мы объясняли одно и тоже, но разными словами ... Ага... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:35 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
berumin , так, на всякий случай... Проверку целостности БД давно делали? Может из-за какого разрушения там чего-то пошаливает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:37 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
krvsa krvsa berumin , так, на всякий случай... Проверку целостности БД давно делали? Может из-за какого разрушения там чего-то пошаливает? я ж говорю, случается по непонятным законам... пару раз удавалось "быстро" снять базы (сделать копии) и посмотреть что в них, при этом бд были целыми. просто ситуация - делается расходный документ, снимается с остатков товар , документ печатается - все это в разных стадиях (и разные вызовы) на delphi и занимает минуту/другую. Т.е. документ сформирован, есть итд... а в следующий момент - товар на остатке, документа нет. процедур уничтожения документов в прикладной задаче нет. при этом висит еще процесс который выдергивает данные для другой БД - так вот один раз получилось взять бд где было видно что был документ , была с ним работа, и потом он просто исчез. Сорри что повторяюсь в описании проблемы. ps спасибо за внимание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2010, 14:48 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
если такое происходит регулярно, то вычислить думаю возможно, может где-то в коде у вас вдруг стоит TROLLBACK, который и откатит все это можно поставив глобал(для Каше5.0) или всю базу на журналирование узнав примерное время события, глобал, и еще более точные индексы, можно написать программку, которая прочитает журнал, и просмотрит все изменения в глобале которые могли на это повлиять в журнале, записывается начало транзакции, подтверждение транзакции, и думаю откат тоже записывается, таким образом вы можете попытаться восстановить события на момент когда произошел откат один раз мне нужно было вычислить, куда пропадают, странным образом данные, так вот клиенты выслали мне БД и журнал за то время когда произошел сбой, и так как используемая программа все время записывает в специальный глобал режим с которым она работает, я смог вычислить до режима который вероломствовал, а там уже автор того когда нашел и исправил ошибку. так что, если у вас не будет откатов и в каком то месте просто киляются нужные данные, можно добавить логирование текущего режима, чтобы вычислить какой код мог повлиять на данные _________________________________ Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 17:23 |
|
||
|
Откат глобалов
|
|||
|---|---|---|---|
|
#18+
berumin я ж говорю, случается по непонятным законам... пару раз удавалось "быстро" снять базы (сделать копии) и посмотреть что в них, при этом бд были целыми. Все же прогоните проверку целостности. Буквально пару дней назад я тоже разбирался, почему $O зацикливается на одном из подузлов глобала. Оказалось что база битая... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2010, 10:12 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=36451196&tid=1558214]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 368ms |

| 0 / 0 |
