我有一個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