欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sqlite性能调优笔记

程序员文章站 2022-05-31 08:48:51
...

1.mmap

import sqlite3
cursor = sqlite3.connect(comment_db).cursor()
cursor.execute('PRAGMA mmap_size=4294967296')

数据库读取和写入的过程,数据要从磁盘拷贝到内核空间,然后拷贝到用户空间,sqlite3提供mmap机制,直接从磁盘拷贝到用户空间,节省了磁盘到内核空间的IO开销。
2.synchronous

cursor.execute("PRAGMA synchronous=OFF")

synronous参数有full,normal,off三种选择。
当synchronous设置为FULL
SQLite数据库引擎在紧急时刻会暂停以确定 数据已经写入磁盘。这使系统崩溃或电源出问题时能确保数据库在重起后不会损坏。FULL synchronous很安全但很慢。 在SQLite 3中修改为FULL。

当synchronous设置为NORMAL
SQLite数据库引擎在大部分紧急时刻会暂停,但不像FULL模式下那么频繁。 NORMAL模式下有很小的几率(但不是不存在)发生电源故障导致数据库损坏的情况。但实际上,在这种情况 下很可能你的硬盘已经不能使用,或者发生了其他的不可恢复的硬件错误。在SQLite 2中,缺省值为NORMAL.

设置为synchronous OFF
SQLite在传递数据给系统以后直接继续而不暂停。若运行SQLite的应用程序崩溃, 数据不会损伤,但在系统崩溃或写入数据时意外断电的情况下数据库可能会损坏。另一方面,在synchronous OFF时 一些操作可能会快50倍甚至更多。

数据安全性不高的场景,可以考虑更改 syncchronous = off 的模式;(写数据的速度50倍+的提升)
数据安全性较高的场景,可以考虑更改 syncchronous = nomal 的模式;(写数据的性能也有5倍+的提升)

synchronous详情请见:
原文:https://blog.csdn.net/bravegogo/article/details/53517610

相关标签: sqlite3