Использование SMO для одновременного вызова Database.ExecuteNonQuery ()? - PullRequest
0 голосов
/ 11 января 2011

Я бился головой об стену, пытаясь понять, как можно одновременно запускать сценарии обновления для нескольких баз данных в одном экземпляре SQL Server с использованием SMO. В наших средах постоянно увеличивается число баз данных, которые нуждаются в обновлении, и перебор по одной становится проблемой (слишком медленной).

Из того, что я понимаю, SMO не поддерживает параллельные операции, и мои тесты подтвердили это. Кажется, на уровне объектов сервера существует общая память, для таких вещей, как контекст DataReader, продолжает генерироваться исключение, такое как «читатель уже открыт». Я прошу прощения за то, что у меня нет точных исключений, которые я получаю. Я постараюсь получить их и обновить этот пост.

Я не эксперт по SMO и просто чувствую, что могу пройти честно. Не совсем уверен, что я подхожу к этому правильно, но это то, что нужно сделать, иначе наша производительность замедлится.

Так как бы вы, ребята, сделали что-то подобное? Я использую неправильную технологию с SMO? Все, что я хочу сделать, это выполнять сценарии SQL для баз данных в одном экземпляре сервера SQL параллельно.

Спасибо за любую помощь, которую вы можете оказать, Даниэль

1 Ответ

0 голосов
/ 12 января 2011

Просто используйте несколько объектов ServerConnection и создайте несколько экземпляров объекта Server для каждого из них.В основном по одному на поток.Не имеет значения, все ли они подключаются к одному экземпляру базы данных.

Я написал приложение для документирования схемы базы данных таким образом.Я запускаю несколько «запросов» (не только ExecuteNonQuery (), но и другие функции на SMO) одновременно без каких-либо проблем - ну, по крайней мере, до сегодняшнего дня.К сожалению, кажется, что они не слишком много документируют на SMO, кроме довольно "простых" вещей.

...