[pgsql-jp: 40731] statsrepo.activity の単位について

yoyo takamatsu takamatsuyooko @ gmail.com
2011年 4月 7日 (木) 22:58:32 JST


高松です。

先日はpg_statsifoについてアドバイスをありがとうございました。

もうひとつ、質問させてください。
時間あたりのセッション数のグラフを作りたいと考えております。

statsrepo.activity表の (idle+waiting+running) がそうかなと
思ったのですが、表に入っている値をみるとどうも違うみたいなのです。

lib/libstatsinfo.cをみると、
プロセス数を取得して、サンプル数で割った値が
入っているようなのですが、この割り算の意味がわかりません。。。

セッション数の求め方と、割り算の意味について
教えて頂けませんでしょうか。

どうぞよろしくお願いいたします。


     /*
		 * sample idle transactions
		 */
		if (be->st_procpid == MyProcPid)
			;	/* exclude myself */
		else if (be->st_waiting)
			waiting++;
		else if (be->st_activity[0] != '\0')
		{
			if (strcmp(be->st_activity, "<IDLE>") == 0)
				idle++;
			else if (strcmp(be->st_activity, "<IDLE> in transaction") == 0)
				idle_in_xact++;
			else
				running++;
		}
(中略)


	stats->idle += idle;
	stats->idle_in_xact += idle_in_xact;
	stats->waiting += waiting;
	stats->running += running;

	stats->samples++;


(中略)

/* Build a tuple descriptor for our result type */
	if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
		elog(ERROR, "return type must be a row type");

	Assert(tupdesc->natts == lengthof(values));

	if (stats != NULL && stats->samples > 0)
	{
		double		samples = stats->samples;

		memset(nulls, 0, sizeof(nulls));

		i = 0;
		values[i++] = Float8GetDatum(stats->idle / samples);
		values[i++] = Float8GetDatum(stats->idle_in_xact / samples);
		values[i++] = Float8GetDatum(stats->waiting / samples);
		values[i++] = Float8GetDatum(stats->running / samples);


pgsql-jp メーリングリストの案内