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企业级应用的伸缩性 ...
随机推荐
- .net中excel遇到的一些问题
Excel.Application app; 错误 1 未能找到类型或命名空间名称“Excel”(是否缺少 using 指令或程序集引用?) 解决方法: 添加引用 Interop.Excel.dll ...
- Java开发工具安装步骤内容如下
Java开发工具安装步骤内容如下 安装 开发工具 STS 链接下载网址 eclipse 链接下载网址 JDK安装 jdk链接下载地址 Marven环境 marven链接下载地址 Tomcat tomc ...
- javascript温故知新
1 javascript作用域 初学javascript的时候,变量的作用域就感觉有些麻烦,他不像C#或java那样清晰明了,貌似处处都在作用域内,但有时会处处都是空. javascript中,变量的 ...
- (转)如何用Maven创建web项目(具体步骤)
原文链接:http://blog.csdn.net/chuyuqing/article/details/28879477 使用eclipse插件创建一个web project 首先创建一个Maven的 ...
- Linux系统Vsftp 传文件出现 553 Could Not Create File错误的解决方法
解决方法: 登录出现了这个错误提示:553 Could not create file SELinux设置如下 查看SELinux设置 [root@localhost ~]# getsebool -a ...
- 深入了解Struts2返回JSON数据的原理
首先来看一下JSON官方对于"JSON"的解释: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析 ...
- python cmd下运行中文乱码 策略
如我运行一个脚本,执行后输出中文看不懂 然后呢在文件头加上 from __future__ import unicode_literals 注意:需要去掉所有字符串前的 u, 这样所有字符串均默认为u ...
- C# 数据类型
1.整数类型: int 只能 存储证书,不能存储小数. 2.小数类型: doubie 机能存储整数,也能存储小数,小数点后面的额 15-16位. 3.金钱类型: decimal:用来存储金钱, ...
- [NOI 2006] 最大获利 80分
最后两点怎么搞都要30s+,但是我不会什么优化啊…暂时就这样吧.Dinic的时间复杂度是O(N^2*M) 这题和TDL的幼儿园模板是一样的. 这次写网络流给自己计时了,大约是40min左右,后来都跑去 ...
- 面试复习(C++)之快速排序
#include <iostream> using namespace std; void Quicksort(int *a,int low,int high) { if(low>h ...