为什么我的SQLite3查询需要时间?

时间:2014-04-07 09:24:27

标签: sql c sqlite profiling vfs

上下文:我使用C API为SQLite开发了一个只读VFS。我需要的是速度和小文件大小。我用基于LZ4的VFS解决了尺寸问题。但是当我查询我的数据库时,我有一些速度问题。

规格:   - 我在Linux上工作(Ubuntu 12.10)   - 数据库文件压缩275MB,未压缩约700MB   - 我正在对索引字段进行查询。   - 我在删除缓存后评估给定查询所花费的时间(echo 3 | sudo tee / proc / sys / vm / dropcaches)

问题: 当我使用命令时查询数据库时,我得到以下输出:  真正的0m5.933s  用户0m0.124s  sys 0m0.096s 令人惊讶的是user + sys和real之间的区别。这就是为什么我决定使用gprof来编写我编写的代码及其依赖项(sqlite3,lz4)。此后,您将找到gprof flat和call-graph表示的几行。在那之后,如果我想找到解决方案,我不知道应该注意什么。主要是因为我不明白为什么(以及在哪里)浪费了所有这些时间。我希望你能帮助我。

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
 93.75      0.15     0.15     2948     0.05     0.05  LZ4_decompress_fast
  6.25      0.16     0.01    26068     0.00     0.01  sqlite3VdbeCursorMoveto
  0.00      0.16     0.00    54088     0.00     0.00  sqlite3GetVarint
  0.00      0.16     0.00    28459     0.00     0.00  sqlite3VdbeSerialGet
  0.00      0.16     0.00    23708     0.00     0.00  sqlite3VdbeMemNulTerminate
  0.00      0.16     0.00    23699     0.00     0.00  sqlite3_transfer_bindings
  0.00      0.16     0.00    11910     0.00     0.00  sqlite3DbMallocSize
  0.00      0.16     0.00    11883     0.00     0.00  sqlite3VdbeMemGrow
  0.00      0.16     0.00    11851     0.00     0.00  sqlite3VdbeMemMakeWriteable
  0.00      0.16     0.00     9480     0.00     0.00  fetchPayload
  0.00      0.16     0.00     9478     0.00     0.00  sqlite3VdbeMemRelease
  0.00      0.16     0.00     7170     0.00     0.02  btreeGetPage
  0.00      0.16     0.00     7170     0.00     0.00  pcache1Fetch
  0.00      0.16     0.00     7170     0.00     0.00  releasePage
  0.00      0.16     0.00     7170     0.00     0.02  sqlite3PagerAcquire
  0.00      0.16     0.00     7170     0.00     0.00  sqlite3PagerUnrefNotNull
  0.00      0.16     0.00     7170     0.00     0.00  sqlite3PcacheFetch
  0.00      0.16     0.00     7170     0.00     0.00  sqlite3PcacheRelease
  0.00      0.16     0.00     7169     0.00     0.00  pcache1Unpin
  0.00      0.16     0.00     7169     0.00     0.00  pcacheUnpin
  0.00      0.16     0.00     7168     0.00     0.02  getAndInitPage
  0.00      0.16     0.00     7165     0.00     0.02  moveToChild

granularity: each sample hit covers 2 byte(s) for 6.25% of 0.16 seconds

index % time    self  children    called     name
                                                 <spontaneous>
[1]    100.0    0.00    0.16                 main [1]
                0.00    0.16       1/1           sqlite3_exec <cycle 1> [5]
                0.00    0.00       1/1           openDatabase [18]
                0.00    0.00       2/3           sqlite3_vfs_find [249]
                0.00    0.00       1/1           sqlite3_crodvfs [358]
                0.00    0.00       1/14          sqlite3_vfs_register <cycle 5> [204]
                0.00    0.00       1/1           sqlite3_open_v2 [359]
-----------------------------------------------
[2]     99.9    0.00    0.16       1+198     <cycle 1 as a whole> [2]
                0.00    0.16       2             sqlite3_exec <cycle 1> [5]
                0.00    0.00       2             sqlite3InitOne <cycle 1> [27]
                0.00    0.00     124             sqlite3Parser <cycle 1> [82]
                0.00    0.00       6+4           sqlite3WalkSelect <cycle 1> [186]
                0.00    0.00       9             sqlite3ReadSchema <cycle 1> [149]
                0.00    0.00       7             sqlite3LockAndPrepare <cycle 1> [168]
                0.00    0.00       7             sqlite3Prepare <cycle 1> [171]
                0.00    0.00       7             sqlite3RunParser <cycle 1> [172]
                0.00    0.00       5             sqlite3InitCallback <cycle 1> [196]
                0.00    0.00       5             sqlite3_prepare <cycle 1> [203]
                0.00    0.00       5             sqlite3SelectPrep <cycle 1> [198]
                0.00    0.00       4             sqlite3LocateTable <cycle 1> [213]
                0.00    0.00       3             sqlite3StartTable <cycle 1> [243]
                0.00    0.00       2             selectExpander <cycle 1> [277]
                0.00    0.00       2             sqlite3Select <cycle 1> [299]
                0.00    0.00       2             sqlite3CreateIndex <cycle 1> [282]
                0.00    0.00       2             sqlite3_prepare_v2 <cycle 1> [312]
                0.00    0.00       2             resolveSelectStep <cycle 1> [275]
                0.00    0.00       2             resolveOrderGroupBy <cycle 1> [274]
                0.00    0.00       1             sqlite3Init <cycle 1> [347]
-----------------------------------------------
                0.00    0.16    2374/2374        sqlite3_step [4]
[3]     99.9    0.00    0.16    2374         sqlite3VdbeExec [3]
                0.01    0.15   26068/26068       sqlite3VdbeCursorMoveto [6]
                0.00    0.00      53/54          moveToLeftmost [17]
                0.00    0.00       2/3           sqlite3BtreeBeginTrans [20]
                0.00    0.00       1/2370        sqlite3BtreeMovetoUnpacked [16]
                0.00    0.00    2372/2372        sqlite3BtreeNext [28]
                0.00    0.00       1/2371        moveToRoot [23]
                0.00    0.00   26068/28459       sqlite3VdbeSerialGet [34]
                0.00    0.00   23699/23708       sqlite3VdbeMemNulTerminate [35]
                0.00    0.00   23699/23699       sqlite3_transfer_bindings [36]
                0.00    0.00   11851/11851       sqlite3VdbeMemMakeWriteable [39]
                0.00    0.00    7108/7109        sqlite3BtreeKeySize [49]
                0.00    0.00    4741/9480        fetchPayload [40]
                0.00    0.00    4739/4739        sqlite3VdbeMemFromBtree [55]
                0.00    0.00    4739/9478        sqlite3VdbeMemRelease [41]
                0.00    0.00    2374/2376        sqlite3VdbeMemShallowCopy [65]
                0.00    0.00    2372/2376        sqlite3VdbeCheckFk [64]
                0.00    0.00    2372/2372        sqlite3VdbeCloseStatement [66]
                0.00    0.00    2372/4742        btreeParseCellPtr [54]
                0.00    0.00    2372/4742        btreeParseCell [53]
                0.00    0.00    2370/2391        sqlite3VdbeRecordCompare [63]
                0.00    0.00    2369/2369        sqlite3VdbeIntValue [67]
                0.00    0.00     893/893         sqlite3VdbeRealValue [74]
                0.00    0.00       3/3           sqlite3VdbeFreeCursor [245]
                0.00    0.00       3/3           allocateCursor [226]
                0.00    0.00       3/3           sqlite3BtreeCursor [237]
                0.00    0.00       2/9           sqlite3VdbeHalt [152]
                0.00    0.00       1/36          sqlite3BtreeLeave [98]
                0.00    0.00       1/6           sqlite3BtreeGetMeta [185]
                0.00    0.00       1/1           sqlite3GetVarint32 [345]

0 个答案:

没有答案