PHP Conference Japan 2024

mysql_stat

(PHP 4 >= 4.3.0, PHP 5)

mysql_stat取得目前的系統狀態

警告

此擴充自 PHP 5.5.0 起已被棄用,並在 PHP 7.0.0 中移除。建議改用 MySQLiPDO_MySQL 擴充。另請參閱 MySQL:選擇 API 指南。此函式的替代方案包括:

說明

mysql_stat(資源 $link_identifier = NULL): 字串

mysql_stat() 會回傳目前的伺服器狀態。

參數

link_identifier

MySQL 連線。如果未指定連線識別碼,則會假設為 mysql_connect() 所開啟的最後一個連線。如果找不到這樣的連線,它會嘗試建立一個連線,如同以無參數呼叫 mysql_connect() 一樣。如果找不到或無法建立連線,則會產生 E_WARNING 等級的錯誤。

回傳值

回傳一個字串,包含運作時間、執行緒數、查詢數、開啟的表格數、已清空的表格數以及每秒查詢數等狀態資訊。若要取得其他狀態變數的完整清單,您必須使用 SHOW STATUS SQL 指令。如果 link_identifier 無效,則回傳 null

範例

範例 #1 mysql_stat() 範例

<?php
$link
= mysql_connect('localhost', 'mysql_user', 'mysql_password');
$status = explode(' ', mysql_stat($link));
print_r($status);
?>

上述範例會輸出類似以下的內容

Array
(
    [0] => Uptime: 5380
    [1] => Threads: 2
    [2] => Questions: 1321299
    [3] => Slow queries: 0
    [4] => Opens: 26
    [5] => Flush tables: 1
    [6] => Open tables: 17
    [7] => Queries per second avg: 245.595
)

範例 #2 替代的 mysql_stat() 範例

<?php
$link
= mysql_connect('localhost', 'mysql_user', 'mysql_password');
$result = mysql_query('SHOW STATUS', $link);
while (
$row = mysql_fetch_assoc($result)) {
echo
$row['Variable_name'] . ' = ' . $row['Value'] . "\n";
}
?>

上述範例會輸出類似以下的內容

back_log = 50
basedir = /usr/local/
bdb_cache_size = 8388600
bdb_log_buffer_size = 32768
bdb_home = /var/db/mysql/
bdb_max_lock = 10000
bdb_logdir =
bdb_shared_data = OFF
bdb_tmpdir = /var/tmp/
...

參見

新增註記

使用者貢獻的註記 3 則註記

billbilljr at gmail dot com
13 年前
以下腳本可用來清楚地印出 mysql_stat() 的結果。

<?php
mysql_connect
("localhost", "username", "password");
$array = explode(" ", mysql_stat());
foreach (
$array as $value){
echo
$value . "<br />";
}
?>

輸出類似以下內容:

運行時間:698
執行緒:1
查詢次數:4
慢查詢:0
開啟次數:19
刷新表格次數:1
已開啟表格:12
平均每秒查詢數:0.5
Enzo_01 at abv dot bg
16 年前
<?php
// 將狀態元素返回到陣列的函式
function mysql_stat_array($A=null) {
$status = explode(' ', mysql_stat());
foreach(
$status as $k=>$v) { $v=explode(':',$v,2); $status[$v[0]]=$v[1]; }
return (isset(
$status[$A])?$status[$A]:$status);
}
/*
範例回傳值:
Array ( [0] => Uptime: 385815 [1] => Threads: 1 [2] => Questions: 3515 [3] => Slow queries: 0 [4] => Opens: 32 [5] => Flush tables: 1 [6] => Open tables: 8 [7] => Queries per second avg: 0.009 [Uptime] => Array ( [0] => Uptime [1] => 385815 ) [Threads] => Array ( [0] => Threads [1] => 1 ) [Questions] => Array ( [0] => Questions [1] => 3515 ) [Slow queries] => Array ( [0] => Slow queries [1] => 0 ) [Opens] => Array ( [0] => Opens [1] => 32 ) [Flush tables] => Array ( [0] => Flush tables [1] => 1 ) [Open tables] => Array ( [0] => Open tables [1] => 8 ) [Queries per second avg] => Array ( [0] => Queries per second avg [1] => 0.009 ) )
*/

?>
匿名
19 年前
如果您需要「show status」指令輸出的完整狀態,請嘗試使用以下函式。
<?
function mysql_status($db=NULL) {
if(!mysql_ping($db))
$db=mysql_connect("localhost","user","password");
$res=mysql_query("show status",$db);
while (list($key,$value) = mysql_fetch_array($res))

(譯:while (list($key, $value) = mysql_fetch_array($res)) // 迴圈逐一取出結果集中的資料,$key 為欄位名稱,$value 為對應的值)
$sql[$key]=$value;

(譯:$sql[$key] = $value; // 將取出的值以欄位名稱作為鍵名存入 $sql 陣列)
return $sql;

(譯:return $sql; // 回傳包含資料的 $sql 陣列)
}
?>

To Top