关于SQL SERVER高并发解决方案
现在大家都比较关心的问题就是在多用户高并发的情况下,如何开发系统,这对我们程序员来说,确实是值得研究,最近找工作面试时也经常被问到,其实我早有去关心和了解这类问题,但一直没有总结一下,导致面试时无法很完整全面的回答,所以今天我专门总结概况了一下关于SQL SERVER高并发解决方案,希望能帮助大家,若有不对之外,还请及时告之,谢谢!
SQL SERVER高并发解决方案主要是从以下几个方面:
1.SQL语句优化:
A.尽可能的精确查询条件及查询字段,缩小查询范围(包括使用分页查询);
B.查询条件中尽可能少用:like,(not)in,(not)is null,order by,distinct,count(*),!=,<>;
C.不要对查询的字段进行函数运算,
如:aa. substring('aa123',1,2)='aa',而应该是:'aa123' like 'aa%'; ---应用到了索引
bb. 'aa'+'123'='aa123',而应该是:'aa'=left('aa123',2)
D.判断数据存在,不要使用TOP 1,而应该是:EXITS
E.对于复杂SQL查询,可直接使用SQL存储过程或建立视图(视图不可太复杂);
F.尽可能的少用游标,触发器;
2.表设计优化:
A.纵向分割表设计,将表按照某种原则(可按照字段读写频率来设计)设计成相对应的几个表,之间采用主(外)键关联查询;
B.横向分割表设计,将表中的数据按照使用价值(比如:只用只用到近3个月的有效数据)来进行数据转移备份,以减少表的数据量;
C.表数据物理存放分区设计,将表中的数据按照某种规则建立物理表分区来存储,以降低硬盘的IO负担;
D.建立适当的索引(聚集索引与非聚集索引);
3.事务设置优化:
事务隔离级别有:(隔离级别作用于事务中,而锁作用于每条SQL语句上)
|
隔离级别 |
脏读 |
不可重复读取 |
幻像 |
说明 |
产生或等同对应的锁 |
|
未提交读(read uncommitted) |
是 |
是 |
是 |
如果其他事务更新,不管是否提交,立即执行 |
NOLOCK |
|
提交读(read committed默认) |
否 |
是 |
是 |
读取提交过的数据。如果其他事务更新没提交,则等待 |
HOLDLOCK |
|
可重复读(repeatable read) |
否 |
否 |
是 |
查询期间,不允许其他事务update |
HOLDLOCK |
|
可串行读(serializable) |
否 |
否 |
否 |
查询期间,不允许其他事务insert或delet |
HOLDLOCK |
A.事务隔离原则:共享读,排它写,即表示:在执行查询时,若对数据一致性要求很高时,可采用可重复读(repeatable read)隔离级别,若没有严格要求,则可建议使用未提交读(read uncommitted)隔离级别;
4.服务器硬件优化:
A.服务器内存,硬盘等核心硬件性能当然越强越好;
B.购买多台服务器并建立集群,以实现利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行;
C.在多台服务器建立DB镜像同步,并实现读写分离,即:除了指定的一台或几台服务器具有允许更新以外,其余的服务器均只作为数据镜像同步,不能更新,仅供查询;
关于SQL SERVER高并发解决方案的更多相关文章
- SQL Server 高并发Insert数据解析,实践
在现实的生产环境中,有可能遇到高并发insert的应用.在此应用时由于堆表(Heap)和聚集表的结构不同导致在高并发的情形下insert效率不尽相同.接下来我会简单的以测试用例来简要说明.并举例说明如 ...
- 深入解析 SQL Server 高可用镜像实现原理
作者:郭忆 本文由 网易云 发布. SQL Server 是 windows 平台 .NET 架构下标配数据库解决方案,与 Oracle.MySQL 共同构成了 DB-Engines Ranking ...
- sql server对并发的处理-乐观锁和悲观锁
https://www.cnblogs.com/dengshaojun/p/3955826.html sql server对并发的处理-乐观锁和悲观锁 假如两个线程同时修改数据库同一条记录,就会导致后 ...
- 深入解析SQL Server高可用镜像实现原理
本文来自网易云社区 SQL Server 是windows平台.NET架构下标配数据库解决方案,与Oracle.MySQL共同构成了DB-Engines Ranking的第一阵营,在国内外企业市场中有 ...
- 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...
- SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn(实战篇)之AlwaysOn可用性组搭建
因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...
- SQL Server提高并发查询效率
同事写了个程序用创建多个线程使用ado同时对同个数据库进行相同的查询,涉及2张数据表的联查.当线程数非常多的情况下,读取数据的效率就会变得很慢,例如50个线程同时查询大概3000条数据,查询完成后通过 ...
- SQL Server高可用——日志传送(4-3)——使用
原文:SQL Server高可用--日志传送(4-3)--使用 顺接上一篇:SQL Server高可用--日志传送(4-2)--部署 本文为本系列最重要的一篇,讲述如何使用日志传送及一些注意事项.从上 ...
- SQL Server高可用——日志传送(4-1)——概论
原文:SQL Server高可用--日志传送(4-1)--概论 本文作为学习总结,部分内容出自联机丛书及其他书籍 日志传送是什么? SQLServer 2012之前(2012出现了AlwaysOn), ...
随机推荐
- [UWP]一种利用Behavior 将StateTrigger集中管理的方案
不做开篇废话,我们发现: AdaptiveTrigger 不够好 我们知道,UWP可以在一个页面适应不同尺寸比例的屏幕.一般来说这个功能是通过官方推荐的AdaptiveTrigger 进行的. 比如这 ...
- 转:VC解析XML文件-CMarkup的使用详解
本篇文章是对VC解析XML文件-CMarkup的使用进行了详细的分析介绍,需要的朋友参考下 VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等. 据说tinyX ...
- 使用nginx-http-concat优化网站响应
前言: 我们在访问淘宝的时候,会看到代码中的js和css文件是通过一次请求或得的,我们知道浏览器一次请求只能并发访问数个资源,这样的处理错输在网络传输层面可以大大节省时间,这里使用的技术就是把css. ...
- webdriver实用指南迁移至gitbbok并改名为selenium webdriver从入门到提高
背景 几年前我写了一本关于selenium webdriver的小册子,主要讲了一些selenium在进行测试过程中会遇到的场景以及解决方案,陆陆续续在github上收到了100+的star,在这里我 ...
- 【转】安装OpenSSL缺失Microsoft Visual C++ 2008 Redistributables的解决方案
from: http://www.cnblogs.com/luguo3000/p/3539815.html 在安装OpenSSL的时候通常会提示以下错误: "The Win32 OpenSS ...
- Android学习笔记----Activity的生命周期图示
转载,一目了然.
- WinStore控件之Button
1 Buton入门简单应用 <StackPanel > <Button Content="按钮1" Height="80" Name=&quo ...
- 谈谈CSS预处理技术中for循环的应用-CSS Sprite
各种新技术的出现,推动着Web前端技术飞速发展,在提升用户体验的同时也方便开发者: 在前端优化时,我们使用CSSSprite技术,把多个图片合在一张图片上,然后通过background-image,b ...
- 明天去FDUSC报道了,GOD BLESS ALL OF US
@lrb @tellmewtf @proverbs
- [原]ffmpeg编译android 硬解码支持库 libstagefright
最近花了一天时间将ffmpeg/tools/build_stagefright执行成功,主要是交叉编译所需要的各种动态库的支持没链接上,导致各种报错,基本上网络上问到的问题我都碰到了,特此记录下来. ...