Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Commit и CommitRetaining 
:(
    Опции темы
Delphist
Дата 14.3.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(Deniz @  14.3.2008,  12:54 Найти цитируемый пост)
сл-но только они и не попадут под сборку мусора. Мусор все равно соберется. 

Какое-то противоречие

И еще если у меня транзакция в открыта режиме ReadCommited, то тогда получается что Commited и CommitedRetaining одно, а если в режиме snapshot, то тогда Commited и CommitedRetaining  не много разные вещи, правильно ли понял?


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
TObject
Дата 14.3.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.3.2008

Репутация: 1
Всего: 1



Цитата(Deniz @ 14.3.2008,  11:54)
Для транзакций ReadCommitted committed-изменения других транзакций видны независимо от retain-завершения.
Я это тоже читал, но тут или какая-то неточность или я делаю чтото не правильно, у меня транзакция ReadCommitted с параметрами:
Цитата
write
nowait
rec_version
read_committed

не видит изменения других транзакций, кроме своих, пока не переоткроется НД.
PM MAIL   Вверх
Deniz
Дата 14.3.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(Delphist @  14.3.2008,  16:00 Найти цитируемый пост)
Какое-то противоречие
никакого противоречия нет.
Мусор появляется не только от одной транзакции.
Допустим стартанули 2 транзакции.
1. прочитала, потом добавила/обновила/удалила записи потом Commit.
2. прочитала, потом добавила/обновила/удалила записи потом CommitRetaining.
Так вот мусор от первой транзакции соберется, а от 2 нет.


Цитата(TObject @  14.3.2008,  16:22 Найти цитируемый пост)
не видит изменения других транзакций, кроме своих, пока не переоткроется НД. 
давайте определимся, для кого мы проверяем видимость? Для клиента или сервера?
Так вот для клиента(при CommitRetaining) НД не закрывается и показывается весь текущий локальный кеш для записей.
Новые данные поступят только после переоткрытия, сл-но если нужны правильные(новые) данные, то делать CommitRetaining + DataSet.Open нет никакого смысла, лучше CommiT + DataSet.Open.
И это логично, т.е. CommitRetaining подтверждает другим транзакциям, что данные изменились.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
TObject
Дата 14.3.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.3.2008

Репутация: 1
Всего: 1



To Deniz: В предидущем посте Вы действительно написали не совсем понятно, может думали иначе. 

Цитата
Никакого противоречия нет.
Мусор появляется не только от одной транзакции.
Допустим стартанули 2 транзакции.
1. прочитала, потом добавила/обновила/удалила записи потом Commit.
2. прочитала, потом добавила/обновила/удалила записи потом CommitRetaining.
Так вот мусор от первой транзакции соберется, а от 2 нет.
А вот тут все понятно, я согласен.

Цитата
давайте определимся, для кого мы проверяем видимость? Для клиента или сервера?
Конечно же для клиента, сервер видит изминения в обеих случаях.
PM MAIL   Вверх
Deniz
Дата 14.3.2008, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(TObject @  14.3.2008,  17:34 Найти цитируемый пост)
Конечно же для клиента, сервер видит изминения в обеих случаях. 
а какие изменения можно увидеть на клиенте, не переоткрыв НД? Это же как отчет, напечатал смотришь, второй раз напечатал, смотришь новые данные.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
TObject
Дата 14.3.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.3.2008

Репутация: 1
Всего: 1



Цитата(Deniz @ 14.3.2008,  15:51)
а какие изменения можно увидеть на клиенте, не переоткрыв НД? Это же как отчет, напечатал смотришь, второй раз напечатал, смотришь новые данные.

Я понимаю. Просто затупил на счет написаного в статье. Уже дошло. smile
PM MAIL   Вверх
Delphist
Дата 14.3.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(Deniz @  14.3.2008,  14:42 Найти цитируемый пост)
Допустим стартанули 2 транзакции.
1. прочитала, потом добавила/обновила/удалила записи потом Commit.
2. прочитала, потом добавила/обновила/удалила записи потом CommitRetaining.
Так вот мусор от первой транзакции соберется, а от 2 нет.

А почему от второй не убирается мусор, ведь же CommitRetaining как бы содерджит в себе Commit, т.е. данные одназначно закомичены и откатить их нельзя, зачем тогда сервер сохраняет мусор (промежуточные изменения)?


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
CompWorm
Дата 14.3.2008, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



да, интересная тема.
Цитата

зачем тогда сервер сохраняет мусор

это особенно интересно... 
и как бы его вычистить безболезненно))


--------------------
PM MAIL   Вверх
TObject
Дата 15.3.2008, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.3.2008

Репутация: 1
Всего: 1



Цитата
А почему от второй не убирается мусор, ведь же CommitRetaining как бы содерджит в себе Commit, т.е. данные одназначно закомичены и откатить их нельзя, зачем тогда сервер сохраняет мусор (промежуточные изменения)?

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

Цитата
и как бы его вычистить безболезненно))

Ну во-первых в сборке "мусора" участвует каждая транзакция, в том числе и read-only.
Во-вторых backup БД делает уборку "мусора".
В-третьих параметр sweep interval задает значение при достижении которого произойдет sweep.

PM MAIL   Вверх
CompWorm
Дата 15.3.2008, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



TObject, спасибо


--------------------
PM MAIL   Вверх
Deniz
Дата 17.3.2008, 06:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(CompWorm @  15.3.2008,  02:07 Найти цитируемый пост)
и как бы его вычистить безболезненно)) 
делать COMMIT, а мусор сам соберется со временем, если только sweep interval > 0, если 0 мусор вообще собираться не будет


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Delphist
Дата 17.3.2008, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(TObject @  15.3.2008,  02:46 Найти цитируемый пост)
транзакция которая подтерждена по CommitRetaining остается активной, а соответсвенно является "заинетесованной" 

Что значит "заинетесованной", не совсем понятно?


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0887 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.