SQL CPU使用SqlDataAdapter.Fill命令达到峰值

时间:2012-09-04 16:32:28

标签: c# database sqldataadapter

我注意到将SQL数据导入c#应用程序的一些特殊行为。我使用了数据集xsd,但这开始超时。然后我改变了我的方法,因为我已经有了一个类,它会为我尝试的其他操作生成并返回一个数据表。这太快了。

我在SSMS中打开了Activity Monitor,以了解代码运行时SQL中发生了什么,并注意到我运行它的哪种方式fill命令使SQL Sever以100%CPU达到峰值并保持在那里直到命令被取消。这是一个很好的服务器,拥有大量的240Ghz处理器和30GB RAM。该查询并不完全是zippy,但在SSMS中在3秒内返回100k行。

以下是我的数据集代码:

        public DataTable UKDataRefresh ()
    {
        UKREFRESH.UKNewContactsDataTable dt = 
            new UKREFRESH.UKNewContactsDataTable();
        UKREFRESHTableAdapters.UKNewContactsTableAdapter ta = 
            new UKREFRESHTableAdapters.UKNewContactsTableAdapter();

        ta.Connection.ConnectionString += ";Password = xxxxxx;";

        try
        {
        ta.Fill(dt, global::SilverPopTransfer.Properties.Settings.Default.UKDATELASTACTION);

        }
        catch (SqlException )
        {

            throw;
        }

        return dt;

    }

这是我动态构建它的代码:

public DataTableOperations (string strconnection, string strSelect,string tablename)
{
        SqlConnection c = new SqlConnection(strconnection);
        connection = c;
        SqlDataAdapter da = new SqlDataAdapter(strSelect, connection);
        DataSet ds = new DataSet();
        //added this to see what would happen.
        da.SelectCommand.CommandTimeout = 0;
        connection.Open();
        da.Fill(ds, tablename);
        connection.Close();
        Datatable = ds.Tables[tablename];
        _disposed = false;
    }

我正在寻找可能导致问题的线索,而不是完整的解决方案 顺便说一句,我在发布之前在预先存在的控制台应用程序中运行了类似的功能,并且连接并运行时没有错误:查询几乎相同。

唯一的区别是,对于预先存在的应用程序,我使用集成安全性,但在这种情况下,我指定用户和密码。我确认登录凭据。

1 个答案:

答案 0 :(得分:0)

执行前检查索引和set nocount on。 SSMS性能不是一个好的性能指标。它只获得部分数据并执行异步。尝试调用一小部分数据或运行查询而不填写表格。它可能是瓶颈。

如果您正在运行带参数的select,sql server将使用sp_execute执行它,然后服务器编译它以创建CPE峰值。