当前位置:编程学习 > C#/ASP.NET >>

★★★高并发数据库存取如何处理?

如题,情况是这样的,公司有一台中等的服务器,仅此一台,在不改变硬件的情况下如何解决如下并发问题:

我用asp.net写了个web 接口,即ashx页面,客户端是手机游戏用户,每启动一次会传一些手机的的相当信息给服务器,数据不大,也就一些文字,然后到了周末时,可以会同时N个用户同时打开软件,然后同时向服务器传数据(注意:也会同时向服务器下拉数据),这样下来服务器马上崩溃了,MSSQL数据库出现死锁现象。网站马上打不开……

关键所在:

我当时用的是写存储过程,即Select这个表,有数据的就Update时间,没有的就Insert一条记录,这样就是会让双核CPU占用率99%而死掉,因为这个表所记录的用户有两百万个,而且还会增加,现在求大师解决此难题。

--------------------编程问答-------------------- 你们的用户量有多少W啊?
还能拉跨服务器?

根据你的情况
只要把每次都Select这个大bug解决掉
基本上就能解决了


--------------------编程问答-------------------- 升级硬件 --------------------编程问答-------------------- 1.设置数据库访问超时时间限制
2.利用事务,当异常信息操作时,回滚
23.建立索引,优化查询语句效率 --------------------编程问答-------------------- 使用单线程,批量执行sql

比如:

static string sql = "";
static object obj_lock = new object();
static void Save(){
lock(obj_lock){
sql+="sql语句";
if(sql.length>1000) //执行并清空sql
}
} --------------------编程问答--------------------
引用楼主  的回复:
即Select这个表,有数据的就Update时间,没有的就Insert一条记录,


修改这个过程
在ashx开始运行时,先把数据库里的记录加载到内存,并建立key用于快速查找
当客户端提交数据时
先从内存里查找
如果内存里有,则修改内存和数据库的记录
如果内存里没有,则Insert到内存和数据库
这样,原来需要执行两条SQL,现在只需要执行一条


--------------------编程问答-------------------- 感谢楼上的人发话,但我均试过,均不能解决,我有点怀疑要四核双CPU加32G内存才能解决。继续等。 --------------------编程问答-------------------- 个人觉得select查询应该优化,查询语句用赋值方式,使数据库查询速度加快。
还要尽量减少数据库交互次数。
最后,设置访问上线数,访问结束后及时断开数据连接,处理数据用异步方式。 --------------------编程问答--------------------
引用 5 楼  的回复:
引用楼主  的回复:
即Select这个表,有数据的就Update时间,没有的就Insert一条记录,


修改这个过程
在ashx开始运行时,先把数据库里的记录加载到内存,并建立key用于快速查找
当客户端提交数据时
先从内存里查找
如果内存里有,则修改内存和数据库的记录
如果内存里没有,则Insert到内存和数据库
这样,原来需要执行两条SQL,现在只需要执行一条

……


数据库几百万条记录,如何加载到内存?能否说得具体一点? --------------------编程问答--------------------
引用 8 楼  的回复:
数据库几百万条记录,如何加载到内存?能否说得具体一点?


做过服务端开发的都知道
有时候
最没压力的就是数据库服务器
因为在服务器启动时就把所有数据缓存到内存了
极少会直接操作数据库
就算要insert,update,delete数据库,也会先写到队列
然后肯定会有一条线程慢慢操作
根本没有并发的可能性

几百万条记录 
加到内存
可能也就100M不到



--------------------编程问答--------------------
引用 9 楼  的回复:
引用 8 楼  的回复:
数据库几百万条记录,如何加载到内存?能否说得具体一点?


做过服务端开发的都知道
有时候
最没压力的就是数据库服务器
因为在服务器启动时就把所有数据缓存到内存了
极少会直接操作数据库
就算要insert,update,delete数据库,也会先写到队列
然后肯定会有一条线程慢慢操作
根本没有并发的可能性

几百万条记录 
加到内存
可能也……

 烦请老师告知一下,我真不知道这回事,如何加到内存??或留个QQ吧。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,