Sybase 12.5锁机制的一点理解

 
对性能的理解
 
不同的人对性能有不同的理解,但是对下面所列的指标都可以达成共识:
 
查询响应时间,比如一个查询花费了多长时间。
吞吐量,比如在单位时间内所执行的事务次数。
并发性,比如可以同时让多少个进程执行操作。
并发用户,比如可以支持多少个用户并发操作。
 
产生性能瓶颈的因数很多,在各个层次上都有可能出现瓶颈:
1,体系结构。比如数据的物理分布不合理,网络不稳定的情况。
2,数据库服务器的配置。比如没有设置表索引,导致大数据量的查询时间很长。
3,相关数据驱动。比如没有选择合适的数据库驱动,一般最好选择官方所提供的数据驱动。
4,应用服务器的配置。比如没有进行数据库连接池的设置。
5,应用程序的设计。比如SQL,存储过程很复杂,事务过大。
 
当然,性能优化中的优化实际是进行权衡考虑的过程。提升性能的同时,是以其他的牺牲为代价的。
 
对锁的一点理解
 
       为什么会出现锁定:比如两个并发进程,一个要查询,一个要更新。对于类似的并发情况,就需要进行并发控制。那么在数据库中就通过锁的机制来进行控制。
 
       数据库中的事务隔离级别主要有以下几个级别:
0, 允许读取未提交的数据。
1, 被锁定的对象只能被持有锁的进程访问,而不允许其他读操作者或者写操作者。(这是数据库默认的级别,一般使用排他锁)。
2,     防止对数据的非重复读取。当另一个进程已经更新了其中一个先前已被选择的行的时候,一个事务处理会对数据进行重复读取,那么重复读取就会返回与第一次读取的时候不同的数据。该级别包括级别1的限制,但是会导致冲突而且会增加死锁发生的可能性。
3, 防止虚读取。如果一个事务处理在其他进程在结果集中当中插入或删除行的时候重复读取数据,那么这个重复的读取就会返回与第一次读取不同数量的行。包括级别2的限制,但是会导致冲突而且会增加死锁发生的可能性。
 
事务隔离级别越高,并发性越低。
 
         对于数据库,一般都有自动处理死锁的能力,默认情况下没隔500毫秒检查一次死锁,并进行相应的解锁处理。
对于死锁情况,可以通过动态配置Sp_configure “print deadlock information” 置为1或者是通过管理工具进行配置,打印出死锁信息进行分析。
 
一般来讲,死锁是不能避免的,但可以使死锁的发生最小化,主要的手段如下:
 
1, 优化SQL,优化存储过程,加快执行速度有时候可以在死锁发生之前释放必要的资源。
2, 尽量按照相同的顺序进行数据操作。
3, 避免使用保持锁。
4, 将很长的事务分割成多个小的事务。
5, 确保表中有正确的索引。
6, 在吞吐量系统中,如果使用复制服务器或者复制数据库,就可以大大降低死锁的发生。
7, 采用行级锁可以大大降低死锁的几率。
 
 
 
 
 
      
 
 
 

你可能感兴趣的:(Sybase)