powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вопрос по dbms_transaction.begin_discrete_transaction
6 сообщений из 6, страница 1 из 1
вопрос по dbms_transaction.begin_discrete_transaction
    #32180710
Фотография Oleg Afanasiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас прочитал что дискретные транзакции
могут ускорить работу , но они не формируют
информации отмены что может привести
к snapshot is too old у других транзакций.

Кто-то может поделиться опытом, насколько
реально увеличение производительности
при использовании дискретых транзакций?
...
Рейтинг: 0 / 0
вопрос по dbms_transaction.begin_discrete_transaction
    #32180742
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процентов на 30. Но обязательно прочитайте ограничения на такие транзакции. Иначе будете ругать оракл или посылать жалобные письма в форумы. Ограничений слишком много, чтобы такие транзакции использовать слишком часто.
...
Рейтинг: 0 / 0
вопрос по dbms_transaction.begin_discrete_transaction
    #32180811
Фотография Oleg Afanasiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу , спасибо
Уже читаю :_)
...
Рейтинг: 0 / 0
вопрос по dbms_transaction.begin_discrete_transaction
    #32181188
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже решил почитать про дискретные транзакции
Читаю:
Код: plaintext
As with other transactions, the uncommitted changes of a discrete transaction are not visible to concurrent transactions. For regular transactions, undo information is used to re-create old versions of data for queries that require a consistent view of the data. Because no undo information is generated for discrete transactions, a discrete transaction that starts and completes during a long query can cause the query to receive the  "snapshot too old"  error if the query requests data changed by the discrete transaction. For this reason, you might want to avoid performing queries that access a large subset of a table that is modified by frequent discrete transactions.


Т.е. если какая-то другая транзакция запросит данные измененные дискретной транзакцией то я получу "snapshot too old"

Провожу тест.
ORACLE 8.1.7
Выставил параметр
_discrete_transactions_enabled = 'TRUE'
Дебажжу транзакцию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
declare 
   -- Local variables here
 
  i integer;
begin
   -- Test statements here
 
  dbms_transaction.begin_discrete_transaction;
  SELECT balance_id INTO i from balance WHERE BALANCE_ID= 1 ;   
  UPDATE balance  SET def= 1  WHERE BALANCE_ID= 1 ;  
  DBMS_OUTPUT.put_line('Здесь');  -- тут останавливаемся 
 
  COMMIT;
end;


В другой сессии выполняю запрос
Код: plaintext
SELECT * FROM BALANCE_DICT


Всё проходит на ура. Почему?
Я точно изменяю тот же блок, что и читаю.

Выполняю второй тест
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare 
   -- Local variables here
 
  i integer;
begin
  SELECT balance_id INTO i from balance WHERE BALANCE_ID= 1 ;   
  DBMS_OUTPUT.put_line('Здесь');  -- тут останавливаемся 
 
  COMMIT;
end;


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare 
   -- Local variables here
 
  i integer;
begin
   -- Test statements here
 
  dbms_transaction.begin_discrete_transaction;
  UPDATE balance  SET def= 1  WHERE BALANCE_ID= 1 ;  
  DBMS_OUTPUT.put_line('Здесь'); 
  COMMIT;
end;


Всё опять проходит на ура.
Может быть я что-то неправильно сделал?
...
Рейтинг: 0 / 0
вопрос по dbms_transaction.begin_discrete_transaction
    #32181226
Vladimir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думал, что после commit любая транзакция завершается. Put_line не останавливает работу сессии и в первой сессии завершается транцакция. Если я не прав - поправьте пожалуйста.
...
Рейтинг: 0 / 0
вопрос по dbms_transaction.begin_discrete_transaction
    #32181240
Фотография Eter Panji
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вот поэтому я дебажжу. Там комментарий указывает на место остановки.
Просто останавливаться на DBMS_OUTPUT это моя страсть.
Строка ничего не значит, поэтому побочных никаких подлостей от нее ждaть не приходится.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / вопрос по dbms_transaction.begin_discrete_transaction
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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