Сколько ресурсое съедает connect...close?

  • Автор темы Alkinoy
  • Дата начала

Alkinoy

Guest
Сколько ресурсов съедает connect...close?

Сваял сайт с ограниченным доступом. Проверка аутентичности юзера вынесена в отдельный файл, который просто инклудится в начале любой страницы с ограниченным доступом. При этом инклуд или пропускает запрос юзера на эту страницу (если все ОК) или прекращает выполнение скрипта и гуд бай. Так вот, в этом инклюде идет обращение к таблице юзеров. В конце все соединения закрываются. НО в самой защищаемой странице может быть обращение к другим таблицам. А в некоторых может и не быть. Так вот вопрос, стоит ли закрывать соединение с БД в инклуде, если в примерно 70% страниц снова происходит коннект. Насколько сильно коннект/дисконнект загружают сервер. Старался сделать инклуд как совершенно автономный модуль, чтоб у разработчика не болела голова: а что там открыто осталось, а что нет?
И еще вопрос. Насколько болезненно реагирует MySQL на незакрытое соединение с базой? По идее все должно само закрыться как только скрипт отработает, но почемуто мои "по идее" не всегда правильны...
 

Vinny

Guest
Connect очень ресурсоемкий. Например, в моем скрипте счетчика с десятком запросов к базе и генерацией Gif (использовалась GD) connect занимал 70% времени.

pconnect дают не все провайдеры и про большом количестве проектов на серваке это череповато отказом в доступе к БД.

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

Vinny

Guest
И еще, закрывание ресурсов и коннектов - это хороший тон. Написать пару строчек - это не много времени...
 

tony2001

TeaM PHPClub
>используй pconect и закрывать ничего не надо - само отвалится
плохой совет.
как показывает практика, такая экономия ведет к большим траблам потом.
т.к. по неизвестным мне причинам коннекты постоянно открываются, но не закрываются.
 

Barlone

Guest
Автор оригинала: Vinny
Connect очень ресурсоемкий. Например, в моем скрипте счетчика с десятком запросов к базе и генерацией Gif (использовалась GD) connect занимал 70% времени.
:confused: Ты это как мерял ? Это к MySQL ? И сервер на том же компе ?

http://www.mysql.com/doc/en/Insert_speed.html
 

Demiurg

Guest
php сам закрывает connect, а время коннекта действительно очень маленькое.
 

tony2001

TeaM PHPClub
>php сам закрывает connect, а время коннекта действительно очень маленькое.
уточню:
согласно тестам [si] - около 40 мс.
interbase - что-то около 400.
postgres - примерно 200.
остальные не помню.
 

Alkinoy

Guest
Спасибо за консультацию! Рад, что сделал правильно!
 

RomikChef

Guest
сабиба удалил я, потому, что во-первых, он вообще не понимает, о чем пишет, ао-вторых, почему-то находятяся уникумы, которые из всего треда понимают только самый неправильный совет.

Коннект - медленная операция. сравнительно с другими.
Если кто будет хоститься у si - милости просим к его тестам.
А вот на других серверах может быть и другая конфигурация.

По моим ощущениям, два коннекта погоды не сделают. Вот видел я уникума, который для каждого запроса коннектился - у него тормозило ощутимо.

Но сам я не закрываю соединение. Скрипты у меня работают быстро, PHP успевает все закрыть сам.
 

Vinny

Guest
Специально решил проверить.
Есть файл img.php - счетчик. В нем проставил два таймера: один меряет все время выполнения скрипта, второй - время коннекта.

Тут результаты:
http://www.saterenko.ru/php/result.txt

Исходник img.php:
http://www.saterenko.ru/php/img.phps

Исходник класса таймера:
http://www.saterenko.ru/php/Timer.inc.phps

PHP 4.2.3, MySQL 3.23.52, Win2k Prof, P3-1000, 512Mb.

Результат - до 80% времени.
 

Demiurg

Guest
да уж .. особенно порадовала функция:
PHP:
    function printEmptyImage()
    {
        echo "null";
        exit;
    }
 

tony2001

TeaM PHPClub
ApacheBench:
Server Software: Apache/1.3.27
Concurrency Level: 1
Time taken for tests: 3.539 seconds
Complete requests: 1000
Requests per second: 282.57 [#/sec] (mean)
Time per request: 3.54 [ms] (mean)

код скрипта:
PHP:
<?
mysql_connect('localhost','user','pswd');
?>
машина - моя рабочая (с одной стороны - далеко не сервер по мощности, с другой - все-таки не загружена)

для ленивых: mysql_connect() = 3.54 ms
 

Demiurg

Guest
а, все понял, стормозил.
сделай простой тест connect и один запросик, и сравнивай.
 

tony2001

TeaM PHPClub
Concurrency Level: 1
Time taken for tests: 2.610 seconds
Complete requests: 1000
Requests per second: 383.14 [#/sec] (mean)
Time per request: 2.61 [ms] (mean)

код скрипта:
PHP:
<?
echo 'hello world!';
?>
для ленивых: echo 'hello world!' = 2.61 ms

PHP 4.3.0-RC4, MySQL 3.23.49, если кого-то это интересует.
 

Vinny

Guest
Странно, у меня 0.023302 сек для:
PHP:
<?
	require('inc/Timer.inc.php');

	$t1 = new Timer();
	$t1->start();
	mysql_connect('localhost','root','');
	$t1->stop();
	echo $t1->getTime();
?>
 

Vinny

Guest
и 3.5E-005 - 3.8E-005 для:
PHP:
<?
	require('inc/Timer.inc.php');

	$t1 = new Timer();
	$t1->start();
	$t1->stop();
	echo $t1->getTime();
?>
 

tony2001

TeaM PHPClub
>PHP 4.2.3, MySQL 3.23.52, Win2k Prof, P3-1000, 512Mb.
самого главного не заметили.
у меня RH7.3.
у [si] тоже что-то юниксовое.

делайте правильные выводы =)
 
Сверху