Получать метаданные в SQL Server 2008 - очень медленно - PullRequest
0 голосов
/ 17 ноября 2010

Мы перешли с 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.

1 Ответ

0 голосов
/ 17 ноября 2010

См. в этом посте и попробуйте переключить уровень совместимости базы данных на 100 для SQL Server 2008. Возможно, если вы переместили базу данных с 2005 на 2008 год, отсюда идет снижение производительности.

...