case "delete_index": if ($isAdmin) { foreach ($arID as $ID) { $rs = CPerfomanceIndexComplete::GetList(array("=ID" => $ID)); while ($ar = $rs->Fetch()) { if ($DB->Query("ALTER TABLE " . $ar["TABLE_NAME"] . " DROP INDEX " . $ar["INDEX_NAME"])) { CPerfomanceIndexComplete::Delete($ID); } } } } break; } } $lAdmin->AddHeaders(array(array("id" => "BANNED", "content" => GetMessage("PERFMON_ICOMPLETE_STATUS"), "align" => "center", "default" => true), array("id" => "TABLE_NAME", "content" => GetMessage("PERFMON_ICOMPLETE_TABLE_NAME"), "default" => true), array("id" => "COLUMN_NAMES", "content" => GetMessage("PERFMON_ICOMPLETE_COLUMN_NAMES"), "default" => true), array("id" => "INDEX_NAME", "content" => GetMessage("PERFMON_ICOMPLETE_INDEX_NAME"), "default" => true))); $cData = new CPerfomanceIndexComplete(); $rsData = $cData->GetList(); $rsData = new CAdminResult($rsData, $sTableID); $rsData->NavStart(); $lAdmin->NavText($rsData->GetNavPrint(GetMessage("PERFMON_ICOMPLETE_PAGE"))); while ($arRes = $rsData->NavNext(true, "f_")) { $row = $lAdmin->AddRow($f_NAME, $arRes); $arActions = array(); $row->AddViewField("COLUMN_NAMES", str_replace(",", "<br>", $f_COLUMN_NAMES)); if ($f_BANNED == "N") { $row->AddViewField("BANNED", '<span class="adm-lamp adm-lamp-in-list adm-lamp-green" title="' . htmlspecialcharsbx(GetMessage("PERFMON_ICOMPLETE_GREEN_ALT")) . '"></span>'); if ($isAdmin) { $arActions[] = array("TEXT" => GetMessage("PERFMON_ICOMPLETE_DELETE_INDEX"), "ACTION" => $lAdmin->ActionDoGroup($f_ID, 'delete_index')); } } elseif ($f_BANNED == "Y") { $row->AddViewField("BANNED", '<span class="adm-lamp adm-lamp-in-list adm-lamp-red" title="' . htmlspecialcharsbx(GetMessage("PERFMON_ICOMPLETE_RED_ALT")) . '"></span>');
//Check if it is possible to find missed keys on joined tables foreach ($q->table_joins($arRes["table"]) as $alias => $join_columns) { $missed_keys = $q->suggest_index($alias); if ($missed_keys) { $arMissedKeys = array_merge($arMissedKeys, $missed_keys); } } } } } } } if (!empty($arMissedKeys)) { foreach (array_unique($arMissedKeys) as $suggest) { list($alias, $table, $columns) = explode(":", $suggest); if (!CPerfQueryStat::IsBanned($table, $columns) && !CPerfomanceIndexComplete::IsBanned($table, $columns)) { if (CPerfQueryStat::GatherExpressStat($table, $columns, $q) && !CPerfQueryStat::IsSelective($table, $columns, $q)) { CPerfQueryStat::Ban($table, $columns); } else { CPerfomanceIndexSuggest::Add(array("TABLE_NAME" => $table, "TABLE_ALIAS" => $alias, "COLUMN_NAMES" => $columns, "SQL_TEXT" => $arSQL["SQL_TEXT"], "SQL_MD5" => $sql_md5, "SQL_COUNT" => 0, "SQL_TIME" => 0, "SQL_EXPLAIN" => serialize($arExplain))); } } } CPerfomanceIndexSuggest::UpdateStat($sql_md5, 1, $arSQL["QUERY_TIME"], $arSQL["ID"]); } } } else { CPerfomanceIndexSuggest::UpdateStat($sql_md5, 1, $arSQL["QUERY_TIME"], $arSQL["ID"]); } $last_id = $arSQL["ID"]; }
if (is_object($res)) { CPerfomanceIndexComplete::Add(array("TABLE_NAME" => $arSuggest["TABLE_NAME"], "COLUMN_NAMES" => $arSuggest["COLUMN_NAMES"], "INDEX_NAME" => $_REQUEST["index_name"], "BANNED" => "N")); LocalRedirect("/bitrix/admin/perfmon_index_detail.php?ID=" . $ID . "&lang=" . LANGUAGE_ID . "&" . $tabControl->ActiveTabParam()); } else { $strError = $DB->GetErrorMessage(); } } elseif (isset($_REQUEST["drop_index"]) && isset($_REQUEST["ddl"])) { $res = $DB->Query($_REQUEST["ddl"], true); if (is_object($res)) { CPerfomanceIndexComplete::DeleteByTableName($arSuggest["TABLE_NAME"], $arSuggest["COLUMN_NAMES"]); LocalRedirect("/bitrix/admin/perfmon_index_detail.php?ID=" . $ID . "&lang=" . LANGUAGE_ID . "&" . $tabControl->ActiveTabParam()); } else { $strError = $DB->GetErrorMessage(); } } elseif (isset($_REQUEST["ban_index"])) { CPerfomanceIndexComplete::Add(array("TABLE_NAME" => $arSuggest["TABLE_NAME"], "COLUMN_NAMES" => $arSuggest["COLUMN_NAMES"], "INDEX_NAME" => false, "BANNED" => "Y")); LocalRedirect("/bitrix/admin/perfmon_index_list.php?lang=" . LANGUAGE_ID); } } $APPLICATION->SetTitle(GetMessage("PERFMON_IDETAIL_TABLE_TITLE")); require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; $aMenu = array(array("TEXT" => GetMessage("PERFMON_IDETAIL_MENU_LIST"), "TITLE" => GetMessage("PERFMON_IDETAIL_MENU_LIST_TITLE"), "LINK" => "perfmon_index_list.php?lang=" . LANGUAGE_ID, "ICON" => "btn_list")); $context = new CAdminContextMenu($aMenu); $context->Show(); if ($strError) { CAdminMessage::ShowMessage(array("MESSAGE" => GetMessage("admin_lib_error"), "DETAILS" => $strError, "TYPE" => "ERROR")); } ?> <form method="POST" action="<?php echo $APPLICATION->GetCurPage(); ?>
if ($missed_keys) $arMissedKeys = array_merge($arMissedKeys, $missed_keys); } } } } } } if (!empty($arMissedKeys)) { foreach (array_unique($arMissedKeys) as $suggest) { list($alias, $table, $columns) = explode(":", $suggest); if ( !CPerfQueryStat::IsBanned($table, $columns) && !CPerfomanceIndexComplete::IsBanned($table, $columns) ) { if ( CPerfQueryStat::GatherExpressStat($table, $columns, $q) && !CPerfQueryStat::IsSelective($table, $columns, $q) ) CPerfQueryStat::Ban($table, $columns); else { CPerfomanceIndexSuggest::Add(array( "TABLE_NAME" => $table, "TABLE_ALIAS" => $alias, "COLUMN_NAMES" => $columns, "SQL_TEXT" => $arSQL["SQL_TEXT"], "SQL_MD5" => $sql_md5,