Что бы проверить изменилось ли поле документа в БП, который запускается при изменении используйте конструкцию Условие, тип условия PHP, туда вставьте код, приведённый ниже, где PROPERTY_STATUS код вашего поля
Однако если у вас есть доступ к консоли сервера, то есть прекрасная утилита mysqlcheck, которая всё сделает без всяких костылей, вот пример выполнение команды:
Артемий Резников написал: 2. Предложение добавить после выполнения оптимизации последней таблицы такой кодКодCOption::SetOptionInt("main", "LAST_DB_OPTIMIZATION_TIME", $OPT_ID);$OPT_ID - время начала оптимизации последней из таблиц.
Если вы хотите что бы оптимизация проходила регулярно сама, то замените код:
[QUOTE]Andrey Kovalsky написал: BitrixVM 7.3.3Теперь пункт про php 5.6 неочевидно спрятали. Сначала выбираем 1. Manage hosts in the pool - 8. Upgrade php and mysql versions - 1. Rollback php to 7.0 version. Ждем пока откатится. Потом уже появится про php 5.6: 1. Manage hosts in the pool - 8. Upgrade php and mysql versions - 1. Rollback php to 5.6 version[/QUOTE] У меня такого не было.
bitrix-env.sh для установки окружения на php 5.6 [URL=https://drive.google.com/file/d/10EHc621gwS9hDNSsr4DzNjY87W0aSJyf/view?usp=sharing] https://drive.google.com/file/d/10EHc621gwS9hDNSsr4DzNjY87W0aSJyf/view?usp=sharing[/URL]
Данный агент переберёт все таблицы и оптимизирует их, так как агенты будут на кроне время выполнения функции не будет помехой, там это ограничение снимается.
Вот используйте эту функцию, вставьте её в init.php:
Код
function cron_TableOptimizator($TABLE_NAME = false, $OPT_ID = false){
global $DB;
$arLocale = array(
'note' => 'Сообщение',
'status' => 'Статус операции'
);
if(!$OPT_ID&&!$TABLE_NAME){
$arTable = $DB->Query("SEL ECT table_name FR OM information_schema.tables WHERE table_schema = DATABASE() ORDER BY table_name ASC LIMIT 1")->Fetch();
$TABLE_NAME = $arTable['table_name'];
$OPT_ID = time();
}
else
$arTable = $DB->Query("SEL ECT table_name FR OM information_schema.tables WHERE table_schema = DATABASE() AND table_name = '$TABLE_NAME'")->Fetch();
$arLogP = array("SEVERITY" => "SECURITY","AUDIT_TYPE_ID" => "TABLE_OPTIMIZATOR","MODULE_ID" => "main","ITEM_ID" => $TABLE_NAME,);
if($arTable)
{
CEventLog::Add($arLogP+array("DESCRIPTION" => "Начало оптимизации таблицы",));
$rsResult = $DB->Query("optimize table `$TABLE_NAME`");
while($arRow = $rsResult->Fetch()){
CEventLog::Add($arLogP+array("DESCRIPTION" => $arLocale[$arRow['Msg_type']] . ': ' .$arRow['Msg_text'],));
}
$sQuery = "SELECT table_name, table_comment FR OM information_schema.tables
WHERE table_schema = DATABASE() AND table_name > '$TABLE_NAME'
ORDER BY table_name ASC
LIMIT 1";
$arTable = $DB->Query($sQuery)->Fetch();
$NEXT_TABLE_NAME = $arTable?$arTable['table_name']:false;
$DB->Query("ALT ER TABLE `$TABLE_NAME` COMMENT = '$OPT_ID'");
}else{
$sQuery = "SELECT table_name, table_comment FR OM information_schema.tables
WH ERE table_schema = DATABASE() AND table_comment <> '$OPT_ID'
ORDER BY table_name ASC
LIM IT 1";
$arTable = $DB->Query($sQuery)->Fetch();
$NEXT_TABLE_NAME = $arTable?$arTable['table_name']:false;
CEventLog::Add($arLogP+array("DESCRIPTION" => "Ошибка оптимизации, таблица не найдена переход к следующей таблице: $NEXT_TABLE_NAME",));
}
if(!$NEXT_TABLE_NAME)
return false;
return "cron_TableOptimizator('$NEXT_TABLE_NAME', $OPT_ID);";
}
После переведите все агенты на cron и создайте агента с функцией "cron_TableOptimizator();" если не дружите с ними, выполните этот скрипт в командной строке PHP:
Далее ждите, если у вас много больших таблиц, процесс будет долгим, отслеживать вы его можете по журналу событий в админке, с фильтром по событию "TABLE_OPTIMIZATOR":
В поле Объект - имя таблицы, в описании подробности действия.
[B][SIZE=11pt]Обратите внимание[/SIZE][/B] если послать одновременно две команды с одним и тем же PHONE_NUMBER то создастся 2 лида. Соответственно в том случае если ещё нет номера у вас в базе