我得到了從我的amazon RDS實例運行的slowquery日誌,我可以使用「sloquery.log」格式的自定義腳本來檢索它們。Mysql - 緩慢的查詢輸出
我的問題很簡單,是否有任何格式化程序可以使報告更「可讀」。
電流輸出是這樣的:
感謝
我得到了從我的amazon RDS實例運行的slowquery日誌,我可以使用「sloquery.log」格式的自定義腳本來檢索它們。Mysql - 緩慢的查詢輸出
我的問題很簡單,是否有任何格式化程序可以使報告更「可讀」。
電流輸出是這樣的:
感謝
是,mysqldumpslow
是所有標準的MySQL發行版中提供。
我敲了這粗糙的PHP腳本來提取日誌到CSV格式,這意味着我可以很容易地用電子表格操縱它。
你將不得不改變輸入和輸出位置(我只是將日誌拖到我的本地主機,然後在那裏運行腳本)。
<?php
set_time_limit(240);
$handle = fopen('C:\\Users\\kwalker\\Downloads\\mysql-slow.log', "rb");
$fp = fopen('file.csv', 'w');
$inline = '';
$inline = fgets($handle, 8192);
$OutLine = array();
$OutLine['Time'] = 'Time';
$OutLine['Timestamp'] = 'Timestamp';
$OutLine['User'] = 'User';
$OutLine['Query_time'] = 'Query_time';
$OutLine['Lock_time'] = 'Lock_time';
$OutLine['Rows_sent'] = 'Rows_sent';
$OutLine['Rows_examined'] = 'Rows_examined';
$OutLine['Database'] = 'Database';
$OutLine['SqlOut'] = 'SqlOut';
WriteOut($fp, $OutLine);
$OutLine = array();
$OutLine['Time'] = '';
$OutLine['Timestamp'] = '';
$OutLine['User'] = '';
$OutLine['Query_time'] = '';
$OutLine['Lock_time'] = '';
$OutLine['Rows_sent'] = '';
$OutLine['Rows_examined'] = '';
$OutLine['Database'] = '';
$OutLine['SqlOut'] = '';
$PossibleUse = true;
$TimeTriggeredOut = true;
$CurrentTime = '';
$CurrentDatabase = '';
while (!feof($handle))
{
switch (true)
{
case substr($inline, 0, 8) == '# Time: ' :
WriteOut($fp, $OutLine);
$PossibleUse = true;
$Timings = explode(': ', $inline);
$CurrentTime = $Timings[1];
$OutLine = array();
$OutLine['Time'] = $CurrentTime;
$OutLine['Timestamp'] = '';
$OutLine['User'] = '';
$OutLine['Query_time'] = '';
$OutLine['Lock_time'] = '';
$OutLine['Rows_sent'] = '';
$OutLine['Rows_examined'] = '';
$OutLine['Database'] = $CurrentDatabase;
$OutLine['SqlOut'] = '';
$TimeTriggeredOut = true;
break;
case substr($inline, 0, 6) == '# User' :
if (!$TimeTriggeredOut)
{
WriteOut($fp, $OutLine);
$PossibleUse = true;
$OutLine = array();
$OutLine['Time'] = $CurrentTime;
$OutLine['Timestamp'] = '';
$OutLine['User'] = '';
$OutLine['Query_time'] = '';
$OutLine['Lock_time'] = '';
$OutLine['Rows_sent'] = '';
$OutLine['Rows_examined'] = '';
$OutLine['Database'] = $CurrentDatabase;
$OutLine['SqlOut'] = '';
}
$OutLine['User'] = $inline;
$TimeTriggeredOut = false;
break;
case substr($inline, 0, 12) == '# Query_time' :
$Timings = explode(' ', $inline);
//print_r($Timings);
$OutLine['Query_time'] = $Timings[2];
$OutLine['Lock_time'] = $Timings[5];
$OutLine['Rows_sent'] = $Timings[7];
$OutLine['Rows_examined'] = $Timings[10];
$PossibleUse = true;
break;
case substr($inline, 0, 14) == 'SET timestamp=' :
$Timings = explode('=', $inline);
$OutLine['Timestamp'] = $Timings[1];
$PossibleUse = true;
break;
case $PossibleUse AND substr($inline, 0, 4) == 'use ' :
$Timings = explode(' ', $inline);
$CurrentDatabase = $Timings[1];
$OutLine['Database'] = $CurrentDatabase;
$PossibleUse = false;
break;
default;
$OutLine['SqlOut'] .= $inline;
}
$inline = fgets($handle, 8192);
}
fclose($fp);
fclose($handle);
function WriteOut($fp, $OutLine)
{
foreach($OutLine as &$aOutLine)
{
$aOutLine = str_replace("\n", " ", $aOutLine);
$aOutLine = str_replace("\r", " ", $aOutLine);
$aOutLine = str_replace("\t", " ", $aOutLine);
}
fputcsv($fp, $OutLine);
}
?>
謝謝!沒有關於這個。 – RelevantUsername