Параллельное выполнение запроса приводит к увеличению времени [SQL Server] - PullRequest
0 голосов
/ 15 октября 2018

У меня есть запрос, который выдает 4-5 секунд, когда я выполняю его с помощью SSMS (2017) и через консольное приложение.

Но когда я запускаю один и тот же запрос трижды, используя Параллельно для каждого в моем консольном приложении это приводит к 15 - 20 секундам.

Я ожидаю, почему я не могу получить тот же результат, даже если я запускаю его параллельно.

См. Ниже, я проверил с профилировщиком.Запросы были начаты в одно и то же время

enter image description here

Но посмотрите время завершения.

enter image description here

Это мой код:

int count = 3;
        Stopwatch watch = new Stopwatch();
        watch.Start();

        Parallel.For(0, count, (index) =>
        {
                string queryString = "SELECT COUNT(*) AS [Row Count]  FROM (SELECT SUM([dbo_MaximumData].[C1]) AS [Grid_Column_0],[dbo_MaximumData].[C3] AS [Grid_Column_2],[dbo_MaximumData].[C5] AS [Grid_Column_3],[dbo_MaximumData].[C6] AS [Grid_Column_4],[dbo_MaximumData].[C6] AS [Grid_Column_1] FROM [dbo].[MaximumData] AS [dbo_MaximumData] GROUP BY [dbo_MaximumData].[C3],[dbo_MaximumData].[C5],[dbo_MaximumData].[C6],[dbo_MaximumData].[C6] ) [Main Table] ";
            string connectionString = "Server=””;Database=ODBC ANSI;User Id=sa;Password=Test@123;";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();


                SqlDataReader reader = command.ExecuteReader();
                try
                {
                    while (reader.Read())
                    {

                    }
                }
                finally
                {
                    reader.Close();
                    connection.Close();
                }
            }
});

        watch.Stop();
        var str = watch.Elapsed;

У меня вопрос " Почему параллельное выполнение запроса вызывает больше времени "?

Кто-нибудь, пожалуйста, помогите мнес этим.Заранее спасибо.

1 Ответ

0 голосов
/ 15 октября 2018

Идея параллельной обработки заключается в распределении ресурсов процессора / памяти / любой другой нагрузки между системами / ядрами / и т. Д.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...