请教SQL并行方面的问题 本帖最后由 benlee 于 2011-11-15 14:03:32 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 或许是因为死锁.读操作时采用WITH NOLOCK或许会好一些. 1、数据量有无虚报?按你的描述,你T2,T3每日2500万到6000万,t4每日4000万到9000万,T1更新次数也是每日几千万,两个服务器不分表能正常收集数据就已经很不错了。2、等第一个问题搞清楚再说吧 打开sql 监视器 监听一下看看是那里出问题。 可參照阻塞分析 http://blog.csdn.net/roy_88/article/details/2682044死锁分析 http://blog.csdn.net/roy_88/article/details/2686724 这位高手,情况是这样的GPS是30秒一条定位数据,同时还需要附带同频率的其它业务指令。目前跑到2000多台就有这问题了,也就是说每秒已经达到近100次更新和插入了。其它公司的产品,说是已经测试通过每组能跑2万台,我们整个系统设计也是一组服务器要跑到至少1万台的。目前还没到,不过已经出现这样的问题了。另外,T1是一台服务器,T2上装了6个硬盘做的RAID 5。按目前情况下去,后面可能支持不住了,所以来请教一下高手。 alter database 数据库 set read_committed_snapshot on --这样用已提交快照用這選項設置了就可實現oracle的永不並發功能快照\已提交快照 还有一个我可能没说清楚,是出现一次或是多次超时后,接收服务并不会在过一段时间后恢复插入和更新,会一直超时下去。直到你手动去停止程序和重启SQL 这可能是小问题,接收服务程序有bug或者服务器设置的某些参数不合理引起的。 这位高手我现在的插入是用的自己写的一个类,自动在低速时(就是上线车少时),直接执行SQL,当高速(就是在线车比较多时),把插入合并成50条再执行一次,放到25个线程中,其实刚才说的25个线程是因为在T2上有对应的5个数据库,每个库我开了5个线程,一共是25个线程。就是因为偶尔出现了一次卡死后,整个都停下来了,无法写程序自动检测。只能手动进行,所以来请教是不是有高效的解决办法。另外想知道是不是真的是由于读造成的。 还有,请教一下。因为如果真是读造成的,增加2台服务器问题到不是很大。只是我不太清楚,在实时同步时,两台服务器上的数据是不是真的每秒都一样的,还是有多久时间的差异。其实差30秒之间到是问题不大的,可以接受的。另外,如果同步,因为我数据量比较大,不知道对网速有没有影响。因为网络还需要用来接收 终端的TCP数据。 TO haiwer 正如你说的一样,写入数据多,读出是偶尔性的,除了当前状态表是经常性的读,其它数据都是偶尔性的,不过一次数据就比较大。另外,我确实没有做过这方面数据量的项目。这是每一次做,虽然之前已经反复思考,设计成分库分表了,但依然感觉还是欠缺,所以想请教一下这方面的经验 超时错误(time out)是因为等待时间超过了设定的值,1.延长超时的时间限制,在ADO.net控件属性及sql端的lock_timeout里改.2.等待是因为有阻塞(block),出现问题时迅速找到阻塞的源头进程. 紧急处理方法是kill掉进程号,后面再仔细分析/优化该进程执行的内容.另需注意一个问题,例如a阻塞了b,b阻塞了c,d,e,f...,此时a才是源头,别错杀了b进程. 从问题出现到重启服务,至少有点时间记录点蛛丝马迹的.DBA就是要有这种快速诊断的能力. 关键我不是DBA,是个出血者。 sql 监视器 怎么使用,怎么打开,在那打开,有劳了 1. 针对无人监控的问题,设置一个监控服务器的程序,每隔几分钟检查一下有无死锁,有的话就kill之2. 服务器用raid 5 ,是否可以考虑raid 10,用空间换速度? 毕竟现在硬盘便宜了。 仅是写数据量大的话建议用BCP 写到txt文件,再定时bcp到sqlserver中。 sql2000分段从服务器下载数据 sql server 2000中如何声明一个比varchar (8000)更大的变量. 如何查询数据库头第二条信息? 如何提取一例中的一部分字符重新生成一例? CREATE LOGIN zhangsan WITH PASSWORD='zhangsan',CHECK POLICY=off; 请教两个基础问题! 创建表的问题! 为什么不能执行插入,有演示,有源代码,请各位大虾看看 请教一个存储过程+wildcard的疑问 怎么用游标获取数据!! 这样的多张表如何合并到一张表里? 多表多列汇总如何查询
读操作时采用WITH NOLOCK或许会好一些.
阻塞分析
http://blog.csdn.net/roy_88/article/details/2682044
死锁分析
http://blog.csdn.net/roy_88/article/details/2686724
这位高手,情况是这样的
GPS是30秒一条定位数据,同时还需要附带同频率的其它业务指令。目前跑到2000多台就有这问题了,也就是说每秒已经达到近100次更新和插入了。其它公司的产品,说是已经测试通过每组能跑2万台,我们整个系统设计也是一组服务器要跑到至少1万台的。目前还没到,不过已经出现这样的问题了。另外,T1是一台服务器,T2上装了6个硬盘做的RAID 5。按目前情况下去,后面可能支持不住了,所以来请教一下高手。
快照\已提交快照
还有一个我可能没说清楚,是出现一次或是多次超时后,接收服务并不会在过一段时间后恢复插入和更新,会一直超时下去。直到你手动去停止程序和重启SQL
这位高手
我现在的插入是用的自己写的一个类,自动在低速时(就是上线车少时),直接执行SQL,当高速(就是在线车比较多时),把插入合并成50条再执行一次,放到25个线程中,其实刚才说的25个线程是因为在T2上有对应的5个数据库,每个库我开了5个线程,一共是25个线程。就是因为偶尔出现了一次卡死后,整个都停下来了,无法写程序自动检测。只能手动进行,所以来请教是不是有高效的解决办法。另外想知道是不是真的是由于读造成的。
还有,请教一下。
因为如果真是读造成的,增加2台服务器问题到不是很大。只是我不太清楚,在实时同步时,两台服务器上的数据是不是真的每秒都一样的,还是有多久时间的差异。其实差30秒之间到是问题不大的,可以接受的。另外,如果同步,因为我数据量比较大,不知道对网速有没有影响。因为网络还需要用来接收 终端的TCP数据。
紧急处理方法是kill掉进程号,后面再仔细分析/优化该进程执行的内容.另需注意一个问题,例如a阻塞了b,b阻塞了c,d,e,f...,此时a才是源头,别错杀了b进程.
关键我不是DBA,是个出血者。
2. 服务器用raid 5 ,是否可以考虑raid 10,用空间换速度? 毕竟现在硬盘便宜了。