Как работать с JDBC SQL Server, Sybase для длительного выполнения и высокого потребления памяти - PullRequest
0 голосов
/ 29 июня 2018

У меня есть пакетное задание, запрашивающее базы данных Sybase и SQL Server. Это пакетное задание может выполняться до 1 дня и более. Мы выполняем это на небольшом наборе данных, и пока нет ошибок с точки зрения времени ожидания соединения. Мои вопросы

  1. Как справиться с этим длительным процессом? Должен ли я настроить период переподключения, чтобы соединение закрывалось и открывалось снова?

  2. Как обработать набор результатов, когда он может вернуться к клиенту с 1 миллионом записей?

РЕДАКТИРОВАТЬ # 1:

Это звучит как общий вопрос для jdbc, но это не потому, что у каждого поставщика базы данных есть свои собственные параметры, такие как выборка размера. Это зависит от каждого провайдера, чтобы поддержать это или нет. Если Sybase не поддерживает это, это означает, что он загрузит все результаты в память сразу.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Согласно https://docs.oracle.com/cd/E13222_01/wls/docs90/jdbc_drivers/sybase.html.

Мы можем установить функцию SetFetchSize (), чтобы определить максимум записей, которые должны храниться в памяти за один раз. Если у вас достаточно памяти, вы можете установить ее на 0. Следовательно, мы можем ограничить объем памяти для каждой выборки, чтобы он не разрушал нашу память.

0 голосов
/ 29 июня 2018

Это общий вопрос, не связанный строго с Sybase (SAP) ASE.

  1. Если вы хотите, чтобы соединение tcp / ip не разрывалось, используйте некоторые параметры поддержки активности для сетевых подключений. Если вы хотите обрабатывать разрывы сетевых подключений, используйте библиотеки опроса подключений.

  2. Вам не нужно хранить весь набор результатов в вашей памяти. Просто читайте свои строки и обрабатывайте их на лету. Если вы хотите извлечь все 1 миллион строк, прежде чем что-то делать с ними, - просто добавьте больше памяти для JVM.

...