|
|
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
Рассматриваю торможение программы. Сделала трассировку в процессе прохода по циклу (программа выбрала X ID с внешними ключами, по ним подтягивает данные и заполняет табличку). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Заинтересовал особенно один запрос, из 60 секунд ожидания 22 секунды относятся к нему. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. в трассировке вот такое постоянно в конце данного запроса Код: sql 1. 2. 3. 4. 5. 6. 7. То есть SQL*Net message from client идет 2 раза, один раз перед FETCH. Для сравнения нормальный запрос: Код: sql 1. 2. 3. 4. 5. 6. В журнале tkprof к данному запросу план не показывает. Хотя через explain plan получила, план как план по индексу. Меня больше интересует, чего это такое интересное делается в программе, что такие ожидания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2016, 08:58 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
nata44845, На клиенте fetch size никто не трогал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2016, 09:30 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
env, Приложение не мое, что там внутри не знаю. Разработчику предложила пересмотреть вывод данных, может где что лишнее. Есть подозрение, что дело в XCTEND. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2016, 09:43 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
фетчей 755, а записей получено 62. Большинство выполнений интересующего селекта возвращает 0 записей (возможно, клиент ). fetch size ни при чем. в отличие от "нормального" селекта, в данном случае возвращается 0 записей. Поэтому RO-транзакция завершается сразу, по трейсу до формального фетча. может, клиент или сетка тормозит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2016, 17:55 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
Nobody1111, Заметила, если учесть, что трассировку прервала в середине вывода строки, то там 63 строки и 756 фетчей, то есть по 12 на строку, попробую копать в направлении уменьшения количества вызовов. Вот другой вариант работы того же запроса, когда открывают уже готовый документ, тут то с выбором все нормально, в каждой строке, а XCTEND там же... Код: sql 1. 2. 3. 4. 5. 6. 7. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2016, 05:59 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
r Количество строк, возвращаемых вызовом. (Миллсап) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2016, 06:09 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
nata44845, Я бы выдвинул 3 гипотезы: 1. клиент бомбит базу отдельными запросами exec/fetch. Для проверки соберите трассу с событиями 10046 level 8, 10051 level 1. 2. внутри select есть commit 3. autocommit Откуда взялся XCTEND после EXEC на SELECT в RO-транзакции, не ясно. Ничего там нет у вас дополнительно, а ля функций с pragma autonomous_transaction+commit в этом select, аудит, FGA, RLS ? Проверьте того же клиента на других таблицах. Например, вот так выглядит SQL*Plus на 12й версии, где в функции делается commit: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Это, в целом похоже, на то, что у Вас, но только тут SQL*Net message from client после первого fetch. Судя по номерам курсоров в трассе, предположу, что это до 11 версии. Возможно, старые версии так и писали в таких случаях (commit in select-list, например), но надо проверять, клиентский код смотреть. На доступных 12х версиях я не вижу, как сходу это воспроизвести, а клиенты у меня только JDBC с UCP или SQL*Plus, sqlcl. Я бы списал XCTEND на AutoCommit, но тестовый Java класс (JDBC/UCP 12.1) с кое-какими доп патчами UCP на 12й версии так не делают, а других клиентов нет под рукой. Трассировка (10046+10051) августовского UCP на SELECT запросах с включенным AutoCommit Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. Из чего видно, что посылается V8 Bundled Exec, флаг AutoCommit идет в рамках того же SQL*Net пакета (что также по дампам SQL*Net можно отследить), XCTEND нет - "лишних" commit RO-транзакций не наблюдается в отличии от AutoCommit с Read-Write активностью: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. Что это за клиент и какая версия Oracle Server с точностью до патчсета? Приведите клиентский псевдо-код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2016, 08:05 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
SeaGate, SeaGateОткуда взялся XCTEND после EXEC на SELECT в RO-транзакции, не ясно. XCTEND здесь - просто завершение RO-транзакции. XCTEND rlbk=0, rd_only=1 ................ Так же как и у вас: наверняка ни в функции, вызываемой из селекта, ни до селекта в транзакции модификации данных не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2016, 10:19 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
SeaGate, 1) даже отрицать не буду, так оно и есть, бомбит в цикле минизапросами. 2) Внутри точно нету, триггеров на таблицу тоже нету. На других таблицах по разному, некоторые таблицы все стандартно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Некоторые то же самое, но таких единицы и они не в цикле, суммарное ожидание там меньше. Кусочек 10051-1, что тут что из перечня запросов мне не понятно. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. В dbforge этот запрос прогоняла, тоже все стандартно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2016, 10:36 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
SeaGate, Версия 11.2.0.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2016, 10:37 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
возможно, лишний XCTEND - от рекурсивных запросов, которые должны быть в трейсе до приведенного куска. А тормозит клиентская программа вероятнее всего, или ОС клиента, или сеть. SQL*Net message to client отрабатывает быстро, а SQL*Net message from client - десятки мс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2016, 10:48 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
Nobody1111, Не не не, он явно не туда воткнут. И последний трейс я проводила целиком для всей операции, которую сама выполняла, она немного другая, но блок выбора из этой таблицы такой же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2016, 11:05 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
Nobody1111, Nobody1111Так же как и у вас: наверняка ни в функции, вызываемой из селекта, ни до селекта в транзакции модификации данных не было. Вы можете привести кейс, воспроизводящий последовательность записей в трейс файл как у ТС? Конкретно: Код: plsql 1. 2. 3. 4. 5. 6. 7. Где курсор 702016640 это SELECT. В моем примере с commit-ом в функции нет SQL*Net message from client перед FETCH, поэтому это не полное воспроизводство того, что у ТС. Если будет тест-кейс, можно будет сказать, что также, пока я не уверен в этом. Nobody1111наверняка ни в функции, вызываемой из селекта, ни до селекта в транзакции модификации данных не было. Если была функция с автономкой (это было предположение, что она есть), то до селекта могла быть модификация данных. Я пока не вижу по предоставленным данным, что до селекта не было модификации данных. ТС приводил некий нормальный запрос (Для сравнения нормальный запрос:...) с rd_only=1 в конце, но не факт, что то же самое у проблемного запроса. nata44845OPI CALL: type=94 argc=28 cursor= 0 name=V8 Bundled Exec Отдельно от 10046 здесь не факт, что это трасса того же процесса, но, если так, то тут V8 Bundled Exec, т.е. первое предположение отметаем. nata448452pmj6tj8acqq5 Покажите: Код: plsql 1. nata44845Версия 11.2.0.2 32 бита тогда. Кроме номера курсора и адреса вроде ничего не писали. Для номера это великовато, 32 битный адрес в самый раз. Вот 11.2.0.4 x64: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Здесь вижу, что sql_id есть, и адреса 64-битные. nata44845Заинтересовал особенно один запрос, из 60 секунд ожидания 22 секунды относятся к нему. ... Меня больше интересует, чего это такое интересное делается в программе, что такие ожидания. Ну если 60-22=38 секунд устраивает, которые за счет разового выполнения запроса "могут" быть (если 21.69 секунды на 1500 SQL*Net message from client это сеть, а не активность клиента) достигнуты, то пусть программисты перепишут и уйдут от построчных фетчей, фетчат пачками, если допустимо для этого процесса. Здесь я бы исследовал только SQL*Net message to/from client после EXEC, остальное пусть программисты переписывают, чтобы "было быстро". У меня на 12.1.0.2 не получается такая картина сходу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2016, 12:57 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
SeaGate, Поняла тебя, не знаю, зачем тебе план того левого запроса, запустила сразу оба трейса, смешанный трейс будет такой Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. select * from table(dbms_xplan.display_cursor( '3u2v7p5ta8rz1', null)); Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2016, 06:55 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
SeaGateВы можете привести кейс, воспроизводящий последовательность записей в трейс файл как у ТС?Попробовал, не получилось. Правда, сильно не старался. ...вообще, конечно, 11.2.0.2 - сырая версия. Стоило бы на 11.2.0.4 переехать. Возможно, и пропадет этот артефакт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2016, 11:51 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
Nobody1111 Стоило бы на 11.2.0.4 переехать. Возможно, и пропадет этот артефакт. И появится много новых других. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2016, 11:56 |
|
||
|
Ожидание SQL net message from client перед Fetch
|
|||
|---|---|---|---|
|
#18+
envNobody1111 Стоило бы на 11.2.0.4 переехать. Возможно, и пропадет этот артефакт. И появится много новых других. Ну, на ответственных базах с кондачка такие вопросы не решаются. Тестировать, конечно, надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2016, 14:35 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39361565&tid=1886865]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 502ms |

| 0 / 0 |
