Мы перешли с SQL Server 2005 на 2008 ранее в этом году, и после обновления мы заметили, что выборка метаданных для таблиц и представлений вместе со всеми их соответствующими столбцами в 2008 году занимает около 15 минут по сравнению с тем, что раньше было почти мгновенным 2005 г.
В двух словах, вот базовый код Java, который занимает 15 минут, и загружает наш сервер почти на 100%. Переменная схемы - это ссылка на внутренний объект, который содержит информацию, возвращаемую из этого запроса.
Connection con = db.open();
DatabaseMetaData metaData = con.getMetaData();
String types[] = { "TABLE", "VIEW" };
ResultSet resultSet = metaData.getTables(null, null, "%", types);
while (resultSet.next())
{
schema.addTable(tableName);
ResultSet columnSet = metaData.getColumns(null, null, tableName, "%");
while (columnSet.next())
schema.addColumn(tableName, columnSet.getString(4));
columnSet.close();
}
resultSet.close();
Мы довольно много искали в Google по этому вопросу, похоже, что выпуск 2008 R2 должен был решить некоторые проблемы с загрузкой схемы. Если не считать оплаты дорогостоящего обновления, есть ли у кого-нибудь еще какие-либо хорошие идеи о том, как повысить производительность этого запроса?
К вашему сведению - мы используем последнюю версию драйвера jTDS. Мы также заметили аналогичную производительность при использовании драйвера Microsoft от Java.