Current Path : /var/www/html/clients/amz.e-nk.ru/bitrix/modules/perfmon/admin/ |
Current File : /var/www/html/clients/amz.e-nk.ru/bitrix/modules/perfmon/admin/perfmon_explain.php |
<? define("ADMIN_MODULE_NAME", "perfmon"); define("PERFMON_STOP", true); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/include.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/perfmon/prolog.php"); IncludeModuleLangFile(__FILE__); $RIGHT = $APPLICATION->GetGroupRight("perfmon"); if($RIGHT=="D") $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); $APPLICATION->SetTitle(GetMessage("PERFMON_EXPLAIN_TITLE")); $ID = IntVal($ID); $sTableID = "tbl_perfmon_explain"; $lAdmin = new CAdminList($sTableID); if($DBType == "mysql") { $arHeader = array( array( "id" => "select_type", "content" => GetMessage("PERFMON_EXPLAIN_F_SELECT_TYPE"), "align" => "left", "default" => true, ), array( "id" => "table", "content" => GetMessage("PERFMON_EXPLAIN_F_TABLE"), "align" => "left", "default" => true, ), array( "id" => "type", "content" => GetMessage("PERFMON_EXPLAIN_F_TYPE"), "align" => "left", "default" => true, ), array( "id" => "possible_keys", "content" => GetMessage("PERFMON_EXPLAIN_F_POSSIBLE_KEYS"), "align" => "left", "default" => true, ), array( "id" => "key", "content" => GetMessage("PERFMON_EXPLAIN_F_KEY"), "align" => "left", "default" => true, ), array( "id" => "key_len", "content" => GetMessage("PERFMON_EXPLAIN_F_KEY_LEN"), "align" => "right", "default" => true, ), array( "id" => "ref", "content" => GetMessage("PERFMON_EXPLAIN_F_REF"), "align" => "left", "default" => true, ), array( "id" => "rows", "content" => GetMessage("PERFMON_EXPLAIN_F_ROWS"), "align" => "right", "default" => true, ), array( "id" => "Extra", "content" => GetMessage("PERFMON_EXPLAIN_F_EXTRA"), "align" => "left", "default" => true, ), ); } elseif($DBType == "oracle") { $arHeader = array( array( "id" => "OPERATION", "content" => GetMessage("PERFMON_EXPLAIN_F_OPERATION"), "align" => "left", "default" => true, ), array( "id" => "OBJECT_NAME", "content" => GetMessage("PERFMON_EXPLAIN_F_OBJECT_NAME"), "align" => "left", "default" => true, ), array( "id" => "OBJECT_TYPE", "content" => GetMessage("PERFMON_EXPLAIN_F_OBJECT_TYPE"), "align" => "left", "default" => true, ), array( "id" => "OPTIONS", "content" => GetMessage("PERFMON_EXPLAIN_F_EXTRA"), "align" => "left", "default" => true, ), /* array( "id" => "ACCESS_PREDICATES", "content" => GetMessage("PERFMON_EXPLAIN_F_EXTRA"), "align" => "left", "default" => true, ),*/ /* array( "id" => "FILTER_PREDICATES", "content" => GetMessage("PERFMON_EXPLAIN_F_EXTRA"), "align" => "left", "default" => true, ),*/ array( "id" => "CARDINALITY", "content" => GetMessage("PERFMON_EXPLAIN_F_ROWS"), "align" => "right", "default" => true, ), array( "id" => "COST", "content" => GetMessage("PERFMON_EXPLAIN_F_COST"), "align" => "right", "default" => true, ), ); } else { $arHeader = array( ); } $lAdmin->AddHeaders($arHeader); $arPlan = false; $cData = new CPerfomanceSQL; $rsSQL = $cData->GetList(array("ID", "SQL_TEXT"), array("=ID" => $ID), array(), false); $arSQL = $rsSQL->Fetch(); if($arSQL && preg_match("#^\s*SELECT\s+#i", $arSQL["SQL_TEXT"])) { if($DBType == "mysql") { $rsData = $DB->Query("explain ".$arSQL["SQL_TEXT"]); } elseif($DBType == "oracle") { $rsData = $DB->Query("explain plan for ".$arSQL["SQL_TEXT"]); if($rsData) { $rsData = $DB->Query("select * from plan_table order by ID"); $arPlan = $rsData->Fetch(); } } elseif($DBType == "mssql") { $rsData = $DB->Query("SET SHOWPLAN_ALL ON;"); $rsData = $DB->Query($arSQL["SQL_TEXT"]); $rsData = $DB->Query("SET SHOWPLAN_ALL OFF;"); } else { $rsData = false; } } else { $rsData = false; } if($rsData) { $SQL_TEXT = CPerfomanceSQL::Format($arSQL["SQL_TEXT"]); $lAdmin->BeginPrologContent(); if(class_exists("geshi")) { $obGeSHi = new GeSHi($SQL_TEXT, 'sql'); echo $obGeSHi->parse_code(); } else { echo str_replace( array(" ", "\n"), array(" ", "<br>"), htmlspecialchars($SQL_TEXT) ); } if($arPlan["OPTIMIZER"]) { echo "<p>".GetMessage("PERFMON_EXPLAIN_F_OPTIMIZER").": ".$arPlan["OPTIMIZER"]."</p>"; echo "<p>".GetMessage("PERFMON_EXPLAIN_F_COST").": ".$arPlan["POSITION"]."</p>"; } $lAdmin->EndPrologContent(); } else { $rsData = new CDBResult; $rsData->InitFromArray(array()); $lAdmin->BeginPrologContent(); $message = new CAdminMessage(array("MESSAGE"=>GetMessage("PERFMON_EXPLAIN_SQL_ERROR"), "TYPE"=>"ERROR")); echo $message->Show(); $lAdmin->EndPrologContent(); } $Comment = ""; $rsData = new CAdminResult($rsData, $sTableID); $rsData->NavStart(); while($arRes = $rsData->NavNext(true, "f_")) { if(array_key_exists("DEPTH", $arRes)) $arRes["OPERATION"] = str_repeat(" ", $arRes["DEPTH"]).$arRes["OPERATION"]; if(array_key_exists("select_type", $arRes)) $arRes["select_type"] = $arRes["id"]." ".$arRes["select_type"]; $row =& $lAdmin->AddRow($f_ID, $arRes); if(array_key_exists("Comment", $arRes)) $Comment .= $arRes["Comment"]."\n"; } if($Comment) { $lAdmin->BeginEpilogContent(); $message = new CAdminMessage(array("MESSAGE"=>$Comment, "TYPE"=>"OK")); echo $message->Show(); $lAdmin->EndEpilogContent(); } $lAdmin->AddFooter(array()); $lAdmin->CheckListMode(); /*************************************************************************** HTML form ****************************************************************************/ require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_popup_admin.php"); $lAdmin->DisplayList(); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_popup_admin.php"); ?>