WedX - журнал о программировании и компьютерных науках

SQLDataReader. Время ожидания ExecuteReader истекло

Серверная часть MS sql 2014 (на том же компьютере) - Executereader times out (native error code: 258) @ second executereader() в том же соединении. Почему это так? (Нет большого объема данных, задействованные строки cmd верны)

Примечание: не имеет значения, идет ли весь SELECT в отдельное соединение, время ожидания второго всегда истекает. Также не имеет значения, если бы я использовал DataAdapter для перехвата данных ... время ожидания ... см. Ниже, спасибо за идеи:

using (SqlConnection c = new SqlConnection(cString))
{
    c.Open();
    using (SqlCommand cmd = new SqlCommand(querystringPO, c))
    {

        cmd.Parameters.AddWithValue("@paramRecipe", productionOrderNo);
        using (SqlDataReader rd = cmd.ExecuteReader())
        {
            dtRecipe = new DataTable();
            dtRecipe.Load(rd);
            rd.Close();
        }
    }
    if (dtRecipe.Rows.Count > 0)
    {
        string querystringOpDefs = "SELECT * FROM ReferencedFieldsView_OperationDefinition WHERE RecipeID=@paramOpDef";
        using (SqlCommand cmd1 = new SqlCommand(querystringOpDefs, c))
        {

            cmd1.Parameters.AddWithValue("@paramOpDef", dtRecipe.Rows[0].Field<int>("ID"));
            using (SqlDataReader rd = cmd1.ExecuteReader())
            {
                dtOpDefs = new DataTable();
                dtOpDefs.Load(rd);
                rd.Close();
            }


        }
        string querystringBOMItems = "SELECT * FROM ReferencedFieldsView_BomItem WHERE RecipeID=@paramBOMItem";

        using (SqlCommand cmd2 = new SqlCommand(querystringBOMItems, c))
        {

            cmd2.Parameters.AddWithValue("@paramBOMItem", dtRecipe.Rows[0].Field<int>("ID"));
            using (SqlDataReader rd = cmd2.ExecuteReader())
            {
                dtBOMItems = new DataTable();
                dtBOMItems.Load(rd);
            }
        }
    }
}

Пример ниже:

Исключение: System.InvalidOperationException: операция сервера обнаружила исключение ---> System.Data.SqlClient.SqlException: истекло время ожидания выполнения. Время ожидания истекло до завершения операции или сервер не отвечает. ---> System.ComponentModel.Win32Exception: истекло время ожидания операции --- Конец трассировки стека внутреннего исключения --- в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое breakConnection, Action`1 wrapCloseInAction) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj, булева callerHasConnectionLock, булева asyncClose) при System.Data.SqlClient.TdsParser.TryRun (runBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, булева & dataReady) в системе .Data.SqlClient.SqlDataReader.TryConsumeMetaData () в System.Data.SqlClient.SqlDataReader.get_MetaData () в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader DS, RunBehavior runBehavior, String resetOptionsString, булева IsInternal, булева forDescribeParameterEncryption, булева shouldCacheForAlwaysEncrypted ) в System.Data .SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, булева returnStream, булева асинхронный, Int32 тайм-аут, задача и задачи, булева asyncWrite, булева inRetry, SqlDataReader DS, булева describeParameterEncryptionRequest) при System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior , RunBehavior runBehavior, Boolean returnStream, String метод, завершение TaskCompletionSource`1, время ожидания Int32, Task & task, Boolean & usedCache, Boolean asyncWrite, Boolean inRetry) в System.Data.SqlClient.SqlCommand.RunExecutehavior, runBehavior cmd Метод String) в System.Data.SqlClient.SqlCommand.ExecuteReader (поведение CommandBehavior, метод String) в System.Data.SqlClient.SqlCommand.ExecuteReader ()

24.04.2019

  • Опубликуйте полное исключение, включая стек вызовов и любые внутренние исключения. Вы можете легко получить это с Exception.ToString(). Вы даже не отправили сообщение, которое могло бы объяснить, какой это был тайм-аут. Однако не просто публикуйте сообщение, публикуйте исключение full 24.04.2019
  • Что касается того, почему возникают тайм-ауты, если это тайм-ауты команд, обычно это из-за неправильных запросов и отсутствия индексов. Способ их исправить - исправить запросы и добавить правильные индексы. Если данных много и оптимизация невозможна, таймаут следует увеличить. 24.04.2019
  • Имена представлений предполагают, что вы выполняете запрос спецификации. Они похожи на иерархические запросы и могут выполняться очень медленно, если не соблюдать особую осторожность. Типичный способ их реализации - использовать медленную рекурсию. Или вы можете заменить отношение Parent/ChildID на поле hierarchyid и получить очень быстрые запросы 24.04.2019
  • Используйте SQL Server Management Studio и запустите запрос в SSMS. Сообщения об ошибках в SSMS в 1000 раз лучше, чем C #, для отладки проблем такого типа. 24.04.2019
  • Отредактированное описание, нет большого количества данных (только для проверки 1-2 записей для возврата) и строки cmd в порядке. Протестировано в SSMS 24.04.2019
  • SELECT * FROM ReferencedFieldsView_BomItem WHERE RecipeID=@paramBOMItem требуется более 30 секунд, чтобы собрать данные. Это связано либо с тем, что выполнение запроса дорого (по какой-либо причине, и обратите внимание, что все может быть отличается между SMSS и приложением) или из-за того, что удерживаются блокировки, которые не позволяют продолжить выполнение запроса, или из-за сетевой проблемы, которая каким-то образом поглощает ответ от SQL Server к приложению (примерно в порядке убывания вероятности). 24.04.2019
  • sql-сервер находится на той же машине, что и dev.env. Я не знаю, почему блокировка происходит после 1-го запроса, ничего дорогого в них нет :( 24.04.2019
  • Значит, вы установили, что есть блокировка, или это спекуляция? Вы можете использовать sys.dm_os_waiting_tasks, чтобы узнать, действительно ли запрос заблокирован и почему. Наличие локального сервера только подтверждает, что проблема не в сети; это все еще может быть план выполнения. 24.04.2019

Ответы:


1

Дело в том, что с использованием SQL 2K12 все вышеперечисленные фрагменты работали (та же база данных такая же и т. Д.)

Однако, как предложил sb, вместо того, чтобы выбирать все поля (*), при явном добавлении требуемых полей он начал работать.

24.04.2019
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

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

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]