• Модуль: perfmon
  • Путь к файлу: ~/bitrix/modules/perfmon/classes/general/measure.php
  • Класс: CPerfomanceMeasure
  • Вызов: CPerfomanceMeasure::GetDBMark
static function GetDBMark($type)
{
	global $DB;

	$res = array();
	switch ($type)
	{
		case "read":
			$strSql = "select * from b_perf_test WHERE ID = #i#";
			$bFetch = true;
			break;
		case "update":
			$strSql = "update b_perf_test set REFERENCE_ID = ID+1, NAME = '".str_repeat("y", 200)."' WHERE ID = #i#";
			$bFetch = false;
			break;
		default:
			$DB->Query("truncate table b_perf_test");
			$strSql = "insert into b_perf_test (REFERENCE_ID, NAME) values (#i#-1, '".str_repeat("x", 200)."')";
			$bFetch = false;
	}

	for ($j = 0; $j < 4; $j++)
	{
		$s1 = microtime(true);
		for ($i = 0; $i < 100; $i++)
		{
			$sql = str_replace("#i#", $i, $strSql);
		}
		$e1 = microtime(true);
		$N1 = $e1 - $s1;

		$s2 = microtime(true);
		for ($i = 0; $i < 100; $i++)
		{
			//This is one op
			$sql = str_replace("#i#", $i, $strSql);
			$rs = $DB->Query($sql);
			if ($bFetch)
				$rs->Fetch();
		}
		$e2 = microtime(true);
		$N2 = $e2 - $s2;

		if ($N2 > $N1)
		{
			$res[] = 100 / ($N2 - $N1);
		}
	}

	if (count($res))
	{
		return array_sum($res) / doubleval(count($res));
	}
}