qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

SQLite3数据库中的文件锁和同步机制

SQLite3 提供了一个新的锁和同步机制来提高并发,减少死锁。
  SQLite3的锁和同步有PagerModule(pager.c)负责处理。PagerModue负责SQLite事务的ACID,也提供缓存功能。PagerModue不需要知道BTree,字符编码, 索引的结构,  Pager Module用来管理Page, 一个Page对应一个DiskBlock, 大小一般是1024Byte。
  1. SQLite3 数据库的锁状态
  UNLOCKED
  SHARED
  RESERVED 保留锁, 表示数据库将被写,  一个数据库只能有一个保留锁, 保留锁可以和共享锁共存,与PENDING锁的不同之处在于还能获得新的共享锁,PENDING锁被激活时, 不能再获得共享锁。
  PENDING
  EXCLUSIVE
  2.  回滚日志文件
  如果有更新数据库操作, SQLite就会生成回滚日志文件, 以"-journal"的文件名结尾, 与数据库文件存放在同一目录下。如果多个数据库同时工作, 每个数据库都有自己的回滚日志文件, 并且还有一个master journal日志文件。master journal没有数据, 只包含各个回滚日志文件名。每个数据库的回滚日志文件也会包含masterjournal文件名。
  当访问数据库时发现有"hot journal"时, SQLite就会进行回滚工作, 回滚结束就删除回滚日志文件。
  处理"hot journal"
  (1) 尝试获得SHAREDLOCK, 如果失败, 立即结束, 返回SQLITE_BUSY
  (2) 检查是否有"hotjournal", 如果没有立即返回, 否则继续执行以下步骤
  (3) 尝试获得PENDINGLOCK, 然后EXCLUSIVELOCK, 如果失败, 表示其他进程正在做回滚, 释放所有锁, 关闭数据库, 返回SQLITE_BUSY。否则继续执行
  (4) 读回滚日志文件, 回滚数据库文件
  (5) 删除回滚日志文件
  (6) 删除masterjournal 文件
  (7) 释放PENDINGLOCK和EXCLUSIVELOCK, 但是保留SHAREDLOCK
  3. 写数据库文件步骤
  (1) 获得共享锁
  (2) 获得RESERVEDLOCK, 如果失败, 返回SQLITE_BUSY, 否则继续执行
  (3) 生成回滚日志文件, 写入磁盘, 等待写完成继续执行
  如果是单个数据库文件
  (4) 请求获得PENDINGLOCK
  (5) 请求获得EXCLUSIVELOCK
  (6) flush/fsync, 将更新写入磁盘
  (7) 删除回滚日志文件
  (8) 释放EXCLUSIVELOCK, PENDING LOCK, RESERVED LOCK, 获得SHARED LOCK
  如果是多个数据库文件事务
  (4) 请求获得PENDINGLOCK 和EXCLUSIVELOCK, 确保所有数据库都获得EXCLUSIVELOCK
  (5) 生成masterjournal文件和每个数据库的回滚日志文件
  (6) flush/fsync, 将更新写入磁盘
  (7) 先删除masterjournal 文件, 再删除所有的回滚日志文件
  (8) 释放所有数据库上的EXCLUSIVELOCK, PENDING LOCK
  4. SQL事务
  默认SQLite autocommit=true
  BEGIN TRANSACTION - COMMIT 命令使得SQLite不在autocommit下工作。当SQLite执行BEGIN命令时, 不会获得任何锁, 直到执行到第一个SELECT, 才获得一个SHARED LOCK, 执行到UPDATE/INSERT/DELETE才获得REVERSED LOCK, 当缓存满或者COMMIT时才请求获得EXCLUSIVE LOCK。
  COMMIT并非真正的将更新写到磁盘, COMMIT使得SQLITE回到autocommit=true 模式, autocommit会负责将更新写到磁盘。

posted on 2014-01-24 16:05 顺其自然EVO 阅读(895) 评论(0)  编辑  收藏 所属分类: 数据库


只有注册用户登录后才能发表评论。


网站导航:
 
<2014年1月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