是否推荐使用 PRAGMA synchronous=OFF 来提高性能
Is it a recommended practice to improve performance using PRAGMA synchronous=OFF
来自这个问题:
SQLite updating ONE record is very (relatively) slow
我看到他使用 PRAGMA synchronous=OFF 获得了很大的速度增益。
我面临着非常慢的 sqlite 更新时间 (250 毫秒),我需要从不同的线程做很多更新。
我有许多来自不同线程的数据库打开连接。只有一个中央数据库 class 用所有线程调用的锁包装数据库并使用 PRAGMA synchronous=OFF 以获得这样的速度改进会更好吗?
如果你有多个线程,我不建议你打开同步 off.I 怀疑是否可以通过将锁移到你的 class
之外来提高速度
我建议您考虑数据库的规范化,这样您就不必每次都读取大量数据。
PRAGMA synchronous
只影响磁盘同步; IE。暂停以确保提供给 OS 的数据已写入磁盘。移动锁对此无济于事。
现在看来你只是在猜测;您需要在优化之前进行一些分析。你的慢点在哪里?哪些查询很慢(使用 EXPLAIN QUERY PLAN
)?你在ANALYZE
吗?
另请注意,SQLite 对并发性不是很友好;一次只有一个连接可以写入数据库。如果需要高并发,可以考虑换个数据库。
来自这个问题: SQLite updating ONE record is very (relatively) slow
我看到他使用 PRAGMA synchronous=OFF 获得了很大的速度增益。
我面临着非常慢的 sqlite 更新时间 (250 毫秒),我需要从不同的线程做很多更新。
我有许多来自不同线程的数据库打开连接。只有一个中央数据库 class 用所有线程调用的锁包装数据库并使用 PRAGMA synchronous=OFF 以获得这样的速度改进会更好吗?
如果你有多个线程,我不建议你打开同步 off.I 怀疑是否可以通过将锁移到你的 class
之外来提高速度我建议您考虑数据库的规范化,这样您就不必每次都读取大量数据。
PRAGMA synchronous
只影响磁盘同步; IE。暂停以确保提供给 OS 的数据已写入磁盘。移动锁对此无济于事。
现在看来你只是在猜测;您需要在优化之前进行一些分析。你的慢点在哪里?哪些查询很慢(使用 EXPLAIN QUERY PLAN
)?你在ANALYZE
吗?
另请注意,SQLite 对并发性不是很友好;一次只有一个连接可以写入数据库。如果需要高并发,可以考虑换个数据库。