SQLSERVER怎么样减少数据库服务器的访问压力!(字有点多,有耐心的人来看下)
做的网站联盟目前大概有1000多个,每个单独的网站都有一部分数据是通过webservce到数据库总服务器《独立的服务器》获取的。。。现在的问题是:数据库承受不了这么多网站的访问(百度爬虫很频繁的访问每个独立网站服务器,从生成的静态缓存页面可以看出来,经过爬虫的服务器,每次缓存都会增长几百M),老在数据库连接超时;
现在已经为每个单独的网站建立了静态缓存,但访问没有缓存的页面时,有时候还是会连接超时;访问的主要有三个表,每个表中的数据都在100W左右,用SQL性能工具(SQL SERVER PROFILER)监视时,同一条SQL语句有时候查的很快,有时候查询的很慢,我估计是并发时造成的阻塞。。。具体原因不清楚。。。已经对每个网站访问webservice的次数据进行了优化,比如一个页面有三个位置要显示总服务器的数据,查询数据库时,将三个表的数据组成一个DataSet,然后返回到对应的网站。。。数据库中建立索引,关键字查询时建立全文索引等等。。。差不多已经优化到了极致,优化得我大脑都快萎缩了,但偶尔还是会出现数据库超时,如果以后1000多个网站有几十,几百个流量大了,这样的情况肯定会让数据库服务器直接挂掉的。。。。。压力大啊!!!求大鸟来解困也。。。。。
------解决方案--------------------连接池试试。
------解决方案--------------------优化一下程序
看事件探查器看看所有的查询
分布式计算架构
------解决方案--------------------并发性太多了吧,你都是访问同一个服务器,可以考虑负载均衡,建服务器群集,用多台服务器来处理请求,不过这样的投入成本可能比较大
------解决方案--------------------你可以对程序和网站的整体框架进行一次梳理。
搞清楚瓶颈到底出在哪里?
通过分析程序,和监控数据库 你应该可以找出访问最频繁的数据表。对于这些数据表 再继续进行分析,将其分为两类
1 查询最频繁的数据表 每个查询语句都使用with no lock
2.对于查询很多 但是很少修改的表 可以考虑将其放入缓存中 这样就不需要到数据库中查询这些内容了。
——————
不好意思 我是用手机来回复 打字吃不消了,先说这么多。
------解决方案--------------------优化到极致?
有很多数据假设每一次查询统计都是同一个结果,你为什么还反复地查询统计呢?为什么不学习设计缓存机制呢?比如csdn的一个站点负责产生.net栏目的帖子列表,那么顶多只有当有新的帖子/回复时才应该查询数据库。假设子站进行300次首页查询,这个站点才进行一次首页查询更新,那么显然设计正确的缓存依赖策略,这个网站的数据库压力就应该降低到几乎300分之一才对。
------解决方案--------------------——“比如一个页面有三个位置要显示总服务器的数据,查询数据库时,将三个表的数据组成一个DataSet,然后返回到对应的网
站”
在程序中有没有使用cache?
像这样的网站 你应该从整个架构上考虑cache的使用。
网站——cache——数据库