摘要:
事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。应用程序要求的隔离级别确定了所使用的锁定行为:数据库在被广大客户所共享访问的操作过程中很可能出现以下几种不确定情况 :1. 更新丢失(Lost update):两个事务都同时更新一行数据但是第二个事务却中途失败退出导致对数据两个修改都失效了这是系统没有执行任何锁操作因此并发事务并没有被隔离开来2. 脏读取(Dirty Reads):一个事务开始读取了某行数据但是另外一个事务已经更新了此 阅读全文
摘要:
Oracle的SelectForUpdate语句可以实现在读取数据后马上锁定相关资源,防止被其他session修改数据的目的。也就是我们常常谈到的“悲观锁定”(现实应用开发中,使用悲观锁定的情况少之又少,也许是因为乐观锁定的实现更加灵活和便捷的缘故)。这个小文儿做一个小小的实验,来看看Select For Update语句实现的行级锁定1.创建实验表table_sfu,并初始化三条数据sec@ora10g create table table_sfu (a number);Table created.sec@ora10g insert into table_sfu values (1);1 阅读全文
摘要:
近服务器上经常出现mysql进程占CPU100%的情况,使用show processlist命令后,看到出现了很多状态为LOCKED的sql。使用show status like 'table%'检查Table_locks_immediate和Table_locks_waited,发现Table_locks_waited偏大。出问题的表是MyISAM,分析大概是MyISAM的表锁导致。MyISAM适合于读频率远大于写频率这一情况。而我目前的应用可能会出现在某一时段读写频率相当。大致如下:一个客户端发出需要长时间运行的SELECT其他客户端在同一个表上发出INSERT或者UPDATE,这个客户将 阅读全文