⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adodb-perf.inc.php

📁 Typo3, 开源里边最强大的
💻 PHP
📖 第 1 页 / 共 3 页
字号:
			if ($total<1) $total=1;			return 100*($d_user+$d_nice+$d_system)/$total; 		}	}		function Tracer($sql)	{        $perf_table = adodb_perf::table();		$saveE = $this->conn->fnExecute;		$this->conn->fnExecute = false;				global $ADODB_FETCH_MODE;		$save = $ADODB_FETCH_MODE;		$ADODB_FETCH_MODE = ADODB_FETCH_NUM;		if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false);						$sqlq = $this->conn->qstr($sql);		$arr = $this->conn->GetArray("select count(*),tracer 	from $perf_table where sql1=$sqlq 	group by tracer	order by 1 desc");		$s = '';		if ($arr) {			$s .= '<h3>Scripts Affected</h3>';			foreach($arr as $k) {				$s .= sprintf("%4d",$k[0]).' &nbsp; '.strip_tags($k[1]).'<br>';			}		}				if (isset($savem)) $this->conn->SetFetchMode($savem);		$ADODB_CACHE_MODE = $save;		$this->conn->fnExecute = $saveE;		return $s;	}	/* 		Explain Plan for $sql.		If only a snippet of the $sql is passed in, then $partial will hold the crc32 of the 			actual sql.	*/	function Explain($sql,$partial=false)	{			return false;	}		function InvalidSQL($numsql = 10)	{			if (isset($_GET['sql'])) return;		$s = '<h3>Invalid SQL</h3>';		$saveE = $this->conn->fnExecute;		$this->conn->fnExecute = false;        $perf_table = adodb_perf::table();		$rs =& $this->conn->SelectLimit("select distinct count(*),sql1,tracer as error_msg from $perf_table where tracer like 'ERROR:%' group by sql1,tracer order by 1 desc",$numsql);//,$numsql);		$this->conn->fnExecute = $saveE;		if ($rs) {			$s .= rs2html($rs,false,false,false,false);		} else			return "<p>$this->helpurl. ".$this->conn->ErrorMsg()."</p>";				return $s;	}		/*		This script identifies the longest running SQL	*/		function _SuspiciousSQL($numsql = 10)	{		global $ADODB_FETCH_MODE;		            $perf_table = adodb_perf::table();			$saveE = $this->conn->fnExecute;			$this->conn->fnExecute = false;						if (isset($_GET['exps']) && isset($_GET['sql'])) {				$partial = !empty($_GET['part']);				echo "<a name=explain></a>".$this->Explain($_GET['sql'],$partial)."\n";			}						if (isset($_GET['sql'])) return;			$sql1 = $this->sql1;						$save = $ADODB_FETCH_MODE;			$ADODB_FETCH_MODE = ADODB_FETCH_NUM;			if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false);			//$this->conn->debug=1;			$rs =& $this->conn->SelectLimit(			"select avg(timer) as avg_timer,$sql1,count(*),max(timer) as max_timer,min(timer) as min_timer				from $perf_table				where {$this->conn->upperCase}({$this->conn->substr}(sql0,1,5)) not in ('DROP ','INSER','COMMI','CREAT')				and (tracer is null or tracer not like 'ERROR:%')				group by sql1				order by 1 desc",$numsql);			if (isset($savem)) $this->conn->SetFetchMode($savem);			$ADODB_FETCH_MODE = $save;			$this->conn->fnExecute = $saveE;						if (!$rs) return "<p>$this->helpurl. ".$this->conn->ErrorMsg()."</p>";			$s = "<h3>Suspicious SQL</h3><font size=1>The following SQL have high average execution times</font><br><table border=1 bgcolor=white><tr><td><b>Avg Time</b><td><b>Count</b><td><b>SQL</b><td><b>Max</b><td><b>Min</b></tr>\n";			$max = $this->maxLength;			while (!$rs->EOF) {				$sql = $rs->fields[1];				$raw = urlencode($sql);				if (strlen($raw)>$max-100) {					$sql2 = substr($sql,0,$max-500);					$raw = urlencode($sql2).'&part='.crc32($sql);				}				$prefix = "<a target=sql".rand()." href=\"?hidem=1&exps=1&sql=".$raw."&x#explain\">";				$suffix = "</a>";				if ($this->explain == false || strlen($prefix)>$max) {					$suffix = ' ... <i>String too long for GET parameter: '.strlen($prefix).'</i>';					$prefix = '';				}				$s .= "<tr><td>".adodb_round($rs->fields[0],6)."<td align=right>".$rs->fields[2]."<td><font size=-1>".$prefix.htmlspecialchars($sql).$suffix."</font>".					"<td>".$rs->fields[3]."<td>".$rs->fields[4]."</tr>";				$rs->MoveNext();			}			return $s."</table>";			}		function CheckMemory()	{		return '';	}			function SuspiciousSQL($numsql=10)	{		return adodb_perf::_SuspiciousSQL($numsql);	}	function ExpensiveSQL($numsql=10)	{		return adodb_perf::_ExpensiveSQL($numsql);	}		/*		This reports the percentage of load on the instance due to the most 		expensive few SQL statements. Tuning these statements can often 		make huge improvements in overall system performance. 	*/	function _ExpensiveSQL($numsql = 10)	{		global $ADODB_FETCH_MODE;		            $perf_table = adodb_perf::table();			$saveE = $this->conn->fnExecute;			$this->conn->fnExecute = false;						if (isset($_GET['expe']) && isset($_GET['sql'])) {				$partial = !empty($_GET['part']);				echo "<a name=explain></a>".$this->Explain($_GET['sql'],$partial)."\n";			}						if (isset($_GET['sql'])) return;						$sql1 = $this->sql1;			$save = $ADODB_FETCH_MODE;			$ADODB_FETCH_MODE = ADODB_FETCH_NUM;			if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false);						$rs =& $this->conn->SelectLimit(			"select sum(timer) as total,$sql1,count(*),max(timer) as max_timer,min(timer) as min_timer				from $perf_table				where {$this->conn->upperCase}({$this->conn->substr}(sql0,1,5))  not in ('DROP ','INSER','COMMI','CREAT')				and (tracer is null or tracer not like 'ERROR:%')				group by sql1				having count(*)>1				order by 1 desc",$numsql);			if (isset($savem)) $this->conn->SetFetchMode($savem);			$this->conn->fnExecute = $saveE;			$ADODB_FETCH_MODE = $save;			if (!$rs) return "<p>$this->helpurl. ".$this->conn->ErrorMsg()."</p>";			$s = "<h3>Expensive SQL</h3><font size=1>Tuning the following SQL could reduce the server load substantially</font><br><table border=1 bgcolor=white><tr><td><b>Load</b><td><b>Count</b><td><b>SQL</b><td><b>Max</b><td><b>Min</b></tr>\n";			$max = $this->maxLength;			while (!$rs->EOF) {				$sql = $rs->fields[1];				$raw = urlencode($sql);				if (strlen($raw)>$max-100) {					$sql2 = substr($sql,0,$max-500);					$raw = urlencode($sql2).'&part='.crc32($sql);				}				$prefix = "<a target=sqle".rand()." href=\"?hidem=1&expe=1&sql=".$raw."&x#explain\">";				$suffix = "</a>";				if($this->explain == false || strlen($prefix>$max)) {					$prefix = '';					$suffix = '';				}				$s .= "<tr><td>".adodb_round($rs->fields[0],6)."<td align=right>".$rs->fields[2]."<td><font size=-1>".$prefix.htmlspecialchars($sql).$suffix."</font>".					"<td>".$rs->fields[3]."<td>".$rs->fields[4]."</tr>";				$rs->MoveNext();			}			return $s."</table>";	}		/*		Raw function to return parameter value from $settings.	*/	function DBParameter($param)	{		if (empty($this->settings[$param])) return false;		$sql = $this->settings[$param][1];		return $this->_DBParameter($sql);	}		/*		Raw function returning array of poll paramters	*/	function &PollParameters()	{		$arr[0] = (float)$this->DBParameter('data cache hit ratio');		$arr[1] = (float)$this->DBParameter('data reads');		$arr[2] = (float)$this->DBParameter('data writes');		$arr[3] = (integer) $this->DBParameter('current connections');		return $arr;	}		/*		Low-level Get Database Parameter	*/	function _DBParameter($sql)	{		$savelog = $this->conn->LogSQL(false);		if (is_array($sql)) {		global $ADODB_FETCH_MODE;					$sql1 = $sql[0];			$key = $sql[1];			if (sizeof($sql)>2) $pos = $sql[2];			else $pos = 1;			if (sizeof($sql)>3) $coef = $sql[3];			else $coef = false;			$ret = false;			$save = $ADODB_FETCH_MODE;			$ADODB_FETCH_MODE = ADODB_FETCH_NUM;			if ($this->conn->fetchMode !== false) $savem = $this->conn->SetFetchMode(false);						$rs = $this->conn->Execute($sql1);						if (isset($savem)) $this->conn->SetFetchMode($savem);			$ADODB_FETCH_MODE = $save;			if ($rs) {				while (!$rs->EOF) {					$keyf = reset($rs->fields);					if (trim($keyf) == $key) {						$ret = $rs->fields[$pos];						if ($coef) $ret *= $coef;						break;					}					$rs->MoveNext();				}				$rs->Close();			}			$this->conn->LogSQL($savelog);			return $ret;		} else {			if (strncmp($sql,'=',1) == 0) {				$fn = substr($sql,1);				return $this->$fn();			}			$sql = str_replace('$DATABASE',$this->conn->database,$sql);			$ret = $this->conn->GetOne($sql);			$this->conn->LogSQL($savelog);						return $ret;		}	}		/*		Warn if cache ratio falls below threshold. Displayed in "Description" column.	*/	function WarnCacheRatio($val)	{		if ($val < $this->warnRatio) 			 return '<font color=red><b>Cache ratio should be at least '.$this->warnRatio.'%</b></font>';		else return '';	}		/***********************************************************************************************/	//                                    HIGH LEVEL UI FUNCTIONS	/***********************************************************************************************/		function UI($pollsecs=5)	{	    $perf_table = adodb_perf::table();	$conn = $this->conn;		$app = $conn->host;	if ($conn->host && $conn->database) $app .= ', db=';	$app .= $conn->database;		if ($app) $app .= ', ';	$savelog = $this->conn->LogSQL(false);		$info = $conn->ServerInfo();	if (isset($_GET['clearsql'])) {		$this->conn->Execute("delete from $perf_table");	}	$this->conn->LogSQL($savelog);		// magic quotes		if (isset($_GET['sql']) && get_magic_quotes_gpc()) {		$_GET['sql'] = $_GET['sql'] = str_replace(array("\\'",'\"'),array("'",'"'),$_GET['sql']);	}		if (!isset($_SESSION['ADODB_PERF_SQL'])) $nsql = $_SESSION['ADODB_PERF_SQL'] = 10;	else  $nsql = $_SESSION['ADODB_PERF_SQL'];		$app .= $info['description'];			if (isset($_GET['do'])) $do = $_GET['do'];	else if (isset($_POST['do'])) $do = $_POST['do'];	 else if (isset($_GET['sql'])) $do = 'viewsql';	 else $do = 'stats';	 	if (isset($_GET['nsql'])) {		if ($_GET['nsql'] > 0) $nsql = $_SESSION['ADODB_PERF_SQL'] = (integer) $_GET['nsql'];	}	echo "<title>ADOdb Performance Monitor on $app</title><body bgcolor=white>";	if ($do == 'viewsql') $form = "<td><form># SQL:<input type=hidden value=viewsql name=do> <input type=text size=4 name=nsql value=$nsql><input type=submit value=Go></td></form>";	else $form = "<td>&nbsp;</td>";		$allowsql = !defined('ADODB_PERF_NO_RUN_SQL');		if  (empty($_GET['hidem']))	echo "<table border=1 width=100% bgcolor=lightyellow><tr><td colspan=2>	<b><a href=http://adodb.sourceforge.net/?perf=1>ADOdb</a> Performance Monitor</b> <font size=1>for $app</font></tr><tr><td>	<a href=?do=stats><b>Performance Stats</b></a> &nbsp; <a href=?do=viewsql><b>View SQL</b></a>	 &nbsp; <a href=?do=tables><b>View Tables</b></a> &nbsp; <a href=?do=poll><b>Poll Stats</b></a>",	 $allowsql ? ' &nbsp; <a href=?do=dosql><b>Run SQL</b></a>' : '',	 "$form",	 "</tr></table>";	 	 	switch ($do) {		default:		case 'stats':			echo $this->HealthCheck();			//$this->conn->debug=1;			echo $this->CheckMemory();			break;		case 'poll':			echo "<iframe width=720 height=80% 				src=\"{$_SERVER['PHP_SELF']}?do=poll2&hidem=1\"></iframe>";			break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -