高可用性、负载均衡的mysql集群解决方案

高可用性、负载均衡的mysql集群解决方案

ID:35289734

大小:530.34 KB

页数:49页

时间:2019-03-23

高可用性、负载均衡的mysql集群解决方案_第1页
高可用性、负载均衡的mysql集群解决方案_第2页
高可用性、负载均衡的mysql集群解决方案_第3页
高可用性、负载均衡的mysql集群解决方案_第4页
高可用性、负载均衡的mysql集群解决方案_第5页
资源描述:

《高可用性、负载均衡的mysql集群解决方案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、数据库弱一致性四个隔离级别SQL-92标准中定义了四个隔离级别,这四个隔离级别在以前版本的SQLServer中即受到支持:READUNCOMMITTEDREADUNCOMMITTED是限制性最弱的隔离级别,因为该级别忽略其他事务放置的锁。使用READUNCOMMITTED级别执行的事务,可以读取尚未由其他事务提交的修改后的数据值,这些行为称为“脏”读。这是因为在ReadUncommitted级别下,读取数据不需要加S锁,这样就不会跟被修改的数据上的X锁冲突。比如,事务1修改一行,事务2在事务1提交之前读取了

2、这一行。如果事务1回滚,事务2就读取了一行没有提交的数据,这样的数据我们认为是不存在的。READCOMMITTEDREADCOMMITTED(Nonrepeatablereads)是SQLServer默认的隔离级别。该级别通过指定语句不能读取其他事务已修改但是尚未提交的数据值,禁止执行脏读。在当前事务中的各个语句执行之间,其他事务仍可以修改、插入或删除数据,从而产生无法重复的读操作,或“影子”数据。比如,事务1读取了一行,事务2修改或者删除这一行并且提交。如果事务1想再一次读取这一行,它将获得修改后的数据或

3、者发现这一样已经被删除,因此事务的第二次读取结果与第一次读取结果不同,因此也叫不可重复读。实验1query1:事务1--step1:创建实验数据select*intoEmployeefromAdventureWorks.HumanResources.EmployeealtertableEmployeeaddconstraintpk_Employee_EmployeeIDprimarykey(EmployeeID)--step2:设置隔离级别,这是数据库的默认隔离界别SETTRANSACTIONISOLATI

4、ONLEVELREADCOMMITTED--step3:开启第一个事务BEGINTRANtran1--step4:执行select操作,查看VacationHours,对查找的记录加S锁,在语句执行完以后自动释放S锁SELECTEmployeeID,VacationHoursFROMEmployeeWHEREEmployeeID=4;--step5:查看当前加锁情况,没有发现在Employee表上面有锁,这是因为当前的隔离界别是READCOMMITTED--在执行完step2以后马上释放了S锁.SELECT

5、request_session_id,resource_type,resource_associated_entity_id,request_status,request_mode,resource_descriptionFROMsys.dm_tran_locks查看锁的情况如下图所示,我们发现在只有在数据库级别的S锁,而没有在表级别或者更低级别的锁,这是因为在ReadCommitted级别下,S锁在语句执行完以后就被释放。query2:事务2--step6:开启第二个事务BEGINTRANtran2;--

6、step7:修改VacationHours,需要获得排它锁X,在VacationHours上没有有S锁UPDATEEmployeeSETVacationHours=VacationHours-8WHEREEmployeeID=4;--step8:查看当前加锁情况SELECTrequest_session_id,resource_type,resource_associated_entity_id,request_status,request_mode,resource_descriptionFROMsys.

7、dm_tran_locks在开启另外一个update事务以后,我们再去查看当前的锁状况,如下图所示,我们发现在表(Object)级别上加了IX锁,在这张表所在的Page上也加了IX锁,因为表加了聚集索引,所以在叶子结点上加了X锁,这个锁的类型是KEY。然后我们回到事务1当中再次执行查询语句,我们会发现查询被阻塞,我们新建一个查询query3来查看这个时候的锁状况,其查询结果如下,我们可以发现查询操作需要在KEY级别上申请S锁,在Page和表(Object)上面申请IS锁,但是因为Key上面原先有了X锁,与当

8、前读操作申请的S锁冲突,所以这一步处于WAIT状态。如果此时提交事务2的update操作,那么事务1的select操作不再被阻塞,得到查询结果,但是我们发现此时得到的查询结果与第一次得到的查询结果不同,这也是为什么将readcommitted称为不可重复读,因为同一个事物内的两次相同的查询操作的结果可能不同。REPEATABLEREADREPEATABLEREAD是比READCOMMITTED限制性更强的隔离级别

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。