Лучшие практики для загрузки больших данных из Oracle в табличную модель - PullRequest
0 голосов
/ 20 марта 2020

Мы создали несколько новых табличных моделей SSAS, которые извлекают данные непосредственно из Oracle. Но после некоторого тестирования мы обнаружили, что при реальных данных о клиентах (с несколькими миллионами строк данных) время обработки go приближается к 4 часам. Наша цель - держать их под 15 минутами (из-за существующей производительности системы). Мы выбираем из Oracle таблиц, чтобы производительность запросов не была узким местом.

Существуют ли общие руководства по проектированию / лучшие практики для обработки такого сценария?

1 Ответ

1 голос
/ 20 марта 2020

Проверьте размер выборки массива на стороне приложения, так как вы можете испытывать задержку в сети. ** Примечание о размере выборки массива: согласно документации Oracle, Размер буфера выборки - это параметр памяти на стороне приложения, который влияет на количество строк, возвращаемых одной выборкой. Как правило, вы балансируете количество строк, возвращаемых с помощью одной выборки (или размера выборки массива), с количеством строк, которые необходимо извлечь.

Низкий размер выборки массива по сравнению с количеством строк, которые необходимо вернуть будет проявляться в виде задержек из-за увеличения обработки на стороне сети и на стороне клиента, необходимой для обработки каждой выборки (т. е. высокой стоимости каждой сетевой передачи в оба конца [SQL*Net протокол]).

Если это так, то на стороне Oracle вы, вероятно, увидите очень высокие ожидания «SQL*Net сообщения от клиента». [Это событие ожидания публикуется сеансом, когда он ожидает получения сообщения от клиента. Как правило, это означает, что сеанс просто простаивает, однако в среде клиент / сервер это также может означать, что либо процесс клиента выполняется медленно, либо имеются задержки в сети. Производительность базы данных не снижается из-за большого времени ожидания для этого события ожидания.]

Как я хотел бы сказать: «SQL*Net - болтливый протокол»; таким образом, даже если Oracle может быть выполнено с обработкой запроса, чрезмерные обходы сети приводят к более медленному времени отклика на стороне клиента. Следует ожидать, что низкий размер выборки из массива может способствовать медлительности, если истекшее время для загрузки данных в приложение намного больше, чем истекшее время для запуска БД SQL; в этом случае время обработки на стороне приложения также может быть фактором, способствующим медлительности [вы можете посмотреть в приложении c способы устранения неполадок / настройки обработки на стороне приложения].

Размер выборки массива не является атрибутом учетная запись Oracle и настройка сеанса на стороне Oracle. Размер выборки массива может быть установлен только на клиенте; для размера выборки массива, который будет использоваться клиентом, настройки БД отсутствуют. Каждое клиентское приложение имеет свой механизм указания размера выборки массива:

  • Informatica: ?? конфигурации. файл параметров ??? настройка на уровне соединения или набора результатов ?? Cognos http://www-01.ibm.com/support/docview.wss?uid=swg21981559
  • SQL* Plus: установить размер массива n
  • Java / JDB C: метод setFetchSize (int row) / * в Statement, PreparedStatement Объекты CallableStatement и ResultSet * / Объект свойств помещает метод «defaultRowPrefetch» ​​http://download.oracle.com/otn_hosted_doc/jdeveloper/905/jdbc-javadoc/oracle/jdbc/OracleDriver.html Другая ссылка на Oracle JDB C DefaultRowPrefetch http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html
  • . Net Oracle. Net Руководство для разработчиков Свойство FetchSize представляет общий объем памяти в байтах, который ODP. NET выделяет для кэширования данных, извлеченных из обхода базы данных. Свойство FetchSize можно установить для объекта OracleCommand, OracleDataReader или OracleRefCursor, в зависимости от ситуации. Он управляет размером выборки для заполнения DataSet или DataTable с использованием OracleDataAdapter.
  • ODB C драйвер: ?? что-то вроде: SetRowsetSize
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...