[英]How to show running mysql queries in php
我有溢出內存使用問題,我需要掃描所有腳本。
我的問題是如何在php中顯示運行mysql查詢的列表?
如果問題出在MySQL網站上,這可能會有很大幫助:
mysql_query('show processlist');
它應該返回所有等待處理的查詢。 我通常直接從mysql控制台使用它,我沒有格式化輸出。
您可以重命名原始的mysql_query
函數並編寫自己的函數,其中包含一些額外的日志記錄/檢查代碼,以查看查詢出了什么問題:
rename_function('mysql_query', 'mysql_query_original');
override_function('mysql_query', '$query', 'return mysql_query_override($query);');
function mysql_query_override($query){
echo "Query started"; // Add some more sensible information here
$result = mysql_query_original($query);
echo "Query ended"; // Add some more sensible information here
return $result;
}
除非您運行具有大量流量的站點,否則運行/入隊的查詢的任何快照都不可能具有代表性。 在將查詢與產生它的腳本相關聯方面也存在問題。
我建議使用自己的代碼 - 使用自動前置來定義mysql_query()
的包裝,然后你可以實現自己的日志記錄:
然后執行遞歸搜索並替換源代碼,用您的包裝函數替換對mysql_query()
的調用。
我建議你連接到你的數據庫服務器並運行show full processlist;
這將顯示所有活動查詢,您可以從那里進行調試。 此外,向項目添加一些檢測以記錄慢速查詢將是有益的。
在任何給定時間只運行一個查詢,因為這是PHP的工作方式,它不會異步運行。 除非你使用某種第三方庫來做不同的事情。
*編輯:似乎有可能,也許看看: 異步PHP調用? 。 但是,當您讓PHP運行異步時,仍然無法查看正在運行的查詢數。 也許您可以在運行代碼時嘗試檢查一些mysql統計信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.