关于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), ...
随机推荐
- [leetcode]Find Minimum in Rotated Sorted Array @ Python
原题地址:https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array/ 解题思路:话说leetcode上面的二分查找题目 ...
- 【linux】修改文件所属用户和组
使用chown命令可以修改文件或目录所属的用户: 命令:chown 用户 目录或文件名 例如:chown qq /home/qq (把home目录下的qq目录的拥有者改为qq用户) 使用chgrp命 ...
- Scala 深入浅出实战经典 第78讲:Type与Class实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- python 中偏函数 partial 的使用
函数的partial应用 函数在执行时,要带上所有必要的参数进行调用.但是,有时参数可以在函数被调用之前提前获知.这种情况下,一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用. 例 ...
- HDU 4762 Cut the Cake(公式)
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- c++标准库
Technical Report 1不是正式的库只是一个草案,作为C++ 2003标准的附加库被大多数编译器厂商所支持,它是个过渡性质的库,其实现将会作为C++11标准的一部分.很多编译器对C++11 ...
- 如何在使用MAMP环境下安装MySQLdb
我的电脑上没有安装XAMPP,而是安装了MAMP PRO,其实两者都差不多,都是PHP+MySQL+Apache的集成环境,只是MAMP的GUI界面更华丽一些,但是也更复杂一些. 好了不说这些,说说问 ...
- ASP.NET MVC学习系列(二)-WebAPI请求
继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...
- ROS vpn (pptp) 配置及端口绑定配置
网络搜集 一. 按VPN的协议分类 VPN的隧道协议主要有三种,PPTP,L2TP和IPSec,其中PPTP和L2TP协议工作在OSI模型的第二层,又称为二层隧道协议:IPSec是第三层隧道协议,是最 ...
- Python--Cmd窗口运行Python时提示Fatal Python error: Py_Initialize: can't initialize sys standard streams LookupError: unknown encoding: cp65001
源地址连接: http://www.tuicool.com/articles/ryuaUze 最近,我在把一个 Python 2 的视频下载工具 youku-lixian 改写成 Python 3,并 ...