sqlite删除数据
sqlite删除数据
某日, 在使用sqlite的时候发现查询速度极慢, 查看了一下文件大小, sqlite数据库文件已经达到了 22G! 对于一个文件数据库来说, 已经相当致命了,先不说后面如果解决文件过大的问题, 首先手动删除一些文件, 释放一些空间; 本文就释放空间的过程遇到的问题做一个记录
问题一: 删除表后, 数据库文件占用磁盘空间并没有释放
在 drop table ** 之后, 查看文件占用空间大小, 发现并没有变化
是因为sqlite的机制是, 当你删除表后, sqlite会把释放出来的空间, 放到一个空闲列表中, 用于下次你插入数据的时候用, 并不会把空间返还给操作系统 , 很流氓的做法
这时如果想强制释放空间, 需要用 vacuum; 命令
问题二:db or disk is full
当你执行完 vacuum命令后, 满心欢喜的等待释放空间, 结果等了好久, 最后报了一个这个错, 说磁盘或者数据库空间已满;
这是因为 sqlite执行 vacuum命令释放空间的机制, 是需要把数据库文件拷贝到一个临时文件中, 然后再删除;所以需要两倍于 数据库文件大小 的磁盘空间
问题三:Vacuum命令的临时文件目录, 是哪个
磁盘当然是不够用的, 那这时需要挂载一个硬盘了, 可是, 挂载到哪个目录呢?
在上一步执行 vacuum命令的时候, 观察了一下 磁盘使用情况, 发现 根目录 / 一直在增加使用量;那肯定是临时文件生成到 根目录了, 是根目录的那个目录呢; 要是直接把硬盘挂载到根目录, 那就别玩了;
查了一下谷歌,这个论坛 https://oomake.com/question/6765345 指出了 sqlite vacuum的临时文件目录
粘贴一下 文章内容:
注意到在VACUUM期间,SQLite创建的临时文件大小与原始数据库大小相同。它这样做是为了维护数据库ACID属性。 SQLite使用一个目录来保存执行VACUUM时所需的临时文件。为了确定要使用的目录,它会下降层次结构,查找具有适当访问权限的第一个目录。如果它找到了一个它无权访问的目录,它将忽略该目录并继续下降层次结构,寻找它所执行的目录。我提到这个,以防任何人指定了一个环境变量,而SQLite似乎忽略了它。 在他的回答中,CL给出了Linux的层次结构,并在他的评论中提到层次结构是依赖于操作系统的。为了完整性,这里是层次结构(据我可以从代码中确定它们)。 对于Unix(和Linux),层次结构是:
- 无论SQLITE_TMPDIR环境变量指定了什么,
- 无论TMPDIR环境变量指定什么,
- / var / tmp中,
- 的/ usr / TMP,
- / tmp,最后
- 当前的工作目录。
对于Cygwin,层次结构是:
- 无论SQLITE_TMPDIR环境变量指定了什么,
- 无论TMPDIR环境变量指定什么,
- 无论TMP环境变量指定什么,
- 无论TEMP环境变量指定什么,
- 无论USERPROFILE环境变量指定了什么,
- / var / tmp中,
- 的/ usr / TMP,
- / tmp,最后
- 当前的工作目录。
对于Windows,层次结构是:
- GetTempPath(),记录为返回:
- 无论TMP环境变量指定什么,
- 无论TEMP环境变量指定什么,
- 无论USERPROFILE环境变量指定了什么,最后
- Windows目录。
有了这个, 就可以了, 把硬盘挂载到/ var / tmp 目录, 或者再sqlite交互页面中, 执行临时文件的目录
关于SQLITE_TMPDIR 的指定, 参考官方文档 https://www.sqlite.org/pragma.html#pragma_temp_store_directory 使用 PRAGMA temp_store_directory = 'directory-name'; 命令可以指定 临时文件的目录, 注意一定要保证该目录有写权限
再说一下挂载的问题:
运营给的硬盘的盘符是 xvdg,那么挂载点就是 /dev/xvdg
挂载命令: sudo mount /dev/xvdg /var/tmp/
这样就把 /var/tmp/ 挂载到了新硬盘上了
卸载的命令:
umount /dev/xvdg 或者 umount /var/tmp
查看一个目录的挂载位置: df 文件名
sqlite删除数据的更多相关文章
- 解决sqlite删除数据后,文件大小不变问题(VACUUM)
删除表格的全部数据: DELETE FROM [Name] 当在sqlite中删除了大量数据后,数据库文件的大小还是那样,没有变.原因是:从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的” ...
- 解决sqlite删除数据或者表后,文件大小不变的问题
原因分析: sqlite采用的是变长纪录存储,当你从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的"空闲列表"中用于存储你下次插入的数据,用于提高效率,磁盘空间并没有丢 ...
- 解决sqlite删除数据后,文件大小不变问题 转载
原文地址:http://blog.csdn.net/yangchun1213/article/details/7656146 说了这么多,没进主题,我的主题是给Sqlite在删除数据后擦屁股. 大 ...
- android: SQLite删除数据
删除数据对你来说应该就更简单了,因为它所需要用到的知识点你全部已经学过了. SQLiteDatabase 中提供了一个 delete()方法专门用于删除数据,这个方法接收三个参数,第一 个参数仍然是表 ...
- 解决sqlite 删除记录后数据库文件大小不变
最的做的项目中要有到sqlite数据存储,写了测试程序进行测试,存入300万条记录,占用flash大小为 86.1M,当把表中的记录全部删除后发后数据库文件大小依然是 86.1M: 原因是:sqlit ...
- sqlite学习笔记5:插入数据,查询数据和删除数据
曾闻:全部的编程都是已数据为中心,觉得很有道理. 所谓数据库数据库,没有数据叫什么数据库,接下来就看看怎样在表中插入数据. 一 插入数据 1 创建一张表 首先为了插入数据,须要先创建一张表: CREA ...
- Android 一键直接查看Sqlite数据库数据
转自:http://www.cnblogs.com/trinea/archive/2012/11/16/2773656.html 本文主要介绍Android开发中如何一键直接查看sqlite数据库中的 ...
- SQLite 删除表(http://www.w3cschool.cc/sqlite/sqlite-drop-table.html)
SQLite 删除表 SQLite 的 DROP TABLE 语句用来删除表定义及其所有相关数据.索引.触发器.约束和该表的权限规范. 使用此命令时要特别注意,因为一旦一个表被删除,表中所有信息也将永 ...
- 使用SQLite存储数据
一.SQLiteAndroid 为了让我们能够更加方便地管理数据库, 专门提供了一个SQLiteOpenHelper 帮助类,借助这个类就可以非常简单地对数据库进行创建和升级. 1.SQLiteOpe ...
随机推荐
- Solr集群(即SolrCloud)搭建与使用
1.什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候是不 ...
- 技能篇丨FineCMS 5.0.10 多个漏洞详细分析
今天是一篇关于技能提升的文章,文章中的CMS是FineCMS,版本是5.0.10版本的几个漏洞分析,主要内容是介绍漏洞修补前和修补后的分析过程,帮助大家快速掌握该技能. 注:篇幅较长,阅读用时约7分钟 ...
- APP弱网测试方法
常用工具 •利用抓包工具 -Fiddler/Charles•使用chrome浏览器的开发者工具•使用手机自带的限速功能(只适用IOS设备)•需要硬件设备(路由器或者网卡) -NEWT/ATC/ ...
- HBase常用的JAVA API操作
为了方便以后查看,总结了一些常用的java操作hbase的代码: package com.mcq; import static org.hamcrest.CoreMatchers.describedA ...
- Echarts 柱状图组
通过Echarts可以实现柱状图组,如下图:是一个学生三次模考成绩对比结果 源码 <!DOCTYPE html> <html> <head> <meta ch ...
- Springboot前后端分离开发
.1.springboot前后端分离开发之前要配置好很多东西,这周会详细补充博客内容和遇到的问题的解析 2,按照下面流程走一遍 此时会加载稍等一下 pom.xml显示中加上阿里云镜像可以加速下载配置文 ...
- python+openpyxl的excel的相关读写
def test(): wb2 = openpyxl.Workbook() #创建一个excel对象 wb2.save("a.xlsx") #保存excel并命名为a.xlsx w ...
- linux(02)基础shell命令
Linux(02)之shell命令 一,Linux命令行的组成结构 在我们的linux启动,登陆成功之后会显示: 这就是linux的命令行的组成结构 二,常见命令 1,Linux系统命令操作语法格式 ...
- 201871010107-公海瑜《面向对象程序设计(java)》第十二周学习总结
201871010107-公海瑜<面向对象程序设计(java)>第十二周学习总结 项目 内容 ...
- 201871010134-周英杰 《面向对象程序设计(java)》第十二周学习总结
201871010134-周英杰 <面向对象程序设计(java)>第十二周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...