|
|
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
Вычислительная задача была внесена во внешнюю функцию написанную на Си, для ускорения вычислений. При тестировании данной функции на Си время оказалось следующим: при первом запуске функции - 20 секунд, а при следующих запусках -0.6 секунд. Я объясняю такую разность показателей времени тем, что оракл при первом запуске функции загружает библиотеку в память, на что тратится время, а при последующих вызовах функции библиотека уже в памяти и следовательно загружать ее не нужно, что отражается на времени. Меня интересует, верно ли я объясняю разницу времени и если верно, то как можно библиотеку раз загрузить и чтоб оракл ее оставил в памяти и не выгружал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 12:51:59 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
relav, Внешние процедуры запускаются листенером как отдельный процесс. Prespawn настраивается в листенере. Но 20-0.6 секунд на запуск процесса это перебор. Причина в другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 13:09:34 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
relavЯ объясняю такую разностьНу я надеюсь ты проанализировал что значит каждая из букв DDL и как выполняется связывание конкретно в Оракле через extproc. relavможно библиотеку раз загрузить и чтоб оракл ее оставил в памяти и не выгружал?Нельзя. Отдельный экземпляр для каждой сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 13:11:38 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopкаждая из букв DLLМдэээ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 13:12:42 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
relav, Сколько занимает первый и последующий вызовы при линковке к своему бинарнику а не к Ораклу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 13:17:35 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
Если вычисления подразумевают выделение заметного объема памяти (особенно мелкими порциями), то дело может быть в этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 13:22:44 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, не понимаю, что имеется ввиду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 13:22:52 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
relavdbms_photoshop, не понимаю, что имеется ввиду? С очевидностью имеется ввиду чистый эксперимент - выполнение вычислений данной библиотекой без привлечения oracle. Напишите программку (скорее всего уже написана - ведь тестировали как-то), которая выполнит ровно те же вычисления, что и при вызове через oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 13:25:05 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
Вряд ли под "вычислениями" подразумевается что-то безумное сложное над 2-мя числами на 20 сек.. А вот дальше вопрос, что дергает автор из этой библиотеки. Если C-код дергает Oracle-левые ф-ции, то причина может быть банальная: SGA, buffer cache и так далее ))) От замены PL/SQL на C производительность может повысится, а может и понизиться. Сама по себе латинская буква "c" в название языка программирования прирост производительности НЕ гарантирует ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 13:31:02 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, а с этим не может быть связана задержка? After the external procedure completes, the agent remains active throughout your Oracle Database session; when you log off, the agent is killed. Consequently, you incur the cost of launching the agent only once, no matter how many calls you make. Still, you should call an external procedure only when the computational benefits outweigh the cost. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 14:20:54 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
Да с чем угодно может быть связана задержка. Не очень понятно, какую задачу/проблему решаете. В зависимости от задачи - нужно выбирать средство. Подход "на С быстро, на PL/SQL медленно" очень детский. Так же как и подход "при первом запуске функции - 20 секунд, а при следующих запусках -0.6 секунд. Я объясняю..." Родные средства Oracle: SQL (Select), PL/SQL, в какой-то мере Java... внешние: C и прочее. Выигрываете в производительности арифметических операций, проигрываете в необходимости осуществлять вызовы и передавать данные. -2-Внешние процедуры запускаются листенером как отдельный процесс. Prespawn настраивается в листенере. Но 20-0.6 секунд на запуск процесса это перебор. Причина в другом. Плюсуюсь. Возможно у автора сами вычисления быстрые, а при первом вызове выполняется какая-то долгая инициализация данных. Но это все равно проблема алгоритма/программиста, а не Oracle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 14:44:23 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevДа с чем угодно может быть связана задержка. Не очень понятно, какую задачу/проблему решаете. В зависимости от задачи - нужно выбирать средство. Подход "на С быстро, на PL/SQL медленно" очень детский . Так же как и подход "при первом запуске функции - 20 секунд, а при следующих запусках -0.6 секунд. Я объясняю..." Родные средства Oracle: SQL (Select), PL/SQL, в какой-то мере Java... внешние: C и прочее. Выигрываете в производительности арифметических операций, проигрываете в необходимости осуществлять вызовы и передавать данные. -2-Внешние процедуры запускаются листенером как отдельный процесс. Prespawn настраивается в листенере. Но 20-0.6 секунд на запуск процесса это перебор. Причина в другом. Плюсуюсь. Возможно у автора сами вычисления быстрые, а при первом вызове выполняется какая-то долгая инициализация данных. Но это все равно проблема алгоритма/программиста, а не Oracle. +1 я бы назвал - "святая" истина предпоследнего десятилетия прошлого века 2 ТС с той поры столько "более других" вариантов явилось и пере-появилось (и это потому, что оно таки болело ) короче, имхо, хотите си - пишите на си, но не забывайте сравнить решение с pl/sql + (например) реалнативкомпиляцией ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2016, 16:23:43 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
-2-relav, Внешние процедуры запускаются листенером как отдельный процесс. Prespawn настраивается в листенере. Но 20-0.6 секунд на запуск процесса это перебор. Причина в другом.Про какой Prespawn идет речь? Может, имеется ввиду Multithreaded extproc Agent ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2016, 03:12:22 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
В коде библиотеки есть функция malloc ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2016, 15:49:25 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
Cristiano_Rivaldo, в коде есть функции OCIMemoryAlloc(). Я делал замер времени в си коде с помощью функции clock и результат оказался удивительным. Время выполнения си программы занимает 5 секунд, а когда вызываешь программу из оракла, оракл отрабатывает 20 секунд, куда девается 15 секунд - не понятно. Код pl/sql привожу: Код: 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. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 17:31:03 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
relav, Для определения узкого места имеет сравнивать один вызов при линковке к сишному бинарнику и один вызов при линковке к Ораклу как тебя уже было сказано. Зачем ты запостил сюда 200 строчек говнокода совершенно непонятно. Если проблема определить где узкое место в pl/sql - используй dbms_trace/dbms_hprof, но по твоему первому посту проблема определить куда уходит время при первом вызове сишной библиотеки. Неужели подход по выкидыванию не нужного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 17:46:09 |
|
||
|
внешняя библиотека на Си
|
|||
|---|---|---|---|
|
#18+
dbms_photoshoprelav, Для определения узкого места имеет смысл сравнивать один вызов при линковке к сишному бинарнику и один вызов при линковке к Ораклу как тебя уже было сказано. Зачем ты запостил сюда 200 строчек говнокода совершенно непонятно. Если проблема определить где узкое место в pl/sql - используй dbms_trace/dbms_hprof, но по твоему первому посту проблема определить куда уходит время при первом вызове сишной библиотеки. Неужели подход по выкидыванию ненужного так сложен для понимания.Fixed. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 17:47:44 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39261104&tid=1888002]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
231ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 547ms |

| 0 / 0 |
