Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy przygotowane instrukcje są buforowane po stronie serwera przez wiele ładowanych stron za pomocą PHP?

Gdy żądanie jest obsługiwane, php „czyści” instancję i zwalnia zasoby oraz inne zmienne. Odbywa się to w kilku krokach. Ponieważ fastcgi utrzymuje proces przy życiu po żądaniu, nie wszystkie kroki są wykonywane i nie zwalniana jest cała pamięć. Jest m.in. EG(persistent_list), który jest używany przez mysql_pconnect() , pg_pconnect() , ... Ta lista nie jest opróżniana między żądaniami, o ile proces utrzymuje się przy życiu (może być, w zależności od rzeczywistej implementacji, ale byłoby to sprzeczne z celem EG(persistent_list)). Jeśli używasz trwałych połączeń, Twój skrypt może otrzymać "ponownie użyte" połączenie ustanowione podczas poprzedniego żądania.
Aby (ponownie) użyć przygotowanej instrukcji bezpośrednio, potrzebujesz identyfikatora dla tej instrukcji (i tego połączenia). Podczas używania (php-)postgresql jest to po prostu (pod względem połączenia) unikalny ciąg, który przekazujesz do pg_execute() , więc Twój skrypt nie ma problemu z uzyskaniem dostępu do instrukcji przygotowanej wcześniej przez inną instancję (przy użyciu tego samego połączenia).
Używając mysqli lub PDO-mysql potrzebujesz zasobu/obiektu jako identyfikatora instrukcji. Jest to pewien problem, ponieważ ani mysqli, ani rozszerzenie pdo nie wydają się oferować sposobu przechowywania zasobu w EG (persist_list) między żądaniami i nie można go również odtworzyć. O ile php-fpm nie oferuje takiej „usługi”, wydaje się niemożliwe ponowne użycie bezpośrednio przygotowanego oświadczenia mysql.
Wszystko, na co możesz liczyć, to pamięć podręczna zapytań po stronie serwera . W nowszych wersjach (patrz link) może rozpoznawać wyciąg przy korzystaniu z przygotowanych wyciągów. Ale nawet wtedy nie wykorzystuje ponownie faktycznie przygotowanego oświadczenia:

Tak więc, jeśli się nie mylę, obecnie nie można ponownie użyć instrukcji mysql przygotowanej podczas poprzedniego żądania w php.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. W jaki sposób tabele innodb są blokowane podczas przetwarzania wyzwalacza ON INSERT?

  2. Dlaczego CONCAT() nie ustawia domyślnie domyślnego zestawu znaków w MySQL?

  3. Masz problemy z przyłączeniem MySQL, które musi spełniać wiele warunków

  4. Zaktualizuj zapytanie za pomocą PDO i MySQL

  5. Łączenie się z MySQL za pomocą Pythona