跨服务器数据表设计相关

kate_1988 2013-02-18 03:40:00
现状:已有程序是用delphi写的;整个“上传药监信息”程序,用到了六张数据表(未上传购进,已上传购进,未上传销售,已上传销售,还有两表是存放在另服务器的药监码主表及细表)
问题:已有系统上传速度很慢,经常卡死!
准备重写程序,但是可能是看了太久原来的那个代码,现在没有思路,被困住了
希望各位能给支支招:主要是数据库方面的,表设计等。。。
...全文
207 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2013-02-19
  • 打赏
  • 举报
回复
那你试试直接执行后面那种情况的语句,看看会不会非常慢?因为删除一条,本来就很快。所以基本上不存在卡死。但是大数据量的时候如果很慢,那就有可能卡住了。
kate_1988 2013-02-19
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
你要看看“慢”是在上传的哪部分,是传到文件服务器上慢(也就是网络问题)还是存到数据库慢(数据库的问题)?如果是网络问题,就没必要改动设计,如果是数据库慢,那就要检查插入SQLServer的时候是否有过多的约束、索引、判断?或者是对大数据量却一行一行插入等问题。先找原因,再找处理方法,你这个想法我觉得不保证有效。
不好意思,新手问的问题描述不太清楚(主要是我也没把原程序理解透彻)。 首先网络是没有问题的,那就是代码出问题了。例如,在A中写的存储过程中,有一步是要根据A中某表的数据删除服务器B中某表的的数据,这一步用单条逐步可以实现,或者将待处理数据id全部插入B的临时表,然后再调用B中存储过程删除冗余数据。但是这两种方法往往都会造成程序未执行完删除就卡死了。前者卡的数据相对来说还少很多。请问这个是否有悖于大数据量单条执行效率低呢?
kate_1988 2013-02-19
  • 打赏
  • 举报
回复
由于测试数据量不足,可能提速表现不明显,但是分开执行两个链接不同服务器的存过好于一个跨服务器存过。改良后:(无未删除冗余数据)
budong0000 2013-02-19
  • 打赏
  • 举报
回复
这个不跨服吧,你把语句都放到存储过程里做。 常见app慢的原因: http://www.sommarskog.se/query-plan-mysteries.html#linkedservers
-Tracy-McGrady- 2013-02-19
  • 打赏
  • 举报
回复
kate_1988 2013-02-19
  • 打赏
  • 举报
回复
谢谢各位的帮助!我现在试一下多建个query来执行另一服务器的工作。这样速度可能会有所提高。结果待续
-Tracy-McGrady- 2013-02-19
  • 打赏
  • 举报
回复
發糞塗牆 2013-02-19
  • 打赏
  • 举报
回复
跨数据库甚至跨服务器需要做很多事情,比如权限检查等,本身就加大了处理的时间,而且索引、统计信息都仅在库中有效,所以速度上几乎不会比单库操作快。如果非必要,还是不建议使用跨库或者跨服务器处理。
kate_1988 2013-02-19
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
那你试试直接执行后面那种情况的语句,看看会不会非常慢?因为删除一条,本来就很快。所以基本上不存在卡死。但是大数据量的时候如果很慢,那就有可能卡住了。
数据量一般不多几百条到一千条,单条逐步执行后会卡掉十几条未删除冗余数据,但是跨服务器执行存储过程(在B服务器上执行SQL:delete from 表 where id in (select id from 存放待删除数据id的表 ))这样就会卡很多。所以现在我常常需要在后台手动执行后续的删除工作(手动在B服务器上执行那个存过) 我在想,会不会跟程序里面query的commandtimeout(默认值30)属性有关,因为,当我把commandtimeout值设为0(无穷大),则程序虽然反应慢,但最终是能成功执行完包括删除冗余数据的!
mickers 2013-02-18
  • 打赏
  • 举报
回复
嗯,期待答案,和实践,并得到结论
發糞塗牆 2013-02-18
  • 打赏
  • 举报
回复
你要看看“慢”是在上传的哪部分,是传到文件服务器上慢(也就是网络问题)还是存到数据库慢(数据库的问题)?如果是网络问题,就没必要改动设计,如果是数据库慢,那就要检查插入SQLServer的时候是否有过多的约束、索引、判断?或者是对大数据量却一行一行插入等问题。先找原因,再找处理方法,你这个想法我觉得不保证有效。
shoppo0505 2013-02-18
  • 打赏
  • 举报
回复
估计是每人愿意帮你重新设计的。 你可以自己先设计一个,帮你改改倒是可能。
1、本课程是一个干货课程,主要讲解如何封装服务器底层,使用Tcp/ip长连接,IDE使用vs2019 c++开发以及使用c++11的一些标准,平台windows和linux,服务器性能高效,单服务器压力测试上万无压力,服务器框架是经历过上线产品的验证,框架简单明了,不熟悉底层封装的人,半个小时就能完全掌握服务器框架上手写业务逻辑。2、本课程是一个底层服务器框架教程,主要是教会学员在windows或linux下如何封装一个高效的,避免踩坑的商业级框架,服务器底层使用初始化即开辟内存的技术,使用内存池,服务器运行期间内存不会溢出,非常稳定,同时服务器使用自定义哈希hashContainer,在处理新的连接,新的数据,新的封包,以及解包,发包,粘包的过程,哈希容器性能非常高效,增、删、查、改永远不会随着连接人数的上升而降低性能,增、删、查、改的复杂度永远都是恒定的O(1)。3、服务器底层封装没有使用任何第三方网络库以及任何第三方插件,自由度非常的高,出了任何BUG,你都有办法去修改,查找问题也非常方便,在windows下使用iocp,linux下使用epoll.4、讲解c++纯客户端,主要用于服务器之间通信,也就是说你想搭建多层结构的服务器服务器服务器之间使用socket通信。还可以使用c++客户端做压力测试,开辟多线程连接服务器,教程提供了压力测试,学员可以自己做压力测试服务器性能。5、赠送ue4和unity3d通信底层框架以及多人交互demo,登录,注册,玩家离开,同步主要是教会学员服务器与客户端如何交互。6、赠送c++连接mysql数据库框架demo,登录,注册,玩家离开数据持久化.7、服务器教程使用自定义通信协议,同时也支持protobuf,选择权在开发者自己手里,想用什么协议都可以,自由度高。8、服务器教程使用手动敲代码逐句讲解的方式开展教学课程。非喜勿喷,谢谢大家。9、服务器教程提供源码,大家可以在平台提供的地址下载或者联系我,服务器使用c++11部分标准,std::thread,条件变量,线程锁,智能指针等,需要学员具备一定c++知识,购买前请慎重考虑。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