SQL Azure數(shù)據(jù)庫部署最佳實踐(下)
接上文:SQL Azure數(shù)據(jù)庫部署***實踐(上)
如果你運行一個長事務,或者如果連接空閑時間過長,SQL Azure也會切斷現(xiàn)有連接。在這兩種情況下,閾值是五分鐘。那么,你將如何處理呢?你可以在最短時間內保持連接打開避免閑置事務。一旦你執(zhí)行完一條命令、關閉連接并把連接返回到池中。
演示代碼如下:
using (SqlConnection cn = new SqlConnection(…))
{
cn.Open();
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandText = …;
…
}
}
如果在一個連接池中獲得連接,連接失效的幾率是最小的。不過,如果你的命令執(zhí)行超過五分鐘并且很難處理則您的連接將由SQL Azure關掉。您可以把更新劃分為若干批量的小任務。除此之外,需要確保數(shù)據(jù)庫是索引良好的。
由于系統(tǒng)負載過高,SQL Azure限制數(shù)據(jù)庫活動時您的連接也會斷開。
為了防止在任何情況下的連接斷開,應開發(fā)SQL Azure的應用程序使它們能夠處理連接的錯誤并且不用用戶參與即可透明的重連接。
此外,您可能需要添加代碼來處理因為超時或者連接斷開時對數(shù)據(jù)庫進行的更新重試。這將是大量的額外代碼,但幸運的是微軟已經做了一些工作。在微軟AppFabric客戶咨詢小組網站上檢索到“Best Practices for Handling Transient Conditions in SQL Azure Client Applications”這篇文章。該文介紹了可能遇到的連接錯誤并給出如何處理它們的示例代碼。該文結尾有一個鏈接可以讓你下載示例代碼。
***一個建議是如何獲得SQL Azure的客戶支持。如果您的應用程序遇到問題并需要幫助,請先確保您獲得應用程序會話的ID。SQL Azure在他們的網站上記錄錯誤和活動。如果你給他們會話ID,支持團隊可以更容易弄清楚是怎么回事。
下面的C#代碼顯示了如何檢索連接的會話ID:
cmd.CommandText = "Select CONVERT(nvarchar(36), CONTEXT_INFO())";
SessionId = new Guid(cmd.ExecuteScalar().ToString());
本文討論了若干開發(fā)人員和數(shù)據(jù)庫管理員在與SQL Azure打交道時可能遇到的幾個問題,并提供了如何處理這些問題的指南和***實踐。
【編輯推薦】