powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как в trace понять длительность commit-а
8 сообщений из 8, страница 1 из 1
Как в trace понять длительность commit-а
    #40039909
serg_777777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть java приложение, дамп потоков которого показывает, что дольше всего потоки проводят времени на коммите:
oracle.jdbc.driver.PhysicalConnection.commit

В транзакции выполняется несколько insert-ов, update и судя по трейсу все они выполняются достаточно быстро (2-8мс).
Значения c, e, ela тоже не высокие и все вроде бы красиво и бьется, но вот сколько выполнялся commit в trace не отраженно(или я не понимаю как искать).

Приведу вырезку trace с коммитом :
...
CLOSE #140:C=11, e=11, dep=0, type=1, tim=25068196605408
XCTEND rlbk=0, rd_only=0, tim=25068196605446
WAIT #0: name='log file sync' ela= 596 buffer#=34556 sync scn=105513015 p3=0 obj#=-1 tim=25068196606411
WAIT #0: name='SQL*Net message to client' ela= 1 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=25068196606470
....

Пробовал читать Кэри Милсапа, форум, но так и не разобрался как найти продолжительность выполнения коммита.

Верно ли утверждение commit_duration(mks)= 25068196605446 - 25068196605408 = 38mks ?

Но с точки зрения Java-приложения длительность коммит-а исчисляется десятками мс.

Прошу подсказать.
Спасибо.
...
Рейтинг: 0 / 0
Как в trace понять длительность commit-а
    #40039932
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
serg_777777

Верно ли утверждение commit_duration(mks)= 25068196605446 - 25068196605408 = 38mks ?

Это всё коммит
Код: plsql
1.
2.
3.
XCTEND rlbk=0, rd_only=0, tim=25068196605446
WAIT #0: name='log file sync' ela= 596 buffer#=34556 sync scn=105513015 p3=0 obj#=-1 tim=25068196606411
WAIT #0: name='SQL*Net message to client' ela= 1 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=25068196606470


Первая запись это конец транзакции, просигналили LGWR про commit,
затем сессия ждёт, когда LGWR запишет всё на диск и sync destinations, это ('log file sync') обычно и считается временем коммита - 596 us
затем сессия ждёт когда ответ для клиента запишется в tcp buffer - 1 us

Сюда не входит сетевое время. Если в приложении до и после коммита исключительно датабазные вызовы, то измерив 'SQL*Net message from client' до и после коммита можно примерно понять сколько времени этот round trip занимает.
...
Рейтинг: 0 / 0
Как в trace понять длительность commit-а
    #40039939
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще интересно, как в трейсе определить был ли коммит распределенной транзакции (2-фазный) и в качестве кого выступала данная сессия
...
Рейтинг: 0 / 0
Как в trace понять длительность commit-а
    #40039948
serg_777777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander Anokhin

[/src]
Первая запись это конец транзакции, просигналили LGWR про commit,
затем сессия ждёт, когда LGWR запишет всё на диск и sync destinations, это ('log file sync') обычно и считается временем коммита - 596 us

на всякий случай уточню :)
Я правильно понимаю, что коммит целиком, с точки зрения Oracle (без сетевых расходов в виде пересылок и т.п.), занял 596+1us(мкс) ?

Следующая строка, которую я не указал:
WAIT #0: name='SQL*Net message from client' ela= 77412 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=25068196683904

уже к этому коммиту не относится же, ведь это фактически следующий вывоз. Верно?
...
Рейтинг: 0 / 0
Как в trace понять длительность commit-а
    #40039958
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
serg_777777

Я правильно понимаю, что коммит целиком, с точки зрения Oracle (без сетевых расходов в виде пересылок и т.п.), занял 596+1us(мкс) ?

Выше я сказал "это всё коммит", не совсем верно. С точки зрения базы данных коммит занял 596 us. С точки зрения приложения в коммит на стороне базы можно включить 'SQL*Net message to client' 1 us и network roundtrip.

serg_777777
Следующая строка, которую я не указал:
WAIT #0: name='SQL*Net message from client' ela= 77412 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=25068196683904

уже к этому коммиту не относится же, ведь это фактически следующий вывоз. Верно?

Это время ожидания от момента когда данные отправились к клиенту, до следующего вызова.
...
Рейтинг: 0 / 0
Как в trace понять длительность commit-а
    #40041195
Timur Akhmadeev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно посмотреть на Java код с показаниями времени + соответствующий sql trace целиком?
...
Рейтинг: 0 / 0
Как в trace понять длительность commit-а
    #40045000
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serg_777777
Есть java приложение, дамп потоков которого показывает, что дольше всего потоки проводят времени на коммите
Прошу подсказать.
Спасибо.

Подсказка: COMMIT WRITE NOWAIT
...
Рейтинг: 0 / 0
Как в trace понять длительность commit-а
    #40045245
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
serg_777777
Есть java приложение, дамп потоков которого показывает, что дольше всего потоки проводят времени на коммите
Прошу подсказать.
Спасибо.

Подсказка: COMMIT WRITE NOWAIT

Но лучше так не делать, а разобраться почему "дольше всего потоки проводят времени на коммите" и устранить проблему.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как в trace понять длительность commit-а
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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