SQLite 常用性能优化配置

Posted China soft

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLite 常用性能优化配置相关的知识,希望对你有一定的参考价值。

(210条消息) SQLite 常用性能优化配置_sqlite 配置_不剪发的Tony老师的博客-CSDN博客

 

文章目录
日志模式
同步提交
临时文件
内存映射
页面大小
其他操作
大家好,我是只谈技术不剪发的 Tony 老师。

SQLite 是一个嵌入式数据库引擎,通常以代码库的形式运行在其他程序中,因此我们不需要进行任何服务器配置。很多人都认为 SQLite 只能用于没有性能要求的小型数据库,但是实际情况并非如此。虽然 SQLite 只支持一个并发的写入操作,但是多个进程可以同时连接和查询相同的数据库。通过一些简单的配置和操作,我们完全可以使用 SQLite 创建 GB 级别的数据库并且支持高达每秒 10 万次的并发查询。

简单来说,优化 SQLite 性能的配置如下:

pragma journal_mode = WAL;
pragma synchronous = normal;
pragma temp_store = memory;
pragma mmap_size = 30000000000;
1
2
3
4
以上配置中的部分内容可以永久生效,但另一部分在每次连接时都会重置为默认值,因此推荐每次连接数据库之后都执行这些配置命令。

接下来我们具体解释一下每个参数的作用。

日志模式
pragma journal_mode = WAL;
1
I通过以上配置,SQLite 不再直接写入数据库文件(随机写入),而是先写入预写式日志(顺序写入)并定期提交到数据库文件。这种模式可以在写入事务进行的同时支持并发的读取操作,同时可以极大地改善性能。

注意:在某些写入压力下,WAL 模式可能存在一些问题,导致 WAL 文件无限增长,从而大大降低性能。通常是因为写入过于频繁,导致 SQLite 无法执行检查点操作。缓解这一问题的方法有几个:

减少 wal_autocheckpoint 间隔。由于自动检查点是被动触发的操作,因此这种方法不能确保一定有效。
定期执行 pragma wal_checkpoint(full) 或者 pragma wal_checkpoint(truncate) 命令。对于 full 方式,如果其他进程正在打开文件,WAL 大小不会发生改变,但是仍然会提交所有内容,确保新的数据不会导致 WAL 文件增长。对于 truncate 方式,SQLite 会阻塞其他进程并将 WAL 文件重置为空。我们可以通过一个单独的进程执行以上命令。
同步提交
pragma synchronous = normal;

pragma synchronous = off;
1
2
3
synchronous 的默认值为 full,意味着每个更新操作都需要等待 FSYNC 完成内存数据到磁盘文件的同步。在 WAL 模式下,normal 方式仍然是完全安全的,同时意味着只有 WAL 检查点操作需要等待 FSYNC 完成。off 可能导致数据库损坏,虽然我们极少遇到这种问题。更多信息可以参考官方文档。

临时文件
pragma temp_store = memory;
1
以上指令表示使用内存存储临时索引和表。SQLite 可以自动为某些查询语句创建临时索引。无法确定这种操作可以提供多少性能帮助,如果 SQLite 创建了临时索引(通过 EXPLAIN QUERY PLAN 命令查看),我们应该主动创建相应的索引。

内存映射
pragma mmap_size = 30000000000;
1
当数据库的大小小于 mmap_size 字节时使用内存映射替代读/写调用。操作系统管理的 syscall、页面以及缓存将会更少,此时的性能取决于使用的操作系统。注意,该设置不会使用物理内存,而是保留虚拟内存。然后,操作系统将根据常用的“磁盘缓存”逻辑决定哪些页面被逐出,哪些页面留在内存中。至少是在 Linux 上,如果为 SQLite 进程分配了足够的内存,性能将会得到明显提升。如果数据库的大小比指定的 mmap_size 更大,数据库的一部分将会使用内存映射,其他仍然使用 read() / write() 系统调用。

对于 32 位操作系统,可能只能设置小于 4 GB 的 mmap_size。

内存映射还会在出现 I/O 错误时产生影响,具体可以参考官方文档。

页面大小
pragma page_size = 32768;
1
对于存储大型 BLOB 数据而言,增加页面大小可以改进数据库的性能;但是对于一般的应用场景而言,这种方法可能并不适用。对于写入操作,SQLite 总是替换整个页面,因此增加页面大小会增加写入操作的开销。

