Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Długi czas łączenia się z bazą
gargamel
post
Post #1





Grupa: Zarejestrowani
Postów: 278
Pomógł: 35
Dołączył: 25.06.2010

Ostrzeżenie: (0%)
-----


Witam,
Na szybko opiszę problem. Po przeniesieniu się na nowy serwer, na którym mamy limit interpretatorów PHP, okazało się że nasza strona pochłania zbyt dużą ich ilość. Wg administratora problem może sprawiać pewien określony plik, który wyjątkowo długo się wykonuje. Po przeanalizowaniu czasu wykonania się poszczególnych partii kodu tego pliku (który swoją drogą jest skrajnie prosty, bo wykonuje tylko jedno proste zapytanie do bazy), okazało że najwięcej czasu zajmuje linijka tworzenia obiektu PDO:
  1. <?php
  2. $dataBaseConnection = new PDO("pgsql:dbname=$db; host=$host", $user, $pass );
  3. ?>

z reguły jest to czas rzędu 0.01s, ale w przypadku uruchomienia tego pliku jednocześnie w kilku zakładkach, czas potrafi się wydłużyć do kilkunastu sekund... Nie wklejam reszty kodu bo problemem jest tylko ta jedna linijka. Macie pomysł co może powodować tak długie łączenie się z bazą, ewentualnie jak to zoptymalizować?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
gargamel
post
Post #2





Grupa: Zarejestrowani
Postów: 278
Pomógł: 35
Dołączył: 25.06.2010

Ostrzeżenie: (0%)
-----


No właśnie też o tym pierwszym pomyślałem, ale czemu zawsze zawiesza się na tym pliku ?

Jeśli wyciągnę kod z klas i zorganizuję go w jednym pliku, to wygląda to tak:

  1. <?php
  2. $dataBaseConnection = new PDO("pgsql:dbname=$db; host=$host", $user, $pass );
  3.  
  4. $sql = "
  5. SELECT
  6. max(modification_marker) AS mm
  7. FROM
  8. c_orders
  9. WHERE
  10. c_complete=:c_complete;";
  11.  
  12. $p = $dataBaseConnection -> prepare( $sql );
  13. $p -> execute( array( ':c_complete' => 1 ) );
  14. $p -> setFetchMode( PDO::FETCH_ASSOC );
  15. $r = $p -> fetch();
  16. $mm = $r['mm']
  17.  
  18. $jsonResp['responce_success'] = false;
  19. $jsonResp['mm'] = 0;
  20.  
  21. if( (int)$mm ) ){
  22. $jsonResp['responce_success'] = true;
  23. $jsonResp['mm'] = $mm;
  24. }
  25.  
  26. echo json_encode($jsonResp);


A więc żadnych wygibasów tu nie ma. Odnośnie jednak zamulania przez jakieś inne zapytanie - jest jakiś sposób żeby rejestrować wykonywane przez bazę zapytania, ich czas wykonania - żeby ewentualnie zlokalizować zapytanie które muli (ale nie na zasadzie pomiaru czasu w metodach które wykonują sql-a, bo to mi zajmie 100 lat ;-) )?




Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 14:24