簡體   English   中英

如何在php中顯示運行的mysql查詢

[英]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()的包裝,然后你可以實現自己的日志記錄:

  1. 在觸發腳本之前創建一個日志條目(之后創建大多數日志條目 - 如果寫入日志的代碼崩潰,則不是很方便)
  2. 記錄觸發查詢的腳本和查詢本身
  3. 記錄以前的內存使用情況
  4. 記錄相同的事實以及所花費的時間

然后執行遞歸搜索並替換源代碼,用您的包裝函數替換對mysql_query()的調用。

我建議你連接到你的數據庫服務器並運行show full processlist; 這將顯示所有活動查詢,您可以從那里進行調試。 此外,向項目添加一些檢測以記錄慢速查詢將是有益的。

在任何給定時間只運行一個查詢,因為這是PHP的工作方式,它不會異步運行。 除非你使用某種第三方庫來做不同的事情。

*編輯:似乎有可能,也許看看: 異步PHP調用? 但是,當您讓PHP運行異步時,仍然無法查看正在運行的查詢數。 也許您可以在運行代碼時嘗試檢查一些mysql統計信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM