Чи критично важливо закрити ефективність підключень mysql, або воно автоматично закривається після запуску php-файлу?
Чи критично важливо закрити ефективність підключень mysql, або воно автоматично закривається після запуску php-файлу?
Відповіді:
З документації :
Примітка: Посилання на сервер буде закрито, як тільки закінчується виконання сценарію, якщо воно не закривається раніше, явно викликавши mysql_close ().
Якщо ваш скрипт має достатньо обробки після отримання результату та отримав повний набір результатів, вам обов'язково слід закрити з'єднання. Якщо ви цього не зробите, існує шанс, що сервер MySQL досягне свого обмеження підключення, коли веб-сервер інтенсивно використовується. Якщо ви не можете закрити підключення MySQL до кінця сценарію, це чистіше, хоча не потрібно робити це явно.
Я не впевнений, як fastcgi впливає на речі. Одна сторінка стверджує, що збірка PHP, що підтримує fastcgi, створить стійкі з'єднання навіть для mysql_connect. Це суперечить документації, оскільки зв’язок закривається, коли закінчується процес, а не сценарій. Замість тестування я рекомендую використовувати mysql_close (). Насправді, я рекомендую використовувати PDO , якщо він доступний.
"The link to the server will be closed as soon as the execution of the script ends."Коли користувач закриває сторінку раніше, це не має значення для сервера PHP. Він запускає скрипт як завжди і кінцевий сценарій як завжди. Тільки користувач не побачить результат.
Це важливо? Не так багато
Чи вважається це гарною практикою для наслідування? Так.
Я не розумію, чому ви не хотіли б закрити його.
mysql_closeговорить "Використання mysql_close (), як правило, не потрібна, оскільки непостійні відкриті посилання автоматично закриваються в кінці виконання сценарію." Я б не вважав поганою практикою не переривати зв’язок.
Використовуючи щось на зразок cgi, абсолютно непотрібно закривати ваші з'єднання mysql, оскільки вони автоматично закриваються в кінці виконання сценарію. Коли ви використовуєте стійкі технології, такі як mod_perl та інші, які підтримують ваші зв’язки між запитами, важливо відстежувати зв’язки, глобальні змінні тощо.
В основному, для постійних даних приберіть за собою. Щодо тривіальних непостійних даних, це все зникне, коли запит все одно закінчиться. У будь-якому випадку, найкраща практика - це завжди закривати свої зв’язки.
Закривається, як тільки сценарій завершує виконання. Якщо ви не відкрили постійне з’єднання. В ідеалі ви повинні звільнити ресурс (зв’язок тут), як тільки закінчите з ним. Хіба що існує велика ймовірність того, що вона вам дуже скоро знадобиться під час страти.
Пул з'єднань або використання постійних з'єднань (якщо це те, що ви мали на увазі) - це гарна ідея, якщо ви стоїте за одним сервером баз даних. Однак якщо серверів більше, і ви балансуєте навантаження, це може зашкодити розподілу роботи. Зазвичай деякі клієнти виконують важкі запити, а інші - легші. Отже, якщо одне і те ж підключення використовується протягом n over, деякі сервери можуть зазнати великого навантаження, тоді як інші будуть недостатньо використані. Розгляньте можливість використання менших ttls та змінного розміру пулу з'єднань.
Більшість систем управління вмістом закривають з'єднання MySQL в кінці запиту, що насправді безглуздо, оскільки PHP все одно зробить це.
Однак, якщо у вас є сценарій, де зв’язок більше не потрібен, скажіть до середини сценарію, і тоді відбуваються інші важкі дії, тоді непогано закрити зв’язок. Це звільнить деякі ресурси.
Зараз багато говорили про переваги закриття з’єднання, але майже нічого не говорили про переваги його не закриття. По суті, якщо ви не закриєте з'єднання в кінці сценарію, ви дійсно економите деякі ресурси. Уявіть, що веб-програма (або будь-яка інша) отримує 100 переглядів сторінки в секунду. Отже, щосекунди вам потрібно буде викликати mysqli_close100 разів - це означає, що щосекунди у вас буде 100 непотрібних зворотних поїздок на сервер бази даних, щоб закрити відкриті з'єднання. З точки зору продуктивності, це лише накладні витрати, оскільки PHP перевірить наявність відкритих з'єднань, коли скрипт все одно закінчить, і закриє ці з'єднання, і це може бути саме тому, що все відбувається так швидко, що PHP не бачить, що закрив ці зв’язки і спробує закрити їх знову.
Примітка: відповідь вище передбачає, що ви не використовуєте постійні з'єднання (постійні з'єднання не використовуються в жодній з основних систем управління вмістом).