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