SqlServer性能优化 提高并发性能(八)
并发访问:
当多个线程访问同一个资源,会产生并发性问题
并发控制与处理:
乐观并发控制:一种方式是“后来的更新者获胜” 这意味着先来的用户提交的值会在没有察觉的情况下丢失。
为记录加锁以阻止其他事物访问某些记录,是避免产生并发冲突的一种技术
悲观并发控制:
1.一个线程操作表,造成整个表被锁定
2.其他线程访问与操作任何记录都被阻止
3.其他线程可以添加记录
4.最小的吞吐量、最差的性能
事物恢复与检查点:

事物指南:
1.事物尽量简单
2.事物尽量只包含必要的语句;验证与查询等语句放置在事物之外
3.避免事物与用户的交互
避免锁的问题:
1.丢失的更新
2.脏读
3.不一致性分析
4.幻象集
锁的粒度:

锁的类型:

平衡乐观与悲观并发访问:
1.建立合适的索引
2.操作语句尽量放到短事物中
3.操作语句尽量指定特定的筛选条件、窄的访问列
4.索引查询提示
5.应用程序访问模式
创建表:
create table Employee(id int identity(1,1),name varchar(500),age int)
insert Employee values('caochao',34)
insert Employee values('ligang',28)
insert Employee values('zhangqing',36)
insert Employee values('huang',23)
go
begin tran
update Employee set age=age+1 where age>=30
新建一个查询窗口:
select *from Employee
访问就被阻塞掉了。没有结果。
执行删改查的方法都没什么用。
select * from Employee where age>30
select * from name,age from employee where age<30
update employee set age=age+1 where age<30
delete employee where age=20
添加是可以的:
insert Employee values('xili',50)
查看锁的命令:
sp_lock

进行回滚把锁释放:
rollback tran
没有排他锁:

创建非聚簇索引:
create nonclustered index nc_Employee_age on Employee(age) include(name)
模拟开启事物不结束:
begin tran
update Employee set age=age+1 where age>=30
锁的情况:

访问如下两个语句不行:
select *from Employee
select * from Employee where age>30
这条语句可以访问(锁住的行不能访问,不锁的是可以访问的):
select name,age from employee where age<30

在非聚集的索引页面进行了age进行了物理排序,访问的是在被锁住行排序的上面。并不需要穿透锁住的行
这句语句是不能执行的:(无法穿透>30的记录)
select * from Employee where age<20
在执行跟新语句:
update employee set age=age+1 where age<30
无法执行,查看执行计划,直接进行了表扫描:

在执行一条查询语句:执行的表扫描 不能进行查询
select * from Employee where age<30

执行删除语句:(可以) 执行的是非聚集索引
delete employee where age=20

应用索引提示的方法:
select * from employee with(index=nc_Employee_age) where age<30
查看执行计划:

update 不能用索引提示:

硬性访问: readpast 绕过被排他锁锁住的行,直接往下面进行访问
select * from Employee with(readpast)
结果:(只能访问不被锁住的)

SqlServer性能优化 提高并发性能(八)的更多相关文章
- SqlServer性能优化 提高并发性能二(九)
补充上一篇修改用非聚集索引: update Employee set age=age+1 from Employee with(index=nc_Employee_Age) where age< ...
- 性能优化——Web前端性能优化
核心知识点: 1.排查网站性能瓶颈的手法:分析各个环节的日志,找出异常部分 2.Web前端:网站业务逻辑之前的部分(浏览器.图片服务.CDN) 3.优化手段 1)浏览器优化 (1)减少http请求 a ...
- Android App性能优化笔记之一:性能优化是什么及为什么?
By Long Luo 周星驰的电影<功夫>里面借火云邪神之口说出了一句至理名言:“天下武功,唯快不破”. 在移动互联网时代,同样如此,留给一个公司的窗口往往只有很短的时间,如何把握住 ...
- 微擎开启性能优化里面的性能优化memcache内存优化及数据库读写分离
http://www.mitusky.com/forum.php?mod=viewthread&tid=3135 [微擎 安装使用] 微擎开启性能优化里面的性能优化memcache内存优化及数 ...
- nginx配置优化提高并发量
1 nginx配置优化提高并发量 worker_processes 2; 这个按照CPU的核数来决定 2 worker_connections 65535; 这个一般设置65535即可 每个进程允许的 ...
- web性能优化-网络传输性能优化
浏览器工作原理:https://www.cnblogs.com/thonrt/p/10008220.html 浏览器渲染原理: https://www.cnblogs.com/thonrt/p/100 ...
- Web性能优化 高并发网站解决 单例 已看1
Web性能优化分为服务器端和浏览器端两个方面. 一.浏览器端,关于浏览器端优化,分很多个方面1.压缩源码和图片JavaScript文件源代码可以采用混淆压缩的方式,CSS文件源代码进行普通压缩,JPG ...
- Web前端性能优化——提高页面加载速度
前言: 在同样的网络环境下,两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒, ...
- JVM性能优化,提高Java的伸缩性
很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题.我说过JVM的自身技术限制了Java企业级应用的伸缩性 ...
随机推荐
- java List 排序
List<Map.Entry<String, String>> infoIds = new ArrayList<Map.Entry<String, String&g ...
- SQL 存储过程 解析XML
第一种说明: 我看过这样一篇文章,如下 在SQL Server2005中,微软延续了 2000中一个特性(即支持XML类型的数据),并加强了对XML 数据列.XML变量以及XML索引的支持 ...
- 简单学会.net remoting
简介 •.net remoting是.net在RPC分布式应用的技术.首先,客户端通过 remoting访问通道以获得服务端对象,再通过代理解析为客户端对象,通过通道来实现远程对象的调用. 原理 •远 ...
- HashTree(哈希树) ——和trie类似,只是将字符换成了质数,sphinx用到了???
摘自:http://blog.csdn.net/yang_yulei/article/details/46337405 哈希树的理论基础 [质数分辨定理] 简单地说就是:n个不同的质数可以" ...
- linux 硬盘速度测试
[root@iZ25oat874uZ data]# time dd if=/dev/zero of=/var/test bs=8k count=1000000 1000000+0 records in ...
- javascript 中继承实现方式归纳
转载自:http://sentsin.com/web/1109.html 不同于基于类的编程语言,如 C++ 和 Java,javascript 中的继承方式是基于原型的.同时由于 javascrip ...
- ASP.NET MVC为字段设置多语言显示 [转]
这段时间一直在忙.NET的项目,今天就写一下关于.NET的文章吧,也很长时间没写过.NET的啦 在使用ASP.NET MVC3 的时候,使用元数据模式可以非常方便地设置每个 字段(或者说属性)以减少 ...
- Task
.net 4.0为我们带来了TPL(Task Parallel Library),其中Task相较ThreadPool线程池使用更简单,而且支持线程的取消,完成和失败通知等交互性操作,而这些是Thre ...
- Entity Framework – (复数)Plural and (单数)Singular 表名Table names
By default, the Entity Framework will assume that all of the names of your tables in your database a ...
- uva 213 Message Decoding
思路来自紫书...开始时的思路估计100行+,果断放弃!关键:1.正确提取出函数! initmap():初始化字母与整数的映射. returnint(x):向后读取x位,并转换为十进制数返回. ...