其他操作
除了以上配置之外,我们还可以通过定期执行某些操作改善数据库的性能。

首先,我们可以定期重新组织数据库:

pragma vacuum;
1
每次执行以上命令都会重新写入数据库文件,如果数据库大小超过 100 MB 将会非常耗时。

其次,我可以定期重新分析数据库:

pragma optimize;
1
为了在不需要对应用程序模式和 SQL 进行详细分析的情况下获得最佳的长期查询性能,推荐应用程序每次关闭数据库连接时运行以上命令。对于长期运行的应用程序,也可以通过几个小时一次定期运行以上命令获得性能提升。相信信息可以参考官方文档。

另外,我们还可以定期清理数据库:

pragma auto_vacuum = incremental; -- 创建数据库之后
pragma incremental_vacuum; -- 定期
1
2
以上命令只有当数据库的大小会定期显著缩减时才会明显提升性能。

执行清理命令时,数据库文件中的空闲列表页会被移动到文件结尾并且被删除。需要注意,自动清理只会截断空闲列表页,而不会执行 VACUUM 命令的文件碎片整理和页面修复。实际上,由于它会移动数据页,自动清理反而会增加碎片化。相信内容可以参考官方文档。
————————————————
版权声明:本文为CSDN博主「不剪发的Tony老师」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/horses/article/details/119817925

IDEA最全最常用的配置与性能优化(Java必备)

IDEA最全最常用的配置与性能优化(Java必备)

简介

IDEA默认启动配置主要考虑低配置用户,参数不高,导致启动慢,然后运行也不流畅,这里我们需要优化下启动和运行配置,但是在工作中的电脑一般都是8G或者16G的运行内存,所以我们需要手动去修改默认的IDEA配置。
大家好!本次相关配置版本如下:
IDEA:2021.1.1
本机:windows10 x64位 16GB 512GB
IDEA版本高低相关优化配置差别不大,可参考,有什么不同意见可在下方评论说明,谢谢!

一、性能优化

1.JVM启动参数

(1)可根据电脑内存大小各自调节,找到IDEA安装目录的bin目录,找到idea.exe.vmoptions、idea64.exe.vmoptions编辑这两文件,相关配置及说明如下图标红字处,其他默认即可。

(2)也可以通过菜单来进行设置JVM启动参数,IDEA会优先使用这个菜单下的配置文件设置参数和(1)相同,设置方法如下图:Help =>Edit Custom VM Options

2.清空缓存并重建索引

将编译的进程与maven的堆设置大一些


二、优化设置

1.显示方法分隔符

设置方法:File =>Settings =>Editor =>General =>Appearance,如下图

方便查看代码,效果如下图:

2.忽略大小写提示

IDEA默认是严格区分大小写提示的,例如输入string并不会提示String,设置方法:File =>Sttings =>Editor =>General =>Code Completion

效果如下图:

3.主题设置

(1)IDEA有4种默认风格,根据个人习惯自行设置,小编这里设置黑色模式,设置方法:File =>Settings =>Appearance & Behavior =>Appearance

(2)现在网上也有很多主题网站,可以浏览下载自己喜欢的主图,其实IDEA也可以导入Eclipse的主题样式,推荐几个个主题网站,效果缩略图如下:

选择一个缩略图点击进去,下载xml格式的文件,下载方式如下图所示:

下载好后在IDEA导入主题即可,导入方法如下图:File =>Settings =>Editor =>Color Scheme

4.设置字体

IDEA默认字体有些小,如果屏幕大可能不习惯,可以根据自己习惯设置,设置方法如下图:File =>Settings =>Editor =>Font

5.类注释模板和方法注释模板的设置与使用

(1)类注释模板,创建类文件的时候自动生成注释,设置方法如下图:File =>Settings =>Editor =>File and Code Templates

 /**
 * @version: java version 1.8
 * @Author: Mr Orange
 * @description:
 * @date: $YEAR-$MONTH-$DAY $TIME
 */

(2)类注释模板,设置后,在IDEA中,在src的包上鼠标右键,New =>JavaClass完成后,自动生成注释,效果如下图:

小编这里使用IDEA默认的方法注释模板,各位有兴趣可以按照(3)、(4)、(5)、(6)进行设置;
(3)方法注释模板,设置方法如下图:File =>Settings =>Editor =>Live Templates


