Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Зачем закрывать подключения?

#mysqli #php #mysql


Здравствуйте.
Разбираюсь с mysqli, в частности с этим примером:


И напросился вопрос: зачем нужно очищать результат набора, mysqli_free_result($result);,
закрывать подключения mysqli_close($link); и чем плохо, если этого не делать?    


Ответы

Ответ 1



Непонятно, откуда предыдущий оратор вообразил какой-то "таймаут". Соединение с БД закрывать не надо - оно закроется само по окончании работы скрипта. Сразу. БЕЗ каких-либо "таймаутов". Резалтсет в большинстве случаев очищать не нужно, поскольку как только закончит выполнение вызвавшая его функция, он так же обнулится.

Ответ 2



Незакрытые соединения прибьются по таймауту. Но если таких подключений будет очень много, система будет тормозить очень сильно, так как всё это потребляемые ресурсы. Поэтому "уходя, гасите свет". mysql_options php.su и оф. доки dev.mysql.com/doc/mysql-options Рекомендую для общего развития установить VirtualBox с *nix системой, установить веб-сервер+mysql и поиграться с настройками, чтобы наглядно увидеть, что и как работает. mysqli_free_result - очищает используемый блок памяти. Если простыми словами то - при выполнения кода, к примеру запрос съел 100мб памяти и не была применена команда mysqli_free_result то если дальше по коду есть ещё запросы то они будут ещё дожирать память в дополнение к уже используемой. А если выполним mysqli_free_result то память занятая запросом очистится и мы сможем повторно её использовать в этом же коде. Если у Вас в выполняемом коде один запрос, то mysqli_free_result необязателен, так как при завершении выполнении кода память всё равно очистится, но если по коду будет множество запросов то лучше очищать используемую память. Пример 1: php-код 1 sql-запрос # использовал 10мб памяти php-код 2 sql-запрос # использовал 5мб памяти В итоге получается что для выполнения кода потребовалось 15мб памяти, так как используемую память мы не очищали и она содержала первый запрос. Пример 2: php-код 1 sql-запрос # использовал 10мб памяти mysqli_free_result (очищает уже задействованные 10мб памяти в которые можно записать последующие запросы) php-код 2 sql-запрос # использовал 5мб памяти Для выполнения кода потребовалось 10мб памяти, так как мы очистили память от первого запроса и записали в неё второй.

Комментариев нет:

Отправить комментарий