記錄sql執行時間毫秒級


dui  對sql的執行時間進行分析可以:

1,確定sql的書寫是否合理,高效

2,檢查字段、表的設計是否合理

 

方法1:在系統底層對sql操作類進行改寫,通常類的結構是

業務model   ---》   db類   ---》   執行sql

 

可以根據情況在某階段進行改寫,比如db類;通常會修改  

 1 public function execute($sql)  {
 2   //code...
 3 
 4 /*檢測sql執行時間,超過執行時間記錄到日志中*/
 5 $start_time = array_sum(explode(' ', microtime()));
 6 
 7 $this->lastresult = mysql_query($sql,$this->link) or $this->displayerror($sql);
 8 
 9 $end_time = array_sum(explode(' ', microtime()));
10 $differ = $end_time - $start_time;
11 if($differ >0.001){                //修改時間范圍,單位:秒
12    putContent('sqlLOG', date('Y-m-d H:i:s', $start_time)."   "
13       . date('Y-m-d H:i:s', $end_time)."   "
14       .$differ. "   ".$sql."\r\n");
15 }
16 
17 
18   //code...
19 }

 

引用:

phpmyadmin中的代碼,獲得query執行時間如下:

// garvin: Measure query time.
// TODO-Item http://sourceforge.net/tracker/index.php?func=detail&aid=571934&group_id=23067&atid=377411

$querytime_before = array_sum(explode(' ', microtime()));
$result   = @PMA_DBI_try_query($full_sql_query, null, PMA_DBI_QUERY_STORE);
$querytime_after = array_sum(explode(' ', microtime()));
$GLOBALS['querytime'] = $querytime_after - $querytime_before;

除了這種方式還可以使用mysql的profile,可以參考@php里sql執行時間的監控?
這個更適合統計多條sql的執行情況。
我見過好像是一個博客,訪問頁面之后會有一個提示大概說共查詢了幾次數據庫,用了多長時間查詢數據,那么開啟mysql的profile就可以輕松實現了。

 

批注1:micortime函數

計算微秒的函數micortime(),可以返回當前UNIX時間戳和微秒數。返回浮點數單位為秒。不過函數僅在支持gettimeofday()系統調用的操作系統下可用。可以查下手冊詳細了解下。可能引發有些不明的錯誤,注意。

 

批注2:profile最多保存100條記錄,這個要怎么解決呢?

profiling_history_size
The number of statements for which to maintain profiling information if profiling is enabled. The default value is 15. The maximum value is 100. Setting the value to 0 effectively disables profiling.
這個最大就100條了,改不了。

 

引用2:PHP獲取毫秒級時間戳的方法

java里面可以通過gettime();獲取。如果是要與java寫的某些程序進行高精度的毫秒級的對接通信,則需要使用PHP輸出毫秒級的時間。為獲取更為精准的毫秒級時間戳可以使用下面的代碼:

<?php
function getMillisecond() {
list($t1, $t2) = explode(' ', microtime());
return (float)sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);
}
echo getMillisecond();

運行結果:1.46647658229E+12

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM