From:http://blog.csdn.net/yangzhawen/article/details/8209167
18056?
?
客戶端無法重新使用 SPID 為 %d 的會(huì)話,該會(huì)話已被重置用于連接池。失敗 ID 為 %d。
此錯(cuò)誤可能是由于先前的操作失敗引起的。
請(qǐng)查看錯(cuò)誤日志,找出在顯示此錯(cuò)誤消息之前剛發(fā)生的失敗操作。
2011-11-19 16:33:53.91 spid5495 ? ?The client was unable to reuse a session with SPID 5495, which had been?
reset for connection pooling. The failure ID is 1. This error may have been caused by an earlier operation
failing. Check the error logs for failed operations immediately before this error message.
2011-11-19 16:33:53.93 spid2991 ? ?錯(cuò)誤: 18056,嚴(yán)重性: 20,狀態(tài): 1。
案例說明:
當(dāng)SQLSERVER的errorlog文件中不停的報(bào)錯(cuò)10856的時(shí)候,CPU同時(shí)會(huì)很低,此時(shí)SQL客戶端登陸
數(shù)據(jù)庫(kù)查詢操作正常;IIS連接數(shù)暴漲,網(wǎng)站無法操作數(shù)據(jù)庫(kù)(如登錄、基本查詢)
分析前提:
該問題很常見,官方解釋沒有很明確的答案,都是說要么需要打補(bǔ)丁要么需要設(shè)置IIS的連接池.
這里分析前提是數(shù)據(jù)庫(kù)已經(jīng)打了最新的補(bǔ)丁、IIS連接數(shù)據(jù)庫(kù)的字符串正常、用戶名和密碼正常.
分析過程:
如IIS的連接池設(shè)置1500M,IIS連接數(shù)據(jù)正常1500個(gè),那么每個(gè)session分到的連接池大小平均1MB,
數(shù)據(jù)庫(kù)網(wǎng)絡(luò)數(shù)據(jù)包默認(rèn)是4096;
如果這個(gè)時(shí)候有個(gè)請(qǐng)求需要返回20M數(shù)據(jù),那么這個(gè)session從數(shù)據(jù)庫(kù)返回的數(shù)據(jù)包大小就要超過session
獲得的連接池大小,數(shù)據(jù)包是4096,比正常的請(qǐng)求(請(qǐng)求1M的回話)就需要多的數(shù)據(jù)包傳遞,這個(gè)session對(duì)應(yīng)的
回話保持時(shí)間就需要比平均水平長(zhǎng)些,正常情況下,這些獨(dú)大的請(qǐng)求不會(huì)有太大問題.
如果同一時(shí)刻,IIS的請(qǐng)求數(shù)達(dá)到3000,每個(gè)SESSION分到的連接池大小平均值就會(huì)0.5MB,如果同樣返回20MB數(shù)據(jù),
那么SESSION的時(shí)間就會(huì)更長(zhǎng)!
如果這個(gè)時(shí)候客戶端請(qǐng)求返回100個(gè)30M數(shù)據(jù),那么此時(shí)的請(qǐng)求,當(dāng)數(shù)據(jù)庫(kù)返回給IIS時(shí),IIS會(huì)發(fā)現(xiàn)連接池沒有足夠的內(nèi)存空間
分配這個(gè)SESSION,此時(shí)IIS的連接池大小不會(huì)隨著客戶端請(qǐng)求的增加而自動(dòng)增加或IIS服務(wù)器沒有更多的物理內(nèi)存,此時(shí)IIS就會(huì)
因?yàn)闆]有足夠的連接池空間分配來緩存對(duì)應(yīng)的SESSION,但是后續(xù)的客戶端回話還是不停的向IIS申請(qǐng),這個(gè)時(shí)候問題就來啦!
IIS會(huì)釋放掉(或IIS進(jìn)程down掉或IIS自動(dòng)重啟)沒法處理的SESSION,當(dāng)數(shù)據(jù)庫(kù)收到IIS端SESSION請(qǐng)求查詢出數(shù)據(jù)準(zhǔn)備返回給
IIS的SESSION時(shí),去尋找對(duì)應(yīng)請(qǐng)求的SPID,發(fā)現(xiàn)該請(qǐng)求的SPID已經(jīng)不存在,但是數(shù)據(jù)庫(kù)的TCP連接不會(huì)因?yàn)镾PID的不存在立即拋棄這些
數(shù)據(jù),此時(shí)網(wǎng)卡的流量會(huì)增加!同時(shí)數(shù)據(jù)庫(kù)ERRORLOG里全是這種錯(cuò)誤.
解決辦法:
0.首先排除DB是否有死鎖
1.最直接的辦法就是增加IIS連接池大小
2.就是找出程序中大的會(huì)話請(qǐng)求,修改代碼
3.限制IIS進(jìn)程數(shù)上限,根據(jù)日常運(yùn)行情況設(shè)置連接池大小(不推薦,迫不得已)
4.數(shù)據(jù)庫(kù)端限制sql回話時(shí)常:SQL防火墻或數(shù)據(jù)庫(kù)限制長(zhǎng)連接(不推薦,迫不得已,沒辦法的辦法)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
