У меня есть работа по миграции на сайты wordpress, хотя я не думаю, что wordpress имеет какое-либо отношение к моей проблеме. Итак, я получаю набор данных из таблицы (идентификатор, значение), которая сериализуется.
Я хочу поместить сериализованные данные в массивы в соответствии с функцией. Алгоритм все делает нормально для первых 86 записей.
Если я запускаю алгоритм всего на 86 записях, я мгновенно получаю все нужные данные. Но когда я запускаю его 87 или более раз, он просто загружается. Неважно, сколько времени будет длиться максимальное время выполнения, по-видимому, оно все равно достигнет его.
Я проверил 87-ю запись, есть ли с ней что-то странное, но ничего не вижу. Есть идеи, что могло вызвать это?
Вот код:
global $wpdb;
$houses_built_years = $wpdb->get_results('SELECT post_id, meta_value FROM bp100_postmeta WHERE meta_key = "epites_eve"');
foreach ($houses_built_years as $house_built_years) {
if ($house_built_years->meta_value) {
$years = unserialize($house_built_years->meta_value);
} else {
continue;
}
$build = array(array());
$series = 0; $year = 0;
while (count($years)) {
if ($build[$series][$year] && (min($years) - $build[$series][$year] == 1)) {
$year++;
$build[$series][$year] = min($years);
unset($years[array_search(min($years), $years)]);
} else if ($build[$series][$year]) {
$year = 0;
$series++;
$build[$series][$year] = min($years);
unset($years[array_search(min($years), $years)]);
} else {
$build[$series][$year] = min($years);
unset($years[array_search(min($years), $years)]);
}
}
$repeater = array();
foreach ($build as $series) {
if (count($series) > 1) {
$repeater[] = $series[0] . ' - ' . $series[count($series) - 1];
} else {
$repeater[] = $series[0];
}
}
}
Вот пример записи (нарушение алгоритма при id = 30517):
30279 1201 epites_eve a:1:{i:0;s:4:"1898";}
30338 1202 epites_eve a:1:{i:0;s:4:"1891";}
30397 1203 epites_eve a:1:{i:0;s:4:"1894";}
30517 1205 epites_eve a:1:{i:0;s:4:"1897";}
30577 1206 epites_eve a:1:{i:0;s:4:"1891";}
Да, я пробовал. Это не относится к строке, а скорее к количеству строк.
Это тяжело? вы пробовали увеличивать свой memory_limit
?
Проверьте свои журналы ошибок
В журналах ошибок я вижу только ошибки max_execution_time. memory_limit = 1000M установлен на атм, так что это не должно быть проблемой. Также максимальное время выполнения не должно возрасти, потому что с 86 записями это мгновенно, а с 87 оно достигает предела, даже если оно похоже на 50000 секунд.
Вы проверяли статистику памяти во время бега? Если ваш объект действительно большой, он может заполнить память и заставить систему использовать подкачку (запись на диск) и все замедлить
Его память / время после каждой итерации [память] => 0,459228515625 [секунды] => 0,0035550594329834
Сделайте этот тест: установите htop
, чтобы проверить статистику памяти в реальном времени. Затем запустите свой скрипт и проверьте значения htop с итераций от 0 до 87, чтобы увидеть, есть ли пик.
Не могли бы вы попробовать запустить свой сценарий на итерации 86? Чтобы узнать, связана ли проблема со строкой или с количеством обработанных строк? Кроме того, не могли бы вы проверить память сервера во время запуска?