- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
У меня возник вопрос по функциям подключения БД mysql
есть 2 известным мне способа mysql_connect и mysql_pconnect
Как мне известно mysql_pconnect не закрывает соедиение с БД и висит в процессах. На движке использую mysql_pconnect.
На серверах админы делают ограничение на количество одновременных подключений к БД. (20 подключений).
Вопрос какое из подключений лучше использовать? Если лучше использовать pconnect , то в чем прелесть его использования ?
И что делать с незакрытыми подключениями? (Например пользователь начал загружать сайт и нажал на кнопку отменить. Скрипт выполнялся, но закрыть подключение к БД не успел и подключение висит как открытое).
Последние 2 дня начала лезть следующая ошибка.
Warning: mysql_connect() [function.mysql-connect]: User (имя базы) already has more than ' max _ user _ connections ' active connections in (ну и сам путь к фалу)
И так сам вопросы :
1. Каким образом мне могут делать такие западлянки . (То есть кто то спецом мне ложит сайт, и что для этого он использует)
2. Спасет ли меня постоянная ф-ция mysql_close() по окончания каждого запроса.
3. Пробывал использовать pconnect - результат тот же. Что делать.
Хочу еще добавить , что во время этой ошибке доступа к базе нету никакого, и сбросить конекты не получается !
Всем спасибо за внимание буду очень благодарен за очень дельные советы
И что делать с незакрытыми подключениями? (Например пользователь начал загружать сайт и нажал на кнопку отменить. Скрипт выполнялся, но закрыть подключение к БД не успел и подключение висит как открытое).
http://php.net/register_shutdown_function
Используйте
mysql_connect
Использовать mysql_pconnect на обычных CMS, а тем более на обычном хостинге я лично смысла не вижу.
update: у вас подпись правила нарушает, измените пока модераторы штраф не влепили.
Dreammaker добавил 06.08.2008 в 21:46
Ну и вполне логичный вопрос - посещаемость не очень большая?
Посещаемость около 100 человек в день.
Поэтому и возник такой вопрос. Ограничение на коннект 30 линков.
кстати можно ссылку на правила ?.
Посещаемость около 100 человек в день.
По идее никаких проблем не должно возникать. Гляньте в логах, что там поисковые боты себе думают, может их куча набросилась.
кстати можно ссылку на правила ?.
1. Используйте pconnect (правда смысл в его использовании есть только если PHP подключен как модуль, а не как CGI). pconnect не закрывает открытое соединение (mysql_close ничего не делает в этом случае), но и не открывает новое соединение, а использует уже созданное, т. е. в идеале у Вас будет одно соединение вместо 20
2. Создание нового соединения занимает довольно значительное время (в 10-100 раз больше чем время выполнения простого SQL-запроса), поэтому pconnect позволяет повысить производительность.
3. Уточните как подключен к серверу PHP (CGI/модуль) и как собран Apache (prefork/multithreaded?). Скорее всего pconnect просто не работает у Вашего хостера.
mysql_pconnect нужно тюнинговать иначе max_user_connections забивается уже pconnect`ами только спящими (у которых превышено время ожидания). А это подразумевает и необходимость чистки этих спящих процессов.
В итоге, на подавляющем большинстве движков, имхо, mysql_connect предпочтительнее. Ибо будет больше нагрузка на подключение к базе, но получить превышение кол-ства коннектов вероятность будет меньше.
Если мне кто-то докажет что я не прав, то буду рад получению новых знаний и смены парадигмы :)
К сожалению сейчас ответить не смогу, админа в асе нету. Вот конфиг сервера http://hosting.totel.ru/phpinfo.php . Сам , к сожалению, не знаю чем отличается в PHP (CGI/модуль) и как собран Apache (prefork/multithreaded?)
К сожалению сейчас ответить не смогу, админа в асе нету. Вот конфиг сервера http://hosting.totel.ru/phpinfo.php . Сам , к сожалению, не знаю чем отличается в PHP (CGI/модуль) и как собран Apache (prefork/multithreaded?)
- судя по phpinfo - PHP подключен как модуль к Apache (как собран Apache отсюда не узнаешь), так что есть шансы что pconnect реально может работать
Brim.ru добавил 07.08.2008 в 01:32
mysql_pconnect нужно тюнинговать иначе max_user_connections забивается уже pconnect`ами только спящими (у которых превышено время ожидания). А это подразумевает и необходимость чистки этих спящих процессов
- объясните как pconnect-у удается открыть несколько соединений при условии что данные для доступа к базе одинаковые (хост, логин, пароль)?
Цитата из документации:
Во-первых, при соединении, функция пытается найти уже открытый (постоянный) указатель на тот же сервер с тем же пользователем и паролем. Если он найден, возвращён функцией будет именно он, вместо открытия нового соединения.
Во-вторых, соединение с SQL-сервером не будет закрыто, когда работа скрипта закончится. Вместо этого, оно останется рабочим для будущего использования (mysql_close() также не закрывает постоянные соединения)
- единственная возможная причина накопления соединений при использовании pconnect - это несколько запущенных экземпляров (процессов) web-сервера с подключенным php-модулем, что актуально для Apache собранного как prefork (но в этом случае в возникших проблемах виноват хостер, так как он должен настроить лимит соединений с БД равным настройке MaxClients в Apache)
- да, и конечно хостеру можно посоветовать уменьшить wait_timeout в MySQL, чтобы незакрытые коннекты не зависали слишком на долго :)
- объясните как pconnect-у удается открыть несколько соединений при условии что данные для доступа к базе одинаковые (хост, логин, пароль)?
вот этот момент мне не до конца самому понятен. То есть, 3-4-... скрипта при одновременном запуске будут одновременно использовать одно и тоже соединение?
Или же скрипт посмотрит, что это соединение занято в данный момент и запустит новое постоянное соединение?
Если первый вариант, то что мы получим, например, по mysql_insert_id ? Когда операции вставки будут выполняться одновременно из разных скриптов. Идёт же привязка к определённому идентификатору...
Узнал у админа апач собран с multithreaded