Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Когда нужно отключать базу данных?
 
 автор: Владимир55   (01.02.2009 в 23:00)   письмо автору
 
 

Если в скрипте предусмотрен обмен информацией с базой данных, то выполняется mysql_connect для соединения с ней.

При открытии нового рнр-файла соединение mysql_connect выполняется ещё раз.

А когда выполняется mysql_close? И зачем? И что случится, если базу не отключить?

  Ответить  
 
 автор: BinLaden   (01.02.2009 в 23:02)   письмо автору
 
   для: Владимир55   (01.02.2009 в 23:00)
 

mysql_close() имеет смысл использовать, если после всех запросов к базе данных нужно выполнить еще какой-то ресурсоёмкий код. А так соединение закрывается после завершения скрипта само.

  Ответить  
 
 автор: Valick   (01.02.2009 в 23:04)   письмо автору
 
   для: Владимир55   (01.02.2009 в 23:00)
 

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

  Ответить  
 
 автор: Владимир55   (01.02.2009 в 23:07)   письмо автору
 
   для: Valick   (01.02.2009 в 23:04)
 

Что, соединение с базой само по себе, даже если в базу ничего не пишется и из неё ничего не считывается, потребляет ресурсы?

  Ответить  
 
 автор: BinLaden   (01.02.2009 в 23:08)   письмо автору
 
   для: Владимир55   (01.02.2009 в 23:07)
 

Есть некий лимит на одновременное количество установленных соединений к базе данных.

  Ответить  
 
 автор: Владимир55   (01.02.2009 в 23:14)   письмо автору
 
   для: BinLaden   (01.02.2009 в 23:08)
 

Вот как?

То есть, число одновременно присутствующих посетителей сайта не может привысить некоего количества допустимых соединений с базой? Каково же это число?

  Ответить  
 
 автор: BinLaden   (01.02.2009 в 23:17)   письмо автору
 
   для: Владимир55   (01.02.2009 в 23:14)
 

Зависит от настроек Вашего MySQL-сервера.

  Ответить  
 
 автор: Trianon   (01.02.2009 в 23:25)   письмо автору
 
   для: Владимир55   (01.02.2009 в 23:14)
 

одновременно присутствующие посетители и одновременно обрабатываемые запросы от них - это всё же несколько разные вещи.

  Ответить  
 
 автор: Valick   (01.02.2009 в 23:08)   письмо автору
 
   для: Владимир55   (01.02.2009 в 23:07)
 

Да

  Ответить  
 
 автор: cheops   (01.02.2009 в 23:42)   письмо автору
 
   для: Владимир55   (01.02.2009 в 23:07)
 

>Что, соединение с базой само по себе, даже если в базу ничего не пишется и из неё ничего не
>считывается, потребляет ресурсы?
Да, конечно, в памяти висит процесс mysqld со статусом SLEEP и никакой другой скрипт его использовать не может, пока вы его не освободите или скрипт не завершиться естественным путем. Если у вас перед передачей гиганского файла пользователю выполняется SQL-запрос и вы не освобождаете соединение, то пользователь с медленным интернетом может продержать занятым соединеие несколько часов. Если таких пользователей много - начинает исчерпываться память, идет свопировоние и работа сервера замедляется.

  Ответить  
 
 автор: а-я   (02.02.2009 в 00:22)   письмо автору
 
   для: cheops   (01.02.2009 в 23:42)
 

>Да, конечно, в памяти висит процесс mysqld со статусом SLEEP и никакой другой скрипт его использовать не может, пока вы его не освободите или скрипт не завершиться естественным путем. Если у вас перед передачей гиганского файла пользователю выполняется SQL-запрос и вы не освобождаете соединение, то пользователь с медленным интернетом может продержать занятым соединеие несколько часов. Если таких пользователей много - начинает исчерпываться память, идет свопировоние и работа сервера замедляется.

