在线文档教程
Sqlite
其他 | Miscellaneous

SQLite Library Footprint

Size Of The SQLite Library

SQLite库使用的代码空间取决于目标平台,编译器和优化设置。这些变量也会影响性能。

  • 下面的图表显示了在x86_64的Ubuntu 16.04.3上测试的各种编译器和优化设置的截至2017年10月08日的SQLite的相对大小和性能。一般意见:

  • Clang / LLVM编译器与GCC没有竞争力。Clang生成的二进制文件比GCC生成的二进制文件始终更大更慢。

  • 配置文件引导优化(PGO)对SQLite没有帮助。PGO产生的二进制文件大约大1%,慢了大约0.33%。

  • GCC-7生成的二进制文件比GCC-5更小更快,但差别不是很大。

  • 使用GCC和-Os进行编译会生成一个略小于500KB大小的二进制文件。

  • 开发人员需要做出的唯一重要设计决定是使用-Os(优化大小)还是-O6(优化速度)。-O6设置使得二进制文件的运行速度提高了2%或3%,但是它们的运行速度也增加了66%。这里的性能是通过使用cachegrind计算CPU周期来衡量的。分析中不考虑缓存未命中。如果考虑I-cache缺失,使用-O6构建可能不会比使用-Os构建更快。

  • 考虑到以上所有情况,SQLite开发人员建议使用带有-Os优化设置的GCC-7编译SQLite。

Details

  • 唯一使用的SQLite编译时选项是-DSQLITE_ENABLE_MEMSYS5。可选的memsys5内存分配器用于性能测试,因为它提供的结果比Ubuntu上的库提供的malloc()/ free()更具可重复性。

  • 性能可以提高,尺寸通过使-DSQLITE_THREADSAFE = 0,-DSQLITE_DEFAULT_MEMSTATUS = 0,-DSQLITE_DEFAULT_WAL_SYNCHRONOUS = 1,-DSQLITE_LIKE_DOESNT_MATCH_BLOBS,-DSQLITE_MAX_EXPR_DEPTH = 0,-DSQLITE_OMIT_DECLTYPE,-DSQLITE_OMIT_DEPRECATED,-DSQLITE_OMIT_PROGRESS_CALLBACK,-DSQLITE_OMIT_SHARED_CACHE,和-DSQLITE_USE_ALLOCA降低。所有这些选项共同导致性能提高约3.5%,尺寸缩小3.0%。

  • 添加诸如-DSQLITE_ENABLE_JSON1,-DSQLITE_ENABLE_FTS5或-DSQLITE_ENABLE_RTREE之类的可选功能显然会增加库的大小。

  • Performance was measured using the speedtest1.c utility program, which attempts to mimic a typical workload for SQLite. Options to the test runs are:

--shrink-memory --reprepare --stats --heap 10000000 64 --size 5

性能通过使用cachegrind运行speedtest1并观察“I refs”输出来测量。

SQLite在公共领域。