(4)上图的第四步,配置新建的模板,图中数字说明如下备注,模板配置信息如下图:
1、设置模板名称,建议使用*号
2、模板描述,随意填写即可
3、自定义注释模板,注意:开头不要使用/*
4、选择该模板用在什么地方,点击Change弹出信息后选择java或者全选
5、设置模板快捷键,小编这里设置Enter
6、编辑注释模板中的参数,设置方式与编辑如下面(5)

(5)下图中params参数需要添加参数分割,如下代码复制粘贴进去即可

groovyScript("def result=''; def params=\\"$_1\\".replaceAll('[\\\\\\\\[|\\\\\\\\]|\\\\\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) result+=' * @param ' + params[i] + ((i < params.size() - 1) ? '\\\\n':''); return result", methodParameters())

(6)以上设置好后,点击Apply,然后在方法上使用/**+Enter,效果如下图所示

6.项目目录 — 折叠空包

IDEA默认是折叠空包的,设置方式如下图:

7.窗口复位

组件窗口的子窗口关闭或者移动找不到了,可以点击如下箭头所示进行窗口还原

8.查看本地历史代码

即使我们的项目没有使用版本控制功能,IDEA也给我们提供了本地代码修改记录,设置方法如下:项目或者代码文件右键 => Local History =>Show History

9.设置字符编码

I(1)DEA默认是根据操作系统设置字符编码,如win10默认设置的是GBK,更改字符编码是为了使项目中不会出现乱码,设置方式如下图所示:File =>Settings =>Editor =>File Encodings

(2)如果是web项目,需要添加外部容器来进行启动,如tomcat,控制台打印日志的时候会有中文乱码问题,设置方式下图所示:-Dfile.encoding=UTF-8


(3)还需要设置tomcat启动编码,根据是run还是debug启动,设置编码方式如下图:JAVA_TOOL_OPTIONS -Dfile.encoding=UTF-8

10.打开IDEA不自动启动项目

启动IDEA时如果需要手动选择项目启动,就需要禁用打开软件自动运行上一个项目,如下图,设置方法:Appearance & Behavior =>System Settings
禁用后,重启IDEA后,启动IDEA会停留在选择项目界面。

11.IDEA中不显示Services控制台

如果是springcloud项目,没有Services控制台不好知道哪个项目启动,启动端口是多少,所以需要打开此控制台,如下方式:
方式1、通过当前项目中的 .idea文件夹中的 workspace.xml配置,找到:RunDashboard,在标签内添加如下的:option标签内容,如找不到,直接把如下代码粘贴进与文件中 component标签 同级位置即可,增加完成后,重启即可看到服务。

<component name="RunDashboard">
    <option name="configurationTypes">
      <set>
        <option value="SpringBootApplicationConfigurationType" />
      </set>
    </option>
  </component>

方式2、通过快捷键打开:Alt + 8 或者通过菜单栏打开,打开后重启下项目就能看到启动了哪些端口和应用。如下图:View ->Tool Windows -> Services


三、导入导出IDEA设置文件

可以导出IDEA配置好的setting文件,换电脑时可以导入设置文件,如下图设置方式:File =>Manage IDE Settings =>Import Settings 或者 Export Settings

四、实时显示IDEA内存情况

随机在一个项目中,双击Shift弹出窗口,该配置是全局配置,输入memory,设置方式及效果如下图:

五、显示pom依赖关系图,解决包冲突等问题

(1)打开pom.xml,在pom中按住 ctrl+alt+shift 即可打开关系图,或者点击右侧maven标签打开关系图,图下图所示,在关系图中,可按住 ctrl+鼠标滚动 放大关系图:

(2)当有依赖包冲突时,可 Maven Helper 使用插件解决,也可以手动解决,如有依赖冲突,关系图中会显示红色实线,蓝色实线是正常的依赖,如下图:

以上是关于SQLite 常用性能优化配置的主要内容,如果未能解决你的问题,请参考以下文章

sqlite性能优化之路-锁

SQLite的Insert性能优化

Sqlite3写性能优化-每秒百万条写入

[转载]SQLite3性能优化

IDEA最全最常用的配置与性能优化(Java必备)

微信iOS SQLite源码优化实践