Deutsch

​Совсем не понимаю...

232  
Murr патриот06.07.18 11:37
Murr
NEW 06.07.18 11:37 

Совсем не понимаю...


Простая функция (код не мой - можно тапки бросать мимо):

Public Function fillDT(ByVal sql As String) As DataTable
Dim oraCN As New OracleConnection
Dim oraDA As New Oracle.DataAccess.Client.OracleDataAdapter
Dim DT As New DataTable
Dim oraCmd As New OracleCommand
Try
oraCN.ConnectionString = _connectionString
oraCN.Open()
Debug.Print(sql)
oraCmd.CommandText = sql
oraDA.SelectCommand = oraCmd
oraDA.SelectCommand.Connection = oraCN

DT.Columns.GetEnumerator()
oraDA.Fill(DT)

Return DT
Catch ex As Exception
Email.SendMailMessage(_senderAddress, My.Settings.emailErrorRecipient, "", "", _
My.Computer.Name.ToString & ": " & _
"error in: DANenprod1." & _
System.Reflection.MethodBase.GetCurrentMethod.Name.ToString, _
sql & ControlChars.CrLf & _
ex.ToString)
Return DT
Finally
oraCN.Dispose()
End Try

End Function

Успешно работала несколько лет.

Никаких изменений в код мною не вносилось.

Передаваемая СКЛ-строка - сложная, но относительно быстрая - в дбФорже-студии выполняется за 1.578 сек.


Что могло измениться так, что oraDA.Fill(DT) не может выполнится в течении 12-15 часов?

Ошибок выполнения или таймаутов - нет.

Данных - да, много, но ведь работало...

#1 
Murr патриот06.07.18 15:11
Murr
06.07.18 15:11 
в ответ Murr 06.07.18 11:37

Хммм...

Север точно отдает данные...

Весь набор строится... за пару секунд...

Весь набор можно читать... если читать оракловским реадером - где-то за 56 секунд... это трансфер по сети и навигация по записям...

Весь набор можно загнать в таблицу... построчно... читаем поля, формируем строку, добавляем в таблицу... где-то 10 минут...


Что-же, пилять, билли забубенил в винде, что процессу не хватает 16 часов?..

#2 
Murr патриот09.07.18 10:02
Murr
NEW 09.07.18 10:02 
в ответ Murr 06.07.18 15:11

За выходные успел померить время и объем данных которое перекачиваются по запросу.

Данных "не много" - 130 Мб... время перекидывания с сервера на клиента - 2 часа 39 минут...

С утра, пока никого не было, шеф запустил запросик и за 20 минут все получил...

Сейчас - все в работе и... все, задница - полтора часа,,,


Как решать - не представляю...

Могу понизить объем данных для перекачки где-то в два раза, но это только за счет отсечения

условно-устаревших данных...

Могу еще извратится с хранением основного массива на клиенте и переброской дельты, но

тут работы дохрена... и в пустую - скоро переход на новую систему,,,


В общем - пока на все плюну... даже на недоделанный репорт... и погляжу в аутентификацию

пользователей и лицензирование под ВKФ...

#3 
eklmn постоялец09.07.18 10:58
eklmn
NEW 09.07.18 10:58 
в ответ Murr 06.07.18 11:37

Проблемы с железом исключил?

#4 
Murr патриот09.07.18 12:56
Murr
NEW 09.07.18 12:56 
в ответ eklmn 09.07.18 10:58

Проблемы с железом не являются моими проблемами.

А так - да, "исключил" - не хватает ресурсов (памяти) на сервере для всех юзверей, он свопит по черному и отдает все медленно.

#5 
Murr патриот2 дня назад, 13:42
Murr
NEW 2 дня назад, 13:42 
в ответ Murr 09.07.18 12:56
<p>Обнаружилось следующее.</p><p>Оракле имеет свой свап/каш... и этот кеш отвалился... почему - не знаю, не моя епархия...</p><p>Сделал следующее - на сервере закачал все данные в локальную таблицу вместо кеша.</p><p>Запрос на заполнение таблицы выполнился за 4 сек. </p><p>Перевел все на выборку из этой таблицы.</p><p><br></p><p>Не помогло - данные с Оракла по прежнему поступают в час по чайной ложке.</p><p>Можно посмотреть как пишутся на диск - Фар волне отрисовывает построчные записи.</p><p><br></p><p>Сейчас колдую с буфферизацей. Может пошло чуток быстрее, но не сильно...</p><p><br></p><p>Где копать уже не представляю...</p><p><br></p><p>Кто посоветует что поковырять?</p>
#6 
Murr патриот2 дня назад, 18:41
Murr
NEW 2 дня назад, 18:41 
в ответ Murr 2 дня назад, 13:42

Выяснилась еще одна интересная штука - если экспортировать в ЦСВ прямо на сервере - процесс занимает всего секунд 10...


Получается, что где-то что-то с сеткой... но по сетке все летает - 60-70 мб...


Ни черта не понимаю... хммм

#7 
Murr патриотВчера, 12:36
Murr
NEW Вчера, 12:36 
в ответ Murr 2 дня назад, 18:41

Померял реальный трансфер с сервера на клиента.

Общее время трансфера - чуть больше 5 секунд. Остальные 49 минут - чтение полей данных из стрема...


Не понимаю что поменялось настолько, что все начало тормозить...


Блин, видимо придется тестить время чтения каждого отдельного поля... пипец...

#8 
Murr патриотВчера, 18:29
Murr
NEW Вчера, 18:29 
в ответ Murr Вчера, 12:36

Кажется нашел возможную причину....


Не уверен, но...


- одно из полей имело значение NULL

- после замены значения поля протестировал загрузку по отдельным полям - время сократилось до 8 минут.


Никак не могли быстро обработать NULL?


Надо посмотреть что будет на стандартной загрузке таблицы...

#9