sqliteの各SQLステートメントの実行時間を測定したいと思います。
sqliteシェルでは.timeronを実行できることは理解していますが、アプリケーションがデータベースにリアルタイムでアクセスしているときに、SQLステートメントがデータベースにアクセスしているときに、後でそのステートメントをシェルで再生しますか?
sqlite_profileのプラグイン関数を提供できますか?
どうもありがとう
sqliteの各SQLステートメントの実行時間を測定したいと思います。
sqliteシェルでは.timeronを実行できることは理解していますが、アプリケーションがデータベースにリアルタイムでアクセスしているときに、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-startimeなど)を使用して作業を行う必要があります。
sqlitemanは、いくつかの基本的なプロファイリング機能を提供します。クエリの実行時間を示します。クエリの実行は別のプロセッサ(つまり、ARMと比較してX86)で行われますが、それでもsqliteで最適化された生のクエリを作成するのに役立ちます。たとえば、インデックスのないwhere句を使用してselectクエリをテストしたところ、約0.019秒かかり、インデックスを作成した後は0.008しかかかりませんでした。
これがsqlitemanのリンクですhttp://sourceforge.net/projects/sqliteman/