2012-06-26 2 views
0

Я написал приложение, которое архивирует данные из двух представлений в базе данных SQL Server в разные таблицы в другой базе данных SQL Server на Java с использованием драйвера JDBC 4. То, что меня беспокоит, - это производительность заявление.Архивирование данных между базами данных

Для архивирования 20 сообщений вместе со своими вложениями (только имя и информация о ссылках) требуется около 13 минут, данные состоят из 20 colomns.

Обзор Колонка

smallint(6) 
datetime 
int(11) 
varchar(255) 
varchar(100) 
varchar(100) 
varchar(100) 
text 
int(11) 

int(11) 
varchar(255) 
varchar(255) 
int(11) 

Может кто-то пожалуйста, дайте мне указатели о том, как сделать работу лучше? И скажите, допустимо ли время выполнения, указанное выше, или нет. (Я знаю, что это зависит от ситуации, приложение предназначено быть РОС.)

Что я проверил (EDIT)

Я читал некоторые сообщения на автофиксация, говоря, что вы можете отключить его для улучшения производительности. Я первый проверил Tuts Java, чтобы найти по следующей ссылке

http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#disable_auto_commit

В статье фиксации объясняется. Когда я проверяю цикл for в одном из примеров, commit используется в конце каждого обновления, что логично. Но в чем разница между использованием автоматической фиксации и фиксацией после каждой вставки?

Я использую подготовленные инструкции для вставки в базу данных архива.

Информация после использования отладчика

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

код висит на следующем фрагменте:

 while(rs.next()) 
     { 
      rows = new ArrayList(); 
      for(int collomnCount = 1; collomnCount <= rsmd.getColumnCount(); collomnCount++) 
      { 
       Object fields = rs.getObject(collomnCount); 
       rows.add(fields); 
      } 
      table.add(rows); 
      this.table = table; 
     } 

Я использую этот метод, чтобы сделать информацию из ResultSet более, доступную для меня. Есть ли способ обойти это?

+0

Сделки? PreparedStatements? – hovanessyan

+2

Это слишком медленно. Ваши взгляды слишком медленные? Попробуйте запустить запросы непосредственно в вашей БД. – Andy

+0

Возможно, ваш POC имеет плохой дизайн, поэтому он дает плохую производительность. Попробуйте использовать профилировщик для проверки шеи бутылки в вашем приложении. –

ответ

0

Измерение, изолировать, улучшить.

Все улучшения производительности проходят через цикл. Проблема в том, что вы измеряете слишком высокий уровень, а не изолируете, и поэтому вы не знаете, что улучшить. Из-за этого отсутствия рабочего потока вы ищете «возможные проблемы», которые могут (или не могут) применяться к вашей ситуации.

Сколько времени в приложении и сколько времени находится в базе данных? Сколько запросов делает ваше приложение? Эти запросы относятся к категориям? Кто-нибудь из них занимает значительное количество времени? Ваше приложение обрабатывает запросы и обрабатывает ответы, самое время тратить время на выполнение запросов, ожидание ответов или обработку ответов?

Как только вы узнаете, что замедляет ваше приложение, вы знаете, где искать.

И, запросы не совершают. Обновления, вставки и удаления совершают.

Смежные вопросы