Oracle
 sql >> база данни >  >> RDS >> Oracle

Напълно разбиране на PDO ATTR_PERSISTENT

Гледна точка на Apaches

Apache има един родителски процес. Този процес създава дъщерни процеси, които ще обработват всички заявки, идващи към уеб сървъра. Първоначалното количество дъщерни процеси, стартирани при стартиране на уеб сървъра, се конфигурира от StartServers директива в конфигурацията на apache. Числото се увеличава според нуждите с нарастващ брой заявки, удрящи уеб сървъра до ServerLimit е достигната.

PHP и постоянни връзки

Ако PHP (изпълнен като mod_php, като CGI всички ресурси се освобождават в края на изпълнението на скрипта) сега е казано да установи постоянна връзка с база данни за заявка, тази връзка се задържа дори след като скриптът приключи. Връзката е сега hold е връзка между дъщерния процес на apache, от който е обработена заявката, и сървъра на базата данни и може да се използва повторно от всяка заявка, която се обработва от този точен дъщерен процес.

Ако по някаква причина (не ме питайте точно защо) дъщерният процес е зает по-дълго от действителната заявка и постъпи друга заявка, родителският apache процес пренасочва тази заявка към (нов) дъщерен процес, който може да не е установен връзка с базата данни до този момент. Ако се наложи по време на изпълнението на скрипта, той повишава SID, както сте забелязали. Сега има две връзки, задържани от два различни дъщерни процеса на apache.

Имайте предвид, че...

Важно е да знаете, че това също може да причини много проблеми. Ако има безкраен цикъл или прекъсната транзакция или някаква друга може да е дори непредвидима грешка по време на изпълнението на скрипта, връзката е блокирана и не може да бъде използвана повторно .Също така може да се случи да се използват всички налични връзки на базата данни, но има друг дъщерен процес на сървъра apache, който се опитва да получи достъп до базата данни. Този процес е блокиран за момента, докато връзката не бъде освободена от базата данни или apache (изчакване или доброволно чрез прекратяване). Всяка допълнителна информация по тази тема на тази страница:http://www.php.net/manual/en/features.persistent-connections.php

Надявам се, че всичко, което обсъдихме в нашия разговор с коментари, е обобщено правилно и не съм забравил нищо. Ако е така, моля, оставете ми намек и аз ще го добавя. :)

Редактиране:

Току-що приключих с четенето на статията @MonkeyZeus, спомената в този коментар. Тя описва процеса, който обобщих по-горе и предоставя полезна информация за това как да оптимизирате вашия apache сървър, за да работи по-добре заедно с постоянни връзки. Може да се използва със или без бекендове на база данни на Oracle, все пак. Трябва да погледнете:http://www.oracle.com/technetwork/articles/coggeshall-persist-084844.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да въведете специални символи като &в базата данни на Oracle?

  2. Как да инсталирате SQL Developer на Mac

  3. C# параметризирани заявки за Oracle - сериозна и опасна грешка!

  4. Как да проверя NLS_LANG на клиента?

  5. Разлика в обработката на интервалите между Oracle и SQL Server