大数据量操作查询的问题,请教
目前在我们的项目中遇到这样的一个问题:
我们的考勤机是通过http协议往数据库里写数据,一个数据包50条数据,一分钟更新一次数据!如果网络不通的话,考勤机会存储数据,等到网络连通的时候再上传数据!现在的问题是:如果使用的考勤机很多的话(200),而且每个考勤机上的脱机数据都很多,比如有5000条数据,同时连通网络,那所有的考勤机数据同时上传,这时就会出现考勤机上的数据不能成功更新到数据库,调试时如下信息:
無法顯示這個網頁
同一時間有太多人存取 Web 站台。
--------------------------------------------
請嘗試執行下列動作:
按一下重新整理按鈕,或稍後再試。
開啟 192.168.0.143 首頁,然後查看您想尋找之資訊的連結。
HTTP 403.9 - 禁止存取: 太多的使用者連接到這個網站
Internet Information Services
--------------------------------------------
技術資訊 (供技術支援人員使用)
背景:
如果 Web 伺服器忙碌,且由於過多的網路交通導致無法處理您的要求,則會發生這個錯誤。
其他資訊:
Microsoft Support
然后我先全部关掉考勤机电源,之后分批次,一次打开10台考勤机电源,等过个三分钟,再开另10台考勤机电源!这样操作的话,数据可以正常更新!我又测试了如果不连接数据库的话就没有问题,一连接数据库的话就出现这种状况!应该是同时有大量连接操作数据库,写入大量数据引起这种状况!请问有没有什么好的解决办法呢?
[解决办法]
能不能这样呢?批次,一次10台考勤机上传数据,像分页,一次最多拿10个,以IP排列
帮UP...关注
[解决办法]
碰到这样的问题,楼主可以参考这样的解决方法:
从考勤机器上下载数据,不要马上INSERT INTO 数据库中,而是上传到服务器上的某一文件夹生成对应的打卡记录txt文件,在SQL SERVER上调用更新数据的存储过程,存储过程功能是遍例文件最新刷卡的文件夹,把打卡记录更新到数据库。
[解决办法]
楼主可以参考方法,变通一下就可以:
--将某个目录上的Excel表,导入到数据库中
--将所有的Excel文件放到一个目录中,假设为c:\test\,然后用下面的方法来做
create table #t(fname varchar(260),depth int,isf bit)
insert into #t exec master..xp_dirtree 'c:\test ',1,1
declare tb cursor for select fn= 'c:\test '+fname from #t
where isf=1 and fname like '%.xls ' --取.xls文件(EXCEL)
declare @fn varchar(8000)
open tb
fetch next from tb into @fn
while @@fetch_status=0
begin
--下面是查询语句,需要根据你的情况改为插入语句
--插入已有的表用:insert into 表 selct * from ...
--创建表用:select * into 表 from ...
set @fn= 'select * from
OPENROWSET( ' 'MICROSOFT.JET.OLEDB.4.0 ' ', ' 'Excel 5.0;HDR=YES;DATABASE= '+@fn+ ' ' ',全部客户$) '
exec(@fn)
fetch next from tb into @fn
end
close tb
deallocate tb
drop table #t
[解决办法]
关键就是这个扩展存储过程:master..xp_dirtree
[解决办法]
以前我也做过考勤软件,你看这样可以不?先查询数据库的连接状况,如果超过你规定的台数在传数据,你就先不传,等空闲了再传就可以了。
[解决办法]
这个瓶颈是在IIS。要作负载均衡。
[解决办法]
不打卡的时候比打卡的时候多……
批次上传应该不难解决吧……
[解决办法]
这样行不行?
你先用自带的“导入数据”来建一个保存在外部的DTS包,这样来解决读取文本文件内容的问题,然后参考DVD_01(OK_008 blog:wghao.cnblogs.com) 的方法来遍历所有TXT文件并调用这个DTS包
[解决办法]
http协议往数据库里写数据?不知道你具体的方法是什么,数据量本身应该不大,应该是频繁的http请求选成服务器无法响应,应该尽量减少请求的次数.
[解决办法]
我觉得应该是iis的问题,有一个并发访问的设置,你可以看看,sql数据库就你的访问量而言不会有问题的,