sqlite3 事务、调整页面缓存、等待锁、代码

事务

一、事务生命周期

  • 何时开始?何时结束?

    在任何时候,只在一个事务下执行一个连接。

  • 何时开始影响其他连接?

    自动提交模式下,每发一个命令就运行一个单独的事务;发出begin命令时,直到COMMIT或rollback,为一个事务。

二、锁状态

  UNLOCK、PENDING、SHARED、RESERVED都可在同一时间同一数据库的不同连接中存在。

  EXCLUSIVE:排他锁

  锁到事务结束或系统崩溃时,才会释放。

三、读事务

  以两次select操作为例。

  • 显示事务只锁定一次,且能确认两次查询结果一致。

    

  • 隐式事务会锁定两次,且无法保证两次结果一致。

    

四、写事务

  1、保留状态

    准备写入时,必须从共享锁转换到保留锁

    此时的修改存储在本地pager内的内存缓存中。

    pager管理的三种页面:

      已修改页:B-tree已改变记录的页。

      未修改页:B-tree读取但并未改变的页。

      日志页:B-tree修改前会将其原始页写入日志。

     编译选项cache_size可配置缓存。

  2、待定状态

    待定锁的作用是阻止其他连接获取待定锁。等待其他连接释放其共享锁,数据库就可进行写操作了。pager从待定状态装换到独占状态。

  3、独占状态

    主要工作是将修改的页面缓存刷新至数据库文件中。

    刷新策略通过编译指示synchronous设置。

    事务提交后,pager清理日志,清理页缓存,从独占锁回到未锁定状态。

  4、自动提交与效率

    显示事务效率和安全性更高。

调整页面缓存

一、过渡到独占状态

  sqlite3有可能由于页面缓存满而被迫进入独占状态。

  对于页面缓存满的情况,sqlite存在软限制。即由于缓存是已修改项和未修改页的混合。此时,pager将试图消除页面缓存,将未修改页清除。缓存满后,再次重复以上过程。直至缓存被修改页填满,只能进入独占状态。

  应尽量提供大的缓存,以提高整体并发性。

二、调整页面缓存

  可用sqlite3_analyzer工具对数据表进行分析。

三、等待锁

  对应处理无法获取共享锁(返回SQLITE_BUSY)的情况。

  可通过注册繁忙处理程序或调用sqlite3_busy_timeout()处理上述问题。

  调用sqlite3_busy_timeout(),只是消磨时间等待。pager自动处理此过程,休眠时间到,返回SQLITE_BUSY。

原文地址:https://www.cnblogs.com/mofei004/p/9375534.html

时间: 2024-11-08 21:05:56

sqlite3 事务、调整页面缓存、等待锁、代码的相关文章

asp.net里如何清空页面缓存的后台代码

asp.net里如何清空页面缓存的后台代码(因为只有GET请求会有缓存)   题描述:当使用ajax的时候,很有可能出现同一次请求,这里.比如buttonA修改了数据,而buttonB导出数据,如果两个按钮都采用ajax的技术来做的话,实际上buttonB在第二次点击以后,不会重新从数据库里获得一次数据,而是直接将缓存页发送给客户端.恩-这么做是好的,但是不是我们希望的.所谓使用了Ajax产生了不可预计的结果,有一部分可能也许就在于此.所以我要做的就是每次GET请求的时候都去清空缓存,然后再生成

varnish页面缓存服务

一.缓存相关概念简述 时间局部性:一个数据被访问过之后,可能很快会被再次访问到: 空间局部性:一个数据被访问时,其周边的数据也有可能被访问到 数据缓存:例如MySQL到web应用服务器之间的缓存服务器缓存的资源是数据缓存 页面缓存:接入层和应用层中间的缓存服务器缓存的是可缓存的页面,这层就是缓存层 缓存命中率:hit/(hit+miss),一般高于30%命中率则是正向收益,好的设计系统可以达到80%到95%以上 字节命中率:按照数据的字节大小来计算命中率 请求命中率:按照请求的数量来计算命中率

ASP.NET页面缓存

静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期.这个过程中,缓存不需要再次经过页面处理生命周期.这样可以缩短请求响应时间,提高应用程序性能.很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面.对于那些数据经常更新的页面,则不适用.默认情况下,ASP.NET 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出.开发人员必须通过设置,使得某些页面的响应成为缓存的一部分. 设置页面输出缓存可以使用以下两种方式:一

Hibernate事务以及一级缓存02

一. Hibernate中的事务 1. 事务的回顾 1.1 什么是事务(Transaction)(面试重点) 是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,sql 能将逻辑相关的一组操作绑定在一起,以便服务器 保持数据的完整性.事务通常是以begin transaction开始,以commit或rollback结束.Commint表示提交,即提交事务的所有操作.具体地说就是将事务中所有对数据的更新写回到磁盘上的物理数据库中去,事务正

Nginx服务优化之隐藏版本号、修改用户与组、配置页面缓存与时间、日志分割以及设置连接超时

Nginx服务优化之隐藏版本号.修改用户与组.配置页面缓存与时间.日志分割以及设置连接超时 前言 ? 在企业信息化应用环境中,服务器的安全性和响应速度需要根据实际情况进行相应参数配置,以达到最优的用户体验. ? 默认的nginx安装参数只能提供最基本的服务,还需要调整如网页缓存时间.连接超时.网页压缩等相应参数,才能发挥出服务器的最大作用. 一.隐藏版本号 ? 我们为什么要隐藏版本号? ? 我们一定要有一个意识:对于软件或者说服务,其安全性必然不可能是无懈可击的,总会或多或少地存在各种bug或者

Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

JSP 页面缓存以及清除缓存

一.概述 缓存的思想可以应用在软件分层的各个层面.它是一种内部机制,对外界而言,是不可感知的. 数据库本身有缓存,持久层也可以缓存.(比如:hibernate,还分1级和2级缓存) 业务层也可以有缓存(但一般来说,这是一个过程域,不会设缓存). 表现层/数据服务层(传统web的表现层)也可以设置缓存(jsp cache 就是这一层,实现在app server上的缓存机制) 另外Browser也有缓存(如IE)这个大家也都知道(实现在 web server 上的缓存机制).越上层的缓存效果越好,越

页面缓存

说明:localStorage和sessionStorage是以key-value形式保存数据的,key和value只能是字符串格式. a.  localStorage没有过期时间,只要不clear或remove,数据会一直保存. b. sessionStorage 针对一个session进行数据存储,生命周期与session相同,当用户关闭浏览器后,数据将被删除. 建议使用setItem(), getItem(), removeItem(), clear()来实现写入,读取,删除,清空. 一.

Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin