我有一个sql连接,我必须每秒从500到10,000次访问数据库。每秒大约250次后,事情开始放缓,然后应用程序远远落后于崩溃。ADO.NET SQL Server性能瓶颈
我在考虑将数据库放入字典中。我需要获得最快的表现。目前,ado.net需要大约1到2毫秒,但是有些事情会导致瓶颈。
每秒10k查询的下面语法有什么问题吗?是一本正在工作的字典吗?我们正在谈论大约1200万条记录,我需要能够在1到5毫秒内搜索它。我在数据库中还有另外一个拥有5000万条记录的集合,所以我不确定如何存储它。任何建议都会很棒。
的SQL分贝具有128GB的存储和80个处理器和应用程序是在SQL服务器上的同一个服务器上2012
using (SqlConnection sqlconn = new SqlConnection(sqlConnection.SqlConnectionString()))
{
using (SqlCommand sqlcmd = new SqlCommand("", sqlconn))
{
sqlcmd.CommandType = System.Data.CommandType.StoredProcedure;
sqlcmd.Parameters.Clear();
sqlcmd.CommandTimeout = 1;
sqlconn.Open();
using (SqlDataReader sqlDR = sqlcmd.ExecuteReader(CommandBehavior.CloseConnection))
public static string SqlConnectionString()
{
return string.Format("Data Source={0},{1};Initial Catalog={2};User ID={3};Password={4};Application Name={5};Asynchronous Processing=true;MultipleActiveResultSets=true;Max Pool Size=524;Pooling=true;",
DataIP, port, Database, username, password, IntanceID);
}
DataReader的下面的代码是
r.CustomerInfo = new CustomerVariable();
r.GatewayRoute = new List<RoutingGateway>();
while (sqlDR.Read() == true)
{
if (sqlDR["RateTableID"] != null)
r.CustomerInfo.RateTable = sqlDR["RateTableID"].ToString();
if (sqlDR["EndUserCost"] != null)
r.CustomerInfo.IngressCost = sqlDR["EndUserCost"].ToString();
if (sqlDR["Jurisdiction"] != null)
r.CustomerInfo.Jurisdiction = sqlDR["Jurisdiction"].ToString();
if (sqlDR["MinTime"] != null)
r.CustomerInfo.MinTime = sqlDR["MinTime"].ToString();
if (sqlDR["interval"] != null)
r.CustomerInfo.interval = sqlDR["interval"].ToString();
if (sqlDR["code"] != null)
r.CustomerInfo.code = sqlDR["code"].ToString();
if (sqlDR["BillBy"] != null)
r.CustomerInfo.BillBy = sqlDR["BillBy"].ToString();
if (sqlDR["RoundBill"] != null)
r.CustomerInfo.RoundBill = sqlDR["RoundBill"].ToString();
}
sqlDR.NextResult();
这为的String.format每个连接,你需要打开可优化,做到了一次。不知道它是否会有所作为。你可以测试它。 – Steve
是的可能将该连接字符串转换为常量 – HOKBONG
存储过程中的SQL逻辑如何?它会加入表格还是简单的选择?最好将其纳入分析案例。 – HOKBONG