powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP 7.0.29] Mysql memory leaks
13 сообщений из 13, страница 1 из 1
[PHP 7.0.29] Mysql memory leaks
    #39721327
spider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используется Yii 1.20, проблема в утечках памяти. Код довольно простой

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
   public function taskCorrectMainTables()
    {
        $db = \Yii::app()->dbProductStorage;

        $regionPropertyCount = $db->createCommand('SELECT COUNT(*) FROM region_property_count')->queryScalar();

        $offset = 0;
        $limit = 4096;

        $i = 0;

        while ($offset < $regionPropertyCount) {
            $a = $db->createCommand('SELECT region_id, property_count FROM region_property_count LIMIT ' . $offset . ', ' . $limit)->queryAll();

            foreach ($a as $b) {
                $regionId = $b['region_id'];
                $propertyCount = $b['property_count'];
                $db->createCommand('UPDATE region_en_bljfkhio SET property_count = ' . $propertyCount . ' WHERE region_id = ' . $regionId . ' LIMIT 1')->execute();
                $db->createCommand('UPDATE region_ru_bljfkhio SET property_count = ' . $propertyCount . ' WHERE region_id = ' . $regionId . ' LIMIT 1')->execute();
                $db->createCommand('UPDATE uk_bljfkhio SET property_count = ' . $propertyCount . ' WHERE region_id = ' . $regionId . ' LIMIT 1')->execute();
            }

            $c1 = $db->createCommand('SELECT COUNT(*) FROM `region_en_bljfkhio` WHERE property_count = 0')->queryScalar();

            $m = memory_get_usage();
            $m = $m / 1024 / 1024;

            echo($i . ' - ' . $c1 . ' - ' . $m .  "\n");
            $i++;

            $offset += $limit;

        }



Результат работы:

100 - 543978 - 1025.1407012939
101 - 543978 - 1034.8581771851
102 - 543978 - 1044.6429214478
103 - 543978 - 1054.2836227417
104 - 543978 - 1063.6922073364
105 - 543978 - 1073.1975021362
106 - 543978 - 1082.4176712036
107 - 543978 - 1091.5915756226
108 - 543978 - 1101.0670852661
109 - 543978 - 1109.7466659546
110 - 543978 - 1119.1266098022
111 - 543978 - 1128.387840271
112 - 543978 - 1137.9474105835
113 - 543978 - 1146.7601852417
114 - 543978 - 1156.1394577026
115 - 543978 - 1165.2169952393


Как видим потребление памяти постоянно растет. Можно перейти на mysqli, но это не особенно решает проблему.

Записей ~500000

Может кто-то сталкивался с подобной проблемой? Или может порекомендовать что-то?
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721363
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spider13,

Зачем все эти тысячи апдейтов в цикле?
При беглом просмотре кода есть ощущение, что задача решается парой апдейтов.
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721364
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spider13,

И, кстати, Limit без order by - рулетка. Нет никакой гарантии, что будут выданы именно те записи, которые нужно.
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721394
spider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftspider13,

Зачем все эти тысячи апдейтов в цикле?
При беглом просмотре кода есть ощущение, что задача решается парой апдейтов.

Не парой, а тремя запросами. Но таймаут довольно маленький и след запрос просто не успевает выполнятся.


miksoftspider13,

И, кстати, Limit без order by - рулетка. Нет никакой гарантии, что будут выданы именно те записи, которые нужно.

С данной таблицей работает только один скрипт, поэтому никаких проблем с ним не будет для MyISAM
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721458
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
превое что бросается в глаза - зачем делать createCommand в цикле? Сделай один раз перед циклом и используй.
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721459
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gc collect cycle надо вызвать перед проверкой рахода памяти, он может не сразу мусор подчищать, чему тут удивляться...
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721523
spider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettgc collect cycle надо вызвать перед проверкой рахода памяти, он может не сразу мусор подчищать, чему тут удивляться...

Пробовал, не помогает.

Hettпревое что бросается в глаза - зачем делать createCommand в цикле? Сделай один раз перед циклом и используй.

Пробовал, тоже разницы особо никакой.
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721528
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давайте код, как стало выглядеть
не исключено что и в юии проблемы, или в какой-то либе, которую он использует
дебаг/трейс лог отключен?
у yii логгер может логи собирать и флашить раз в 1000 сообщений, может просто у вас еще флаша не произошло.
Вообще на скольки итеррациях тестировали?
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721576
spider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettдавайте код, как стало выглядеть
не исключено что и в юии проблемы, или в какой-то либе, которую он использует
дебаг/трейс лог отключен?
у yii логгер может логи собирать и флашить раз в 1000 сообщений, может просто у вас еще флаша не произошло.
Вообще на скольки итеррациях тестировали?

Весь код собственно в первом посте.
Дебаг и трейс включен, и возможно в эту сторону нужно компать, Вы правы.
Довольно таки много раз пробовал, результат один и тот же.
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721754
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spider13Но таймаут довольно маленький и след запрос просто не успевает выполнятся.Какой именно таймаут?
Единые запросы будут выполняться ощутимо быстрее, чем показанный кусок кода.
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721942
Jude
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spider13,

попробуйте другие варианты :

1) апдейт 1 запросом.
2) уменьшать количество ссылок, делая
Код: php
1.
$query = null;

или др решения, из области проверки подсчета ссылок
3) по поводу сборки мусора = да. но не мгновенно. это нужно учитывать :)
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721958
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор$query = null;
глупости
...
Рейтинг: 0 / 0
[PHP 7.0.29] Mysql memory leaks
    #39721994
Jude
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettавтор$query = null;
глупости

подобные рекоммендации встречал - было когда , типа , битых ссылок получалось - объект не очищался без этого.

про конкретный случай не уверен.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP 7.0.29] Mysql memory leaks
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]