2010-12-21 15 views
24

मैं PHP से MySQL क्वेरी निष्पादित करता हूं और जानना चाहता हूं कि वे कितने समय ले रहे हैं। क्या PHP से MySQL क्वेरी का निष्पादन समय प्राप्त करने का कोई तरीका है?PHP से MySQL क्वेरी का निष्पादन समय कैसे प्राप्त करें?

मुझे यह भी आश्चर्य है कि निष्पादन समय वेब सर्वर कितना लोड होता है इस पर निर्भर करता है। मैं कल्पना कर सकता हूं कि सर्वर को अन्य प्रश्नों के साथ व्यस्त होने पर निष्पादित करने में अधिक समय लगेगा। दूसरी तरफ, मैं कल्पना कर सकता हूं कि, यदि सर्वर व्यस्त है, तो क्वेरी सिर्फ उसकी बारी के लिए प्रतीक्षा करेगी और फिर इसे निष्पादित किया जाएगा (समानांतर में निष्पादित किसी भी प्रश्न के बिना) और प्रतीक्षा समय निष्पादन समय में शामिल नहीं किया गया है । तो, कौन से परिदृश्य (दो में से) सही है?

उत्तर

51

शायद MySQL के माध्यम से ऐसा करने का कोई तरीका है, हालांकि, आसान (और विश्वसनीय) तरीका PHP के microtime फ़ंक्शन का उपयोग कर रहा है, जो वर्तमान समय को मिलीसेकंड के रूप में लौटाता है।

microtime() माइक्रोसेकंड के साथ वर्तमान यूनिक्स टाइमस्टैम्प देता है। यह फ़ंक्शन केवल उन ऑपरेटिंग सिस्टम पर उपलब्ध है जो gettimeofday() सिस्टम कॉल का समर्थन करते हैं।

getasfloat - जब वैकल्पिक तर्क के बिना कहा जाता है, इस समारोह स्ट्रिंग जहां सेकंड वर्तमान समय यूनिक्स काल के बाद से सेकंड की संख्या में मापा जाता है "सेकंड msec" रिटर्न (00:00:00 जनवरी 1, 1970 जीएमटी), और एमसीईसी माइक्रोसॉन्ड भाग है। स्ट्रिंग के दोनों भाग सेकंड की इकाइयों में वापस आते हैं।

यदि वैकल्पिक get_as_float TRUE पर सेट है तो एक फ्लोट (सेकेंड में) वापस कर दिया जाता है।

कुछ उदाहरण कोड:

$sql = '...'; 
$msc = microtime(true); 
mysql_query($sql); 
$msc = microtime(true)-$msc; 
echo $msc . ' s'; // in seconds 
echo ($msc * 1000) . ' ms'; // in millseconds 
+0

उत्तर के लिए धन्यवाद। वैसे, क्या आप सवाल के दूसरे भाग के बारे में भी जान सकते हैं? क्या इस बार इस बात पर निर्भर होना चाहिए कि सर्वर कितना दृढ़ता से लोड हो रहा है? – Roman

+1

रोमन - हां यह निश्चित रूप से करता है। यह समय के साथ सीपीयू चरण नहीं काम करता है, क्योंकि इस तरह की सब कुछ इसे प्रभावित कर सकती है, यहां तक ​​कि एक नया कनेक्शन (उदाहरण के रूप में)। – Christian

+5

आप एक उत्तर को सही के रूप में चिह्नित करना भी चाहेंगे। :) – Christian

-3

सही MySQL से बाहर आप सामान्य लॉग उपयोग कर सकते हैं इसे पाने के लिए।

अपनी यदि नहीं पहले से ही पर, इसे चालू:

SET GLOBAL general_log = 'ON'; 

डेटा देखने के लिए के बाद आप अपनी क्वेरी हुई:

SELECT * FROM mysql.general_log; 

अन्य बातों के अलावा, आप क्वेरी निष्पादन हो जाएगा समय, जैसा कि आपने शायद phpmyadmin में देखा है।

+7

सामान्य_लॉग तालिका में निष्पादन क्वेरी समय नहीं है। –

7

microtime() खुद को निष्पादित करने में समय लगता है। यदि आप सीधे mysql से डेटा प्राप्त करना चाहते हैं, तो यह करें ...

mysql_query("SET profiling = 1;"); 
if (mysql_errno()) { die("ERROR ".mysql_errno($link) . ": " . mysql_error($link)); } 

$query="SELECT some_field_name FROM some_table_name"; 
$result = mysql_query($query); 
if (mysql_errno()) { die("ERROR ".mysql_errno($link) . ": " . mysql_error($link)); } 

$exec_time_result=mysql_query("SELECT query_id, SUM(duration) FROM information_schema.profiling GROUP BY query_id ORDER BY query_id DESC LIMIT 1;"); 
if (mysql_errno()) { die("ERROR ".mysql_errno($link) . ": " . mysql_error($link)); } 
$exec_time_row = mysql_fetch_array($exec_time_result); 

echo "<p>Query executed in ".$exec_time_row[1].' seconds'; 
संबंधित मुद्दे