楼主: kelsoncong

[精华] 如何让SQL Server支持高并发环境

[复制链接]
论坛徽章:
39
开发板块每日发贴之星
日期:2005-04-29 01:02:052011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:33管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18
161#
发表于 2012-9-19 17:41 | 只看该作者
10多页,翻了一遍。解决思路一开始聚焦在数据库,这也符合常规思维,毕竟系统稳定在眼前。我还是友情发表下建议:
1.数据库负载能力具体如何?SQL耗时、读写IO等等;
2.减轻数据库负载手段。比如调整应用代码,考虑例如缓存、静态化,去掉无用、频率高访问等等手段;
3.网络及硬件。比如增加应用层负载服务器;提高服务器配置等等;
4.数据库优化。读写分离等等,SSD也可以尝试。

楼主可以初步总结下套路了,哪些合适sqlserver,哪些需要什么样的硬件或环境条件等等。

使用道具 举报

回复
求职 : ERP实施
论坛徽章:
9
奥运会纪念徽章:足球
日期:2012-09-19 13:48:18奥运会纪念徽章:帆船
日期:2012-08-03 14:11:05奥运会纪念徽章:曲棍球
日期:2012-09-18 09:13:02奥运会纪念徽章:手球
日期:2012-10-09 11:27:07ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24ITPUB社区千里马徽章
日期:2013-06-09 10:15:342015年新春福章
日期:2015-03-04 14:51:122015年新春福章
日期:2015-03-06 11:57:31
162#
发表于 2012-9-20 10:07 | 只看该作者
优化,觉得意义不大

使用道具 举报

回复
论坛徽章:
67
现任管理团队成员
日期:2012-06-02 02:10:00ITPUB元老
日期:2012-09-12 14:06:14ITPUB社区千里马徽章
日期:2013-06-09 10:15:34季节之章:冬
日期:2012-09-04 11:05:30季节之章:春
日期:2012-09-05 09:20:36优秀写手
日期:2013-12-18 09:29:09马上有房
日期:2014-04-10 13:35:362014年新春福章
日期:2014-04-14 09:54:08马上有车
日期:2014-02-28 16:43:13马上加薪
日期:2014-02-19 11:55:14
163#
 楼主| 发表于 2012-9-21 16:52 | 只看该作者
Angel.John 发表于 2012-9-19 17:41
10多页,翻了一遍。解决思路一开始聚焦在数据库,这也符合常规思维,毕竟系统稳定在眼前。我还是友情发表下 ...


结贴的时候会总结下

使用道具 举报

回复
论坛徽章:
15
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:27马上有房
日期:2014-04-04 19:42:43马上有对象
日期:2014-02-18 16:44:082014年新春福章
日期:2014-02-18 16:44:08本田
日期:2014-01-16 21:44:06大众
日期:2013-12-14 09:29:562013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:48奥运会纪念徽章:射箭
日期:2012-07-26 13:53:55奥运会纪念徽章:跆拳道
日期:2012-07-13 13:54:19
164#
发表于 2012-9-22 21:35 | 只看该作者
上1~2t内存,能缓存都缓存

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
165#
发表于 2012-9-23 00:23 | 只看该作者
KantCheng 发表于 2012-9-13 11:22
具体情况还要具体分析,哪个地方是瓶颈就优化哪里。呵呵,不过这么说有点事后诸葛亮的意思。


当然不是事后诸葛亮,强烈要求楼主说出瓶颈,要不然市面上任何一本OLTP的scalability,performance tuning的书,资料都适用。

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
166#
发表于 2012-9-24 09:25 | 只看该作者
本帖最后由 z2chen 于 2012-9-24 12:14 编辑

根据我做开发的经验,发现很多很多的问题其实都能用很少的资源就能完成,可惜大家写程序的时候都不愿花时间去想,程序都是随手就写出来的,
只要能运行,正确,就可以了。还有很多人则醉心于clean code, pattern. 对花少资源办大事根本不感兴趣,大部分不了解数据库的程序员,认为内存,硬盘现在不值钱。
结果往往就是用户多了,功能多了,系统动不了了,才开始想办法。  我也是一边做,一边想,有一点点心得,简单写出来,希望能抛砖引玉。


1,减少没有必要的读写。
a)网页设计要合理,大多数用户用不到的东西就不要写进去, 少数用户用到的东西,就去另外的页面。 没有必要的功能就不要加进去,少就是多。
b) 在程序中严格控制对数据库读写的操作,例如不能在循环里面做数据库操作。只允许用batch 和 bulk对数据库操作。
c)每次读取的数据要控制,不能因为每次读的数据太少而动不动的就去数据库读。 也不允许把太多的数据一起载入程序内存,这样会把真正有效用的多的数据踢出内存跟缓存,同时加大了数据库的压力。
d)分析用户数据,把一些用户共享的,不经常改变的数据,放在缓存中,用户使用的时候就没有必要去数据库查询了,尽可能的减少数据库的操作。 如何高效利用缓存上多下工夫。
e)能在客户端运行的(or web server,app server),就少让他们在数据库里运行. 不该这个数据库管的东西,就去别的服务器上查询,不要把什么都写在自己的数据库里。当然也有时候用SP效率很高,性价比高,就放在数据库做,有query plan等,便于调优。
f)把对数据库的insert,update尽量放在程序transaction的最后,一次搞定, 不要反复存取,修改再修改。之前的操作在内存里完成。

2,加快或减慢对数据库的操作。
a)分析用户使用习惯,看看有哪些任务没有必要当下必须完成的,就把他们积累起来,等系统不忙的时候做。哪些任务是用户常用到的,想法子提前做完。 减少高峰期瞎忙。
b) 有些必须当下完成的,做个评估系统,简单的就马上做,复杂的就async.放到queque里, 根据数据库繁忙程度几个几个的来,不要搞垮服务器。
  c) zip往来的数据。
  d) 有些情况可以考虑多线程的处理一个用户的需求,让他完成工作,早点离开系统,     如果可能的话。
  
3, 让数据库快点处理数据。假设是OLTP
a) 让数据库读写的快些,合理设计表,主要业务的join不要多于4个。
    谨慎选择index,控制数量最好不要多4个。谨慎设计clustered index.
  b)注意优化SP,多用一些小的set,没有必要的数据在sp的前面就过滤掉。
  c)合理的用isolation level,减少blocking.
  d) 还是batch and bluk,寻求之间的平衡点。
  f) 根据具体情况调整数据库的使用,partition? fulltext search engine? read-only replica? outsourcing file db?

使用道具 举报

回复
论坛徽章:
26
ITPUB伯乐
日期:2012-05-22 15:05:35喜羊羊
日期:2015-05-14 12:15:30美羊羊
日期:2015-07-02 22:22:59秀才
日期:2015-08-24 09:51:48天枰座
日期:2015-11-05 16:53:35双鱼座
日期:2015-12-05 19:22:56巨蟹座
日期:2015-12-20 18:46:10摩羯座
日期:2016-05-19 09:54:17ITPUB15周年纪念
日期:2016-10-13 13:15:34秀才
日期:2017-02-22 15:16:26
167#
发表于 2012-9-24 14:50 | 只看该作者
z2chen 发表于 2012-9-24 09:25
根据我做开发的经验,发现很多很多的问题其实都能用很少的资源就能完成,可惜大家写程序的时候都不愿花时间 ...

很全面 学习

使用道具 举报

回复
论坛徽章:
0
168#
发表于 2012-9-25 11:26 | 只看该作者
z2chen 发表于 2012-9-24 09:25
根据我做开发的经验,发现很多很多的问题其实都能用很少的资源就能完成,可惜大家写程序的时候都不愿花时间 ...

学习学习

使用道具 举报

回复
论坛徽章:
9
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:512012新春纪念徽章
日期:2012-01-04 11:56:192013年新春福章
日期:2013-02-25 14:51:24福特
日期:2013-10-03 17:43:342014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08优秀写手
日期:2014-08-13 06:00:13秀才
日期:2015-10-19 15:49:55秀才
日期:2015-11-12 17:43:40
169#
发表于 2012-9-25 11:33 | 只看该作者
楼主,以及各位大侠,这个话题我很感兴趣,从头看到尾,现在只有一个问题,这个并发通过什么方式可以获取到,就是怎么计算的,可否指教了下。比如sql server我怎么计算出这个并发量,对于ORACLE数据库我怎么计算这个并发量。

使用道具 举报

回复
论坛徽章:
67
现任管理团队成员
日期:2012-06-02 02:10:00ITPUB元老
日期:2012-09-12 14:06:14ITPUB社区千里马徽章
日期:2013-06-09 10:15:34季节之章:冬
日期:2012-09-04 11:05:30季节之章:春
日期:2012-09-05 09:20:36优秀写手
日期:2013-12-18 09:29:09马上有房
日期:2014-04-10 13:35:362014年新春福章
日期:2014-04-14 09:54:08马上有车
日期:2014-02-28 16:43:13马上加薪
日期:2014-02-19 11:55:14
170#
 楼主| 发表于 2012-9-25 12:00 | 只看该作者
z2chen 发表于 2012-9-24 09:25
根据我做开发的经验,发现很多很多的问题其实都能用很少的资源就能完成,可惜大家写程序的时候都不愿花时间 ...

完全赞同,系统性能调整绝对是个系统性的工程,需要全盘考虑。
但是这个话题实在是太大了,容易导致讨论分散,因此我选取了一小块做展开讨论。
而且在实际工作中也经常遇到,就是在程序已经基本固定了,怎么通过数据库端的一些技术拓展系统的并发性。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表