2014-12-17 6 views
0

У меня есть шесть операторов SQL UPDATE (в одной базе данных) в качестве задания агента SQL, которое я запускаю каждую ночь, чтобы обе системы синхронизировались друг с другом. Каждое обновление занимает около 10 минут.Выполнять SQL-запросы асинхронно

В качестве теста сегодня я открыл SQL Studio Manager и открыл пять окон и одновременно выполнил пять обновлений (я могу гарантировать, что строка может быть обновлена ​​только одним оператором SQL). Пять запросов выполнялись через 15 минут.

Поэтому вместо того, чтобы с помощью одного агента SQL задания я думаю о вызове операторы SQL из программы VB.NET, так что я могу либо:

1) Использование асинхронных вызовов для обеспечения запросов одновременно работают , 2) Используйте несколько потоков, чтобы гарантировать, что запросы выполняются одновременно

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

+4

Почему не 5 агентских рабочих мест? – idstam

+0

Несколько потоков должны быть точными, пока параллелизм данных не является проблемой. Или используйте несколько заданий. –

+1

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

ответ

2

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

Я думаю, что то, что вы читаете, неверно, или вы неверно истолковали его. Запуск вещей одновременно не ускорит эту работу, но позволит увеличить количество вещей параллельно, освободив потоки (в потоках Windows дорого создавать: создавать и уничтожать их в течение коротких периодов времени следует избегать).

Параллелизм (например, с поддержкой асинхронной поддержки .NET 4.5.1) позволяет продолжить, включая запуск других асинхронных действий, в то время как поток используется для чего-то другого.

Информация о том, как это сделать, зависит от того, как вы обращаетесь к базе данных: Entity Framework (EF), ADO.NET или что-то еще?

С помощью EF вы можете использовать методы расширения в QueryableExtensions как ToListAsync по запросам.

С помощью ADO.NET вы можете использовать методы SqlCommand, такие как ExecuteNonQueryAsync и ExecuteReaderAsync.

+0

Я использую ADO.NET. +1 для ссылки на ExecuteReaderAsync и т. Д. – w0051977

1

Поскольку вы имеете дело с SQL-заявлением, выбор, который вы делаете в vb.net, не повлияет на производительность или время, необходимое для выполнения 5 задач на sql.

если вы делаете 5 асинхронных вызовов, тогда вы будете сидеть и ждать 5 ответов; если вы создаете 5 потоков, эти потоки будут сидеть, ожидая завершения их синхронных вызовов. чистый результат будет таким же.

Мне тоже я нажимаю на 5 агентских заданий: это решение, которое использует существующие инструменты sql, не требует дополнительного кодирования (больше кодирования = больше обслуживания) и доступно из коробки практически на любом экземпляре sql.

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