我想测量sqlite中每个sql语句的执行时间。
我知道在sqlite shell中你可以只做.timer,但我想知道如何以可编程的方式来做,这样我就可以知道当应用程序实时访问数据库时sql语句需要多少时间,而不仅仅是通过之后在外壳中重播该语句?
我可以为 sqlite_profile 提供一个插件功能吗?
非常感谢
我想测量sqlite中每个sql语句的执行时间。
我知道在sqlite shell中你可以只做.timer,但我想知道如何以可编程的方式来做,这样我就可以知道当应用程序实时访问数据库时sql语句需要多少时间,而不仅仅是通过之后在外壳中重播该语句?
我可以为 sqlite_profile 提供一个插件功能吗?
非常感谢
在阅读了shell.c的代码后,我在文件顶部发现了以下相关信息:
/* Saved resource information for the beginning of an operation */
static struct rusage sBegin;
/*
** Begin timing an operation
*/
static void beginTimer(void){
if( enableTimer ){
getrusage(RUSAGE_SELF, &sBegin);
}
}
/* Return the difference of two time_structs in seconds */
static double timeDiff(struct timeval *pStart, struct timeval *pEnd){
return (pEnd->tv_usec - pStart->tv_usec)*0.000001 +
(double)(pEnd->tv_sec - pStart->tv_sec);
}
/*
** Print the timing results.
*/
static void endTimer(void){
if( enableTimer ){
struct rusage sEnd;
getrusage(RUSAGE_SELF, &sEnd);
printf("CPU Time: user %f sys %f\n",
timeDiff(&sBegin.ru_utime, &sEnd.ru_utime),
timeDiff(&sBegin.ru_stime, &sEnd.ru_stime));
}
}
这意味着,SQLite 本身不提供某种分析,因此您必须使用您的语言功能(例如 endtime-starttime)来完成这项工作。
sqliteman 提供了一些基本的分析功能。它显示查询执行时间。好吧,尽管查询执行是在不同的处理器上(即 X86 与 ARM 相比),但它仍然可以帮助您在 sqlite 上编写优化的原始查询。例如,我刚刚测试了一个没有索引的 where 子句的选择查询,它花费了大约 0.019 秒,而在创建索引之后它只花费了 0.008。
这是 sqlite man http://sourceforge.net/projects/sqliteman/的链接