А можно подробнее на этом месте?
Я так понял, имеет смысл следить за подобной утечкой памяти,
если php установлен как модуль апача.
И пока пользователь принимает результат работы, висит сам процесс и все ресурсы, которые он требует при работе (соединения, открытые файлы и т.д.)

А если php установлен как php-cgi, php fast-cgi?
То я так понял, php отработал, отдал результат серверу и потомок php умер, освободив всю память.

Или я вообще неправильно понимаю работу на сервере..?

  Ответить  
 
 автор: cheops   (02.02.2009 в 01:54)   письмо автору
 
   для: а-я   (02.02.2009 в 00:22)
 

В данном случае речь не об PHP, а о MySQL - пока вы соединение не закрываете, процесс вас обслуживает, даже если вы им не пользуетесь, а оперативной памяти mysqld может занимать изрядно - несколько десятков мегабайт - пока кто-нибудь 6 часов на диалапе у вас файл тянет - несколько десятков мегабайт могут быть по сути выключены - их сервер конечно спихнет в swap, но не сразу.

  Ответить  
 
 автор: Владимир55   (02.02.2009 в 11:50)   письмо автору
 
   для: cheops   (02.02.2009 в 01:54)
 

nginx решает проблему?

  Ответить  
 
 автор: cheops   (02.02.2009 в 14:19)   письмо автору
 
   для: Владимир55   (02.02.2009 в 11:50)
 

Если вам нужно фиксировать что-то в MySQL - кэшировать файл у вас не получится - тут как раз решает проблему использование mysql_close(). Впрочем проблема достаточно редкая, чтобы заморачиваться на неё в обычных проектах, не связанных с авторизованным доступом к большим файлам.

  Ответить  
 
 автор: а-я   (03.02.2009 в 12:58)   письмо автору
 
   для: cheops   (02.02.2009 в 14:19)
 

>Если вам нужно фиксировать что-то в MySQL - кэшировать файл у вас не получится - тут как раз решает проблему использование mysql_close(). Впрочем проблема достаточно редкая, чтобы заморачиваться на неё в обычных проектах, не связанных с авторизованным доступом к большим файлам.

А как же GPRS?
Некоторые опсосы имеют такую «радость», что грузиться 0,8-1Kb и потом несколько секунд виснут, во время большой нагрузки сети.. я так понимаю и нагрузка сервера, откуда идут данные тож тормозит… или нет?
Я с этим плохо знаком..

И еще..
Есть ли у FreeBSD такие же готовые решения конфигов MySQL как у Linux?
Или они одинаковые? Просто VDS слабый и хотелось бы правильно все
настроить.

И еще о процессах mysql/
Допустим, стоит php-fpm макс потомков 3.
Т.е. одновременно может быть только 3 соединения?
И + 3 соединения с MySQL?
У меня один процесс мускула в 8МБ
Это он еще может наплодить 2 процесса по 8МБ?
Я правильно понял?

  Ответить  
 
 автор: BinLaden   (03.02.2009 в 13:57)   письмо автору
 
   для: а-я   (03.02.2009 в 12:58)
 

> А как же GPRS?
Думаете скорость передачи как-то влияет на скорость генерации страницы? Никак не влияет.

  Ответить  
 
 автор: cheops   (04.02.2009 в 13:14)   письмо автору
 
   для: а-я   (03.02.2009 в 12:58)
 

>А как же GPRS?
>Некоторые опсосы имеют такую «радость», что грузиться 0,8-1Kb и потом несколько секунд
>виснут, во время большой нагрузки сети.. я так понимаю и нагрузка сервера, откуда идут
>данные тож тормозит… или нет?
>Я с этим плохо знаком..
Если соединение не рвется, да тоже тормозиться. Любое медленное соединение - является в этом случае злом.

Дело в том, что соединения с MySQL штука практически не настраиваемая - вы можете настроить максимальное количество соединений для MySQL, но привязаться к конкретному процессу Apache вряд ли получится.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования