Тайм-аут SQL на одной странице сайта ASPX - PullRequest
2 голосов
/ 16 апреля 2019

Я только что начал работу с веб-приложением, использующим страницы aspx, C # позади.Все сидят на SQL Server.Все данные доставляются с помощью хранимых процедур.Почти все процедуры являются динамическим SQL, с оператором sql, встроенным в саму процедуру на основе переданных параметров.

Существует три практически идентичных страницы, единственное отличие состоит в том, что параметры передаются в SQL и некоторые метки,Страница загружает одну сетку и три раскрывающихся списка при открытии.Есть два других вида сетки, но они не загружаются до тех пор, пока не будет предоставлена ​​более конкретная информация.

С объявлением сайта одна из этих страниц получает широкое применение.И много ошибок времени ожидания SQL.Тем не менее, если я перейду на другую из трех страниц, которые они выполняют быстро, никакой ощутимой паузы в загрузке данных.И если я запускаю процедуры, все они выполняются менее чем за секунду, в то время как на странице истекает время ожидания.Так что я не думаю, что это на самом деле тайм-ауты из-за низкой производительности SQL Server.

Я - человек из БД, а не программист, которого заставили добровольно заняться созданием этого сайта для пары клубов.,Я учился на лету, и многие из моих ответов приходят с этого сайта.Но в этом случае я даже не знаю, что мне нужно искать.Я предоставил информацию ниже, которая кажется актуальной.Я рад обновить с полным .aspx и .cs, если это полезно.

Загрузка страницы проста:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            SelectedDogID.Text = "0";
            SelectedTrialID.Text = "0";
            SelectedHandlerID.Text = "0";
            ddYear.DataBind();
            ddTrial.DataBind();
            ddTrial.Visible = false;
            LabelTrial.Visible = false;
        }
    }

Сайт https://trialpoints.com/ Этопервая кнопка «USBCHA Sheep», которая является страдающей страницей, на которую все смотрят.Вторые две кнопки почти идентичны, включая использование в основном одних и тех же наборов данных, но они работают хорошо.

Мне кажется, что я сделал что-то неправильное на aspx или C # на страницах, чтобы они моглине обрабатывать несколько запросов (вообще или хотя бы хорошо).Есть только одно место, которое я называю процедурой в C #, остальное - источник данных aspx.Этот фрагмент кода:

    protected void ddTrial_SelectedIndexChanged(object sender, EventArgs e)
    {
        SelectedTrialID.Text = ddTrial.SelectedValue;

        if (SelectedTrialID.Text != "0")
        {
            mvPoints.ActiveViewIndex = 3;
            rbTrial.Checked = true;
            GridViewIndTrial.DataBind();

            //Now populate the fields at the top of the form
            SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
            SqlCommand cmd = new SqlCommand("SingleTrialReturnDetailsForPointsPage", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@Organization", SqlDbType.NVarChar, 30));
            cmd.Parameters.Add(new SqlParameter("@TrialID", SqlDbType.Int, 4));
            cmd.Parameters["@Organization"].Value = Convert.ToString(tbOrganization.Text);
            cmd.Parameters["@TrialID"].Value = Convert.ToInt32(ddTrial.SelectedValue);
            conn.Open();
            using (SqlDataReader read = cmd.ExecuteReader())
            // Data is accessible through the DataReader object here.
            {
                while (read.Read())
                {
                    lblTrialID.Text = (read["TrialID"].ToString());
                    lblTrialID.Text = (read["TrialID"].ToString());
                    lblTrialName.Text = (read["TrialName"].ToString());
                    lblTrialDate.Text = (read["TrialDate"].ToString());
                    lblTrialYear.Text = (read["TrialYear"].ToString());
                    lblDogsToPost.Text = (read["DogsToPost"].ToString());
                    lblDogsWithPoints.Text = (read["DogsWPoints"].ToString());
                    GridViewIndTrial.Caption = (read["TrialName"].ToString());
                }
                read.Close();
            }
            conn.Close();
            conn.Dispose();
        }
        else
        {
            GridViewIndTrial.DataSource = null;
            lblTrialID.Text = Convert.ToString("");
            lblTrialName.Text = Convert.ToString("");
            lblTrialDate.Text = Convert.ToString("");
            lblTrialYear.Text = Convert.ToString("");
            lblDogsToPost.Text = Convert.ToString("");
            lblDogsWithPoints.Text = Convert.ToString("");
            GridViewIndTrial.Caption = Convert.ToString("");
        }       
    }

Сообщение об ошибке после ожидания на медленной странице:

[Win32Exception (0x80004005): The wait operation timed out]

[SqlException (0x80131904): Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +212
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +81
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +630
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4222
   System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +58
   System.Data.SqlClient.SqlDataReader.get_MetaData() +89
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) +437
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) +2617
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) +1636
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +64
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +243
   System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +37
   System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +10
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +138
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +134
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +84
   System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1441
   System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +286
   System.Web.UI.WebControls.ListControl.PerformSelect() +36
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +71
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +93
   System.Web.UI.WebControls.BaseDataBoundControl.set_RequiresDataBinding(Boolean value) +104
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewChanged(Object sender, EventArgs e) +15
   System.Web.UI.DataSourceView.OnDataSourceViewChanged(EventArgs e) +99
   System.Web.UI.WebControls.SqlDataSourceView.SelectParametersChangedEventHandler(Object o, EventArgs e) +36
   System.Web.UI.WebControls.ParameterCollection.OnParametersChanged(EventArgs e) +20
   System.Web.UI.WebControls.Parameter.UpdateValue(HttpContext context, Control control) +143
   System.Web.UI.WebControls.ParameterCollection.UpdateValues(HttpContext context, Control control) +102
   System.Web.UI.WebControls.ParameterCollection.GetValues(HttpContext context, Control control) +37
   System.Web.UI.WebControls.SqlDataSourceView.InitializeParameters(DbCommand command, ParameterCollection parameters, IDictionary exclusionList) +257
   System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +579
   System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +286
   System.Web.UI.WebControls.ListControl.PerformSelect() +36
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +71
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +93
   System.Web.UI.WebControls.ListControl.OnPreRender(EventArgs e) +23
   System.Web.UI.Control.PreRenderRecursiveInternal() +166
   System.Web.UI.Control.PreRenderRecursiveInternal() +236
   System.Web.UI.Control.PreRenderRecursiveInternal() +236
   System.Web.UI.Control.PreRenderRecursiveInternal() +236
   System.Web.UI.Control.PreRenderRecursiveInternal() +236
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4720
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...