Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вычисления PL/SQL vs С  [new]
Mantrid
Member

Откуда: Южный Урал
Сообщений: 43
Здравствуйте.

Есть БД с таблицами на несколько миллионов записей. На этой БД есть процедуры на PL/SQL, которые несколько часов проводят какие-то вычисления с таблицами. Чаще всего в подобных процедурах стоит вложенный for по курсорам.
Вопрос: есть ли смысл реализации подобных процедур на стороне клиента на Си-подобном языке?
Буду рад выслушать разумные доводы за и против, дабы остудить пыл некоторых горячих голов.
PS: Предложения побить разработчиков не принимаются, т.к. это ничего не даст.
24 мар 20, 09:04    [22104895]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Zmeelov2
Member

Откуда:
Сообщений: 624
Mantrid, на мой взгляд - не имеет.
Причины:
1. Добавляются расходы на доставку данных на клиента.
2. Сервер (если это действительно сервер) априорно выделяет на задачу большие мощности, чем может быть выделено на самой навороченной рабочей станции.

Несколько миллионов записей - объем не очень большой, скорее малый. Копать в сторону оптимизации серверных процедур, избавления по возможности от курсоров, предварительной подготовки данных. Индексы, планы запросов, пересбор статистики, хинты - в порядке возрастания. И найдите толкового ДБА.

Сообщение было отредактировано: 24 мар 20, 09:11
24 мар 20, 09:10    [22104900]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 948
Zmeelov2,
1 - Вопрос в том, насколько они значительны.
2 - n рабочих станций.

В общем надо бенчить.

Сообщение было отредактировано: 24 мар 20, 09:14
24 мар 20, 09:14    [22104903]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 948
Zmeelov2
Копать в сторону оптимизации серверных процедур

Вангую, что там всё будет работать на или одном ядре или бешено переключать контекст.
24 мар 20, 09:16    [22104904]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
-2-
Member

Откуда:
Сообщений: 15279
Mantrid
на Си-подобном языке?
Достали нот, баса, альта, две скрипки...
Mantrid
на стороне клиента
А вы, друзья, как не садитесь...
В плане производительности зависит от... В плане стоимости тоже.
24 мар 20, 09:24    [22104908]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29738
Mantrid
Вопрос: есть ли смысл реализации подобных процедур на стороне клиента на Си-подобном языке?
Если это является заметной нагрузкой на CPU сервера БД, которая вытесняет другую полезную нагрузку, то возможно да.
Тупое правило: работает и всех более менее устраивает - не лезь ломать, не понимаючи.
24 мар 20, 09:28    [22104911]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18274
Для начала есть смысл попробовать Native компиляцию если затык именно в вычислениях
24 мар 20, 11:00    [22104959]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
mayton
Member

Откуда: loopback
Сообщений: 45379
Как выглядит этот вложенный for? Сколько уровней?

Хотелось цифры узнать по количеству итераций.

Как распределено время? Эти несколько часов.
24 мар 20, 11:17    [22104971]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8455
Если там не идет кодирования Bitmap в JPEG на PL/SQL - 90% что станет только хуже

Любой обмен по сети, это на несколько порядков более трудоемкая задача, чем какие-то расчеты. В Oracle (+например Allround Automation PL/SQL Developer) есть профайлер, стоит сначала запустить на нем и посмотреть, какие конкретно строки кода "стоят". С большой вероятностью, затык всего лишь на нескольких конструкциях/функциях и вполне вероятно, что совершенно не "вычисления"

IMHO & AFAIK
24 мар 20, 11:25    [22104976]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 7980
Mantrid
Чаще всего в подобных процедурах стоит вложенный for по курсорам.
Row by row, slow by slow... (c) Tom Kyte
24 мар 20, 11:25    [22104977]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
mayton
Member

Откуда: loopback
Сообщений: 45379
Для БД вложенные циклы вобщем-то не нужны. Они заменяются на декартовы соединения.

Но если для данной задачи основная нагрузка идет не на fetch строк на именно на вычислния
тогда имеет смысл адаптировать задачу под C-native code. Но сначала попробовать native опцию
для PL машины как предложили выше.
24 мар 20, 11:51    [22104991]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8455
На самом деле, для ряда задач, PL/SQL сильно НЕдоязык. Нет нормальных структур данных. Списки, деревья, HashMap'ы, указатели (на худой конец).

Делать серьезные расчетные алгоритмы на одних массивах и "Basic"'е - то еще удовольствие. (поиск по графам, обработка ГЕОданных, парсинг RTF и так далее).

IMHO & AFAIK

Но если код есть и работает, но медленно - то первым делом запускать профайлер. А потом уже думать, имеет ли смысл переводить на что-то еще и/или выносить на клиента.
24 мар 20, 12:23    [22105007]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2260
Leonid Kudryavtsev,

во времена семерки, был на курсах в Москве (фирма INT),
так те хвалились что проводят расчеты крыла самолета
утром выгружали данные из оракля,
днем общитывали условно на "C",
результаты загружали в базу,
ночью что-то там "интегрировали/обобщали" средствами оракля,
с утра ...

.....
stax
24 мар 20, 12:24    [22105008]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
mayton
Member

Откуда: loopback
Сообщений: 45379
Да я плюс.
24 мар 20, 12:25    [22105010]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
-2-
Member

Откуда:
Сообщений: 15279
Leonid Kudryavtsev
на одних массивах
В pl/sql нет массивов.
Leonid Kudryavtsev
Списки, деревья, HashMap'ы
Это в pl/sql называют коллекциями.
Leonid Kudryavtsev
указатели (на худой конец).
Наличие в языке явно выраженных "указателей" есть следствие ограниченности ранних компиляторов.
24 мар 20, 12:42    [22105024]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8455
Задачи, в которых я бы в гробу видел PL/SQL (и с которыми реально сталкивался в Oracle)
1. Парсинг RTF.
2. Обработка геоданных. Банальная операция преобразования координат из WSG-84 в Гугле Сферикал Меркатор и обратно, на free либах в Java практически мгновенно (минуты), в Oracle часы, а то и сутки (слои карты Санкт-Петербурга)
3. Электронная подпись XML
4. Кодировка/декодировка JPEG
и так далее

Нет, любители могут и на SELECT'ах, PL/SQL'ах реализовать, а я - пасс.
24 мар 20, 12:52    [22105029]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
mayton
Member

Откуда: loopback
Сообщений: 45379
В идеале задачу надо свести к коллекциям примитивов. И если памяти UGA хватит для объема задачи - то
наполнить эти массивы из курсоров нужными данными. И решить задачу циклами. Есссно с волшебным
ключиком =NATIVE.

Короче - следовать лучшим традициям column-oriented систем.
24 мар 20, 12:53    [22105031]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29738
Leonid Kudryavtsev
указатели (на худой конец).
Это признак плохого языка.
24 мар 20, 14:47    [22105109]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
mayton
Member

Откуда: loopback
Сообщений: 45379
Leonid Kudryavtsev

4. Кодировка/декодировка JPEG
и так далее

Это вообще лютый треш.
24 мар 20, 14:52    [22105112]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8455
mayton
Это вообще лютый треш.

Ну тут пару дней назад был топик, про вычисление преобразования Фурье на SELECT'ах )))
зачем это было нужно автору, я не знаю.
24 мар 20, 14:54    [22105114]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8455
И как пример реальности даже такого треша, на текущем месте работы очень сильно хотели картинку с QR-кодом на Pl/SQL делать. Но не разобрались/не получилось. В результате вынесли на Web-Server (PHP) и дергают из PL/SQL через UTL_HTTP.
24 мар 20, 14:57    [22105116]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
mayton
Member

Откуда: loopback
Сообщений: 45379
Leonid Kudryavtsev
mayton
Это вообще лютый треш.

Ну тут пару дней назад был топик, про вычисление преобразования Фурье на SELECT'ах )))
зачем это было нужно автору, я не знаю.

1) Мозговые пятничные брейн-факи
2) Задача заданная на собеседовании.

Нет никакого промышленного смысла юзать преобразования Фурье на селектах. Тем более там - двумерное.
24 мар 20, 14:57    [22105117]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 693
mayton
Leonid Kudryavtsev
пропущено...

Ну тут пару дней назад был топик, про вычисление преобразования Фурье на SELECT'ах )))
зачем это было нужно автору, я не знаю.

1) Мозговые пятничные брейн-факи
2) Задача заданная на собеседовании.

Нет никакого промышленного смысла юзать преобразования Фурье на селектах. Тем более там - двумерное.
При задании сей задачи на собеседовании это является явным маркером, что собеседующий не в адеквате.
Тот случай когда сойдутся во мнении и те, кто без тудностей могут натянуть модель и те, кто вообще без понятия с какой стороны подойти к решению.
24 мар 20, 22:47    [22105459]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 693
Mantrid
вложенный for по курсорам
Ну и куда здесь лепить С?
Mantrid
дабы остудить пыл некоторых горячих голов
Остужают пыл лучше всего цифры.
Пусть либо продемонстируют выигрыш либо остудятся сами.

Для ознакомления
PL/SQL vs JAVA vs C

В теме по ссылке анализируются два класса задач
1) сложный алгоритм с атомарными типами на входе и выходе
2) single row function

Это НЕ имеет никакого отношения к попыткам вынесения cursor for loop из PL/SQL.
24 мар 20, 22:53    [22105461]     Ответить | Цитировать Сообщить модератору
 Re: Вычисления PL/SQL vs С  [new]
feagor
Member

Откуда: Москва
Сообщений: 244
Mantrid,
разберитесь сначала что конкретно тормозит - посмотрите AWR-ASH отчёты, снимите 10046 с проблемных сессий, проанализируйте события которые занимают время чтобы была конкретика, а не " какие-то вычисления с таблицами". Возможно проблема не в вычислениях а в запросах, которые вполне вероятно, что можно оптимизировать.
БД с таблицами на несколько миллионов записей - это не показатель большого объема. Оракл прекрасно и с большими объемами работает
25 мар 20, 00:41    [22105477]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить