Я написал приложение, которое архивирует данные из двух представлений в базе данных 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 более, доступную для меня. Есть ли способ обойти это?
Сделки? PreparedStatements? – hovanessyan
Это слишком медленно. Ваши взгляды слишком медленные? Попробуйте запустить запросы непосредственно в вашей БД. – Andy
Возможно, ваш POC имеет плохой дизайн, поэтому он дает плохую производительность. Попробуйте использовать профилировщик для проверки шеи бутылки в вашем приложении. –