服务器访问量超载如何升级
在ASP中优化数据库处理
ASP是一个WEB服务器端的开发环境,它提供了一种简单易学的脚本(VBScript或Jscript),并带有许多内置的对象,从而提供了一条简捷的编程之路。更为重要的是,ASP中提供了ADO对象,让程序员可以轻松操作各种数据库,从而可以产生和运行动态的、交互的WEB服务应用程序。目前,国内很多电子商务站点都采用了ASP技术来与数据库交互,为用户提供各类服务。
由于电子商务站点的大部分信息都存放在数据库中,要提高WEB的响应速度,建立高性能的电子商务站点,很大一部分取决于ASP与数据库之间的处理性能。因此,在ASP编写时,要注意数据库处理方法。
1、 使用Connection pool机制
在数据库处理中,资源花销最大的是建立数据库连接,而且用户还会有一个较长的连接等待时间。若每一个用户访问时,都重新建立连接,不仅用户要长时间等待,而且系统有可能会由于资源消耗过大而停止响应。如果能够重用以前建立的数据库连接,而不是每次访问时都重新建立连接,则可以很好地解决这些问题,从而提高整个系统的性能。在IIS+ASP处理体系中,采用了Connection pool机制来保证这一点。
Connection pool的原理是,IIS+ASP体系中维持了一个连接缓冲池,建立好的数据库连接在ASP程序中的断开都是逻辑断开,而实际的物理连接被存储在池中并被维护。这样,当下一个用户访问时,直接从连接缓冲池中取得一个数据库连接,而不需重新连接数据库,因此,可以大大地提高系统的响应速度。
为了正确使用Connection pool时,必须注意以下几点:
a). 在MDAC2.0以前的版本中,必须经过数据库驱动程序的配置才能使用Connection Pool;在以后的版本中(比如MDAC2.1),缺省是使用Connection Pool机制。具体配置情况可以参见微软公司的站点()。
顺便提一句,在使用ORACLE数据库时,最好使用微软提供的驱动程序。
b). 每次数据库连接串参数必须相同,否则会被认为是不同的连接而重新去连接数据库,而不是使用缓冲池中的连接。最好的做法是将连接串存储在Application变量中,所有的程序在建立连接时使用Application变量的值。
c). 为了更好地使用和维护连接缓冲池,建议在程序中使用以下的方法对数据库连接进行操作,因为隐式使用数据库连接时不能利用缓冲池的机制:
¨ 显示地创建连接对象: Set conn=Server.CreateObject(“Adodb.connection”)
¨ 建立数据库连接:conn.open Application(“connection_string”),…
¨ 进行数据库操作:…
¨ 显式地关闭连接对象:conn.close
2、 利用直接的Ole DB驱动程序
在Asp中,通过ADO可以使用两种方式连接数据库,一种是传统的ODBC方式,一种是Ole DB方式。由于ADO是建立在Ole DB技术上的,为了支持ODBC,必须建立相应的Ole DB 到ODBC的调用转换(如MS Oledb provider for ODBC)。而使用直接的Ole DB方式(如MS Oledb provider for sql, Oracle),则不需转换,从而提高处理速度,同时,还能利用Ole DB的新特性。
3、 在内存中缓存ADO对象或其内容
通常,在ASP程序中,都会涉及到一些存储在数据库中的常用信息,如省份列表,商品分类等,这些信息对于每一个访问用户都是相同的。若每一个用户访问时,都要去数据库里取出来,然后显示给用户,不仅会使数据库服务器负载加重,无法快速服务于更重要的事务处理,而且WEB服务器也必须不停地创建ADO对象,消耗大量资源,导致了当用户很多时几乎失去响应。若能把一些常用信息事先存储在内存中,当用户访问时,直接从内存中取出,显示给用户,则可以大大减小系统的压力,提高响应速度。
比如,我们可以把已经取得了数据的RecordSet对象存储在Application变量中,当用户访问时,从Application变量中取得RecordSet对象,而不需再次建立数据库连接;也可以将RecordSet对象里的数据以其他方式存储,比如存储在数组中,然后再将数组存储在Application变量中,使用时用数组的方式读取。
需要注意的是,一个对象要存储在Application变量中,线程模式必须是Both;对于不满足该条件的对象,必须以其他方式,比如转换成数组的方式存储在Application变量中,这也是上面所说的将内容存储在数组中的原因。
4、 使用数字序列
在Asp程序中,从诸如RecordSet中读取数据时,为了方便,常使用数据库列名的方式进行:
Response.write rs(“fieldnameN”)
而很少采用该数据库列名所在的数字序列来读取,即:
Response.write rs(N)
其实,为了从RecordSet得到列值,ADO必须将列名转化为数字序列,因此,若直接使用数字序列,则可以提高读取速度。若感觉使用数字序列,程序可读性不直观,可以采用建立常量的方法,定义:
const FIELDNAME1 1
5、 使用数据库过程(procere)
在电子商务站点中,尤其是要进行交易的站点,为了完成交易,可能需要多次查询大量的信息,用于判定是非,然后更新入库。若在编写Asp时,直接在一个程序中作多次数据库操作,不仅IIS要创建很多ADO对象,消耗资源,而且加重了数据库服务器的负担,增大了网络流量。若把多次数据库操作流程定义为一个数据库过程,用如下方式调用:
connection.execute “”
则可以利用数据库的强大性能,大大减轻Web系统的压力,而且由于页面内容与业务分开,管理维护也变得方便。
6、 使用优化过的sql语句
对于电子商务网站,最主要的就是要保证,不论访问用户的多少,系统都要有足够快的响应速度。由于在Asp技术中,ADO对象消耗的资源是非常大的,若一个sql语句要执行很长的一段时间,对整个资源也将一直占用,使系统没有足够的资源服务于其它用户。因此,尽量使用优化过的sql语句,减少执行时间。比如,不使用在in语句中包含子查询的语句,充分利用索引。
7、 利用数据库的特性
ADO是一套通用的对象控件,本身没有利用数据库的任何特性。但若在Asp程序编写时,有意识地考虑结合数据库的特性,往往可以有很好的效果。
比如,Oracle数据库服务器对于执行过的sql语句,通常都经过了分析优化,并存储在一个sql内存缓冲区中,当下次同样的sql语句请求时,直接从内存缓冲区取出执行,不再进行分析优化,从而可以大幅度提高性能。这就要求在Asp程序编写时,尽量使用相同的Sql语句,或者参数化的Sql语句:
Set cmd=Server.createobject(“adodb.command”)
cmd.CommandText=”select * from proct where proctcode=?”
8、 用时创建,用完释放
在前面也提到过,ADO对象是非常消耗资源的,因此一定要牢牢记住,只在用到ADO对象时才创建,用完后马上释放:
set rs=Server.createobject(“adodb.recordset”)
….
rs.close
set rs=nothing
愿您愉快地编程,让人们享受社会信息化所带来的好处。
2. 服务器带宽跑满了怎么办
造成服务器带宽跑满的原因有很多,大致可以归结为以下几类:
病毒
Windows 系统服务器中病毒或站点挂马,导致服务器内部有对外发包的文件。
建议在服务器上安装杀毒软件,进行杀毒。可以通过任务管理器中查看是否异常进程。当前阿里云暂时没有提供杀毒软件,您可以登陆服务器根据自己的日常使用的杀毒软件进行安装即可。
网络攻击
服务器或站点遭受 DDOS 攻击或 CC 攻击等,短期内产生大量的访问需求。
可以登陆阿里云管理控制台,查看云盾中的防护 DDOS 攻击是否调整好阈值,并核实是否开启CC防护。
目前CC防护有自己默认的阈值,由于安全问题此阈值暂时不对外公开。如果攻击没有触发到阈值,云盾没有清洗,可以提交工单到售后请手工协助开起清洗,后期该调整阈值的功能会对外放。
存在耗资源进程
服务器内部有耗资源进程。
Windows Server 2003 系统无法直接查看到,但可以借助第三方软件查看;
Windows Server 2008 系统可以启动 任务管理器>性能>资源监控器>网络>查看 发送(字节/秒) 占用较多的进程。如果不是常用进程,说明可能是病毒或异常文件;如果是常用进程,说明该进程当前有异常,需要针对该进程对应的服务进行一下分析。
根据以往经验,曾发现过因搜狗拼音的更新,以及疑似上传本地词库导致的出网带宽跑高。
爬虫
正常网站所消耗的带宽较多,此类情况建议通过访问的日志来分析,如果日志中过多的 spider 或 googlebot 。说明网页被爬虫抓取,大量来自搜索引擎的链接也容易跑高带宽,例如:
windows-cmd 下找到 iis的日志,可以使用命令 type *.log | find “ “ 等。
Linux 的 Apache 和 nginx 可以检查 cat access.log | grep 等。
同时检查站点是否存有 MP3,flv,swf 等大文件被频繁访问下载,如果此类文件较多,建议减少这些文件,可搭配使用 OSS、CDN 服务。
网站规模大
网站规模较大(比如门户网站、商城等),即网站本身访问量需求大,查看网站的 Page View 值、Hits 值、日流量都很高,建议升级带宽 。
造成流量大的原因主要有:
网站页面设计不合理;
页面中包含大图片或音频、视频文件等文件,导致网站页面太大;
网站提供.mp3,.rar,.zip.exe等文件的下载,或网站提供视频、音频文件的播放;
如果网站规模较大,网站的点击率很高,建议减少音频、视频文件。如果还不能满足要求,可以升级带宽。
3. 怎样提高服务器的响应速度
一、服务器周围环境
服务器通常放置于机房,所说的周围环境也正是指机房。服务器基本是一天24小时不间断运行,所需要的电量如果没有得到足够保证,那么宕机的可能性就会增加。
其次,一台不停运转的机器,会产生大量的热量,如果机房不能给予足够的散热与湿度保持,机器便会故障,对运行速度也会有很大影响。
最后,在服务器配置相同的情况下,机房的带宽越大,访问速度相对越快。
二、本身配置
服务器对非专业人员一直是难以理解的机器,但如果将其转化为我们熟知的东西就很好理解了。我们可以将服务器看做一台普通计算机,计算机中的处理器、内存和宽带都直接影响了其运行速度。
因此,想要提升服务器速度,可以对这些硬件进行升级,做好维护,如果速度下降,也可以从这些方面进行排查。
三、网站程序
程序代码对速度影响也很大。代码越精简,所占用空间便会越小,访问速度便会越快。通常来说,编码人员都会有一个书写标准,但因为个人习惯问题而凭空多出许多冗余代码,导致速度被拖慢。壹基比观观