Android上SQLite的日志查询时间 [英] Log query time in SQLite on Android

查看:36
本文介绍了Android上SQLite的日志查询时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以记录在应用程序中对SQLite数据库执行的所有查询的持续时间?

我有一个具有大型数据库的应用程序,我想深入了解执行查询所需的时间,以及数据库在事务中锁定的时间。

类似于:

[10ms] select * from users where user_id = 10
[122ms] select * from users

我不希望运行"EXPLAIN"来标识可能较慢的查询,我希望查看查询在实际设备上花费多长时间,并确定是否因为另一个线程锁定了数据库而阻止执行查询。

SQLiteDatabase类是最终类,因此我可以编写一个包装器来管理日志记录,但是我想知道这是否已经完成,或者是否有更好的方法。

仅在开发期间需要日志记录。我对在生产环境中使用此选项不感兴趣。

推荐答案

Sqlite for Android对此有内置支持。

发件人here

/**
 * Controls the printing of wall-clock time taken to execute SQL statements
 * as they are executed.
 *
 * Enable using "adb shell setprop log.tag.SQLiteTime VERBOSE".
 */
public static final boolean DEBUG_SQL_TIME =
        Log.isLoggable("SQLiteTime", Log.VERBOSE);

因此,要启用执行时间跟踪运行:

adb shell setprop log.tag.SQLiteTime VERBOSE

您必须重新启动应用程序才能重新加载新设置**。之后,您将开始在logcat中看到以下日志记录:

11936-12137/osom.info.dbtest I/数据库:02-14 12:27:00.457: elapsedTime4Sql|/data/data/osom.info.dbtest/databases/test.db|1.000 ms|UPDATE TestTable SET KEY=?其中_id=1

**有时这还不够,因此运行adb shell stopadb shell start

要停止打印这些日志,请重新启动设备(此属性在重新启动之间不会持续存在),或者将该属性设置为更高的日志级别,即:

adb shell setprop log.tag.SQLiteTime ERROR

这篇关于Android上SQLite的日志查询时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