經常有人會問:我的網站是個很普通的網站,沒有多少訪問量,為什么還經常提示耗資源?是不是主機問題等。今天小編就這個問題給大家解答下:...
1.什么是耗資源?
耗資源即程序占用 CPU 及內存過多,是對資源的一種浪費。客戶使用虛擬主機時程序編寫的不合理、錯誤嚴重,造成服務器負載急劇上升,極大的影響了正常客戶的使用,就是耗資源(客戶程序故障)。耗資源(客戶程序故障)分為耗用 CPU 資源和內存資源兩種。
2.什么原因導致的耗資源?
.程序出現死循環
在很多情況下,出現死循環是因為程序缺少必要的檢測和判斷條件導致,這種情況需網站開發者對站點程序的代碼進行檢查和完善。
.程序有嵌套查詢
sql = "select * from a"
set rs = server.createobject("adodb.recordset")
rs.open sql,conn,1,1
while not rs.eof
sql2 = "select * from b where fid=" & rs("id")
set rs2 = server.createobject("adodb.recordset")
rs2.open sql2,conn,1,1 ' //使用嵌套查詢,效率會出現下降
while not rs2.eof
response.write rs("id") & "=" & rs2("name")
rs2.movenext
wend
rs.movenext
wend
嵌套查詢會造成數據庫的查詢量呈指數級上升,導致一個程序的查詢效率非常低。若程序改為連表操作,查詢數據庫的次數會少很多,并且在設計數據庫的時候應該將b表的fid字段建立索引,否則連表查詢的時候性能會差很多,代碼示例如下所示。
<%
sql = "select a.id ,b.name from a left join b on b.fid=a.id" '//使用連表操作,并用具體的字段名代替 *,程序是高效很多
set rs = server.createobject("adodb.recordset")
rs.open sql,conn,1,1
while not rs.eof
response.write rs("id") & "=" & rs("name")
rs.movenext
wend
%>
.ACCESS數據庫的容量比較大
如果網站采用ACCESS數據庫,當數據庫的容量比較大時(比如超過100M以上),性能就可能會出現問題,所以訪問量大的網站一般都采用SQL Server、MySQL、Oracle等性能比較高的數據庫引擎。
.數據庫的索引設置問題
一個表至少有一個主鍵和N個外鍵,一般主鍵作為表的唯一標識。當檢索數據時,如果以主鍵的值來進行查找的話效率會比較高,而一些標志性的字段,例如產品表的產品所屬分類、用戶表的用戶等級等,在程序中經常要用到這些字段來進行檢索數據。那么,一般應該給這些字段建立索引,這樣檢索數據的時候性能會好很多。
耗資源即程序占用 CPU 及內存過多,是對資源的一種浪費。客戶使用虛擬主機時程序編寫的不合理、錯誤嚴重,造成服務器負載急劇上升,極大的影響了正常客戶的使用,就是耗資源(客戶程序故障)。耗資源(客戶程序故障)分為耗用 CPU 資源和內存資源兩種。
.程序出現死循環
在很多情況下,出現死循環是因為程序缺少必要的檢測和判斷條件導致,這種情況需網站開發者對站點程序的代碼進行檢查和完善。
.程序有嵌套查詢
sql = "select * from a"
set rs = server.createobject("adodb.recordset")
rs.open sql,conn,1,1
while not rs.eof
sql2 = "select * from b where fid=" & rs("id")
set rs2 = server.createobject("adodb.recordset")
rs2.open sql2,conn,1,1 ' //使用嵌套查詢,效率會出現下降
while not rs2.eof
response.write rs("id") & "=" & rs2("name")
rs2.movenext
wend
rs.movenext
wend
嵌套查詢會造成數據庫的查詢量呈指數級上升,導致一個程序的查詢效率非常低。若程序改為連表操作,查詢數據庫的次數會少很多,并且在設計數據庫的時候應該將b表的fid字段建立索引,否則連表查詢的時候性能會差很多,代碼示例如下所示。
<%
sql = "select a.id ,b.name from a left join b on b.fid=a.id" '//使用連表操作,并用具體的字段名代替 *,程序是高效很多
set rs = server.createobject("adodb.recordset")
rs.open sql,conn,1,1
while not rs.eof
response.write rs("id") & "=" & rs("name")
rs.movenext
wend
%>
.ACCESS數據庫的容量比較大
如果網站采用ACCESS數據庫,當數據庫的容量比較大時(比如超過100M以上),性能就可能會出現問題,所以訪問量大的網站一般都采用SQL Server、MySQL、Oracle等性能比較高的數據庫引擎。
.數據庫的索引設置問題
一個表至少有一個主鍵和N個外鍵,一般主鍵作為表的唯一標識。當檢索數據時,如果以主鍵的值來進行查找的話效率會比較高,而一些標志性的字段,例如產品表的產品所屬分類、用戶表的用戶等級等,在程序中經常要用到這些字段來進行檢索數據。那么,一般應該給這些字段建立索引,這樣檢索數據的時候性能會好很多。