[PHP, mssql] mssql_connect vasthouden met session?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Hallo,

Ik heb een website die elke keer met 2 databases moet verbinden.
dus 2 keer een mssql_connect en mssql_select_db.
Dit kost ongeveer 0.25 seconden per connectie. Elke refresh weer. Dus elke refresh duurt minimaal 0.4/0.5 seconden.

Laadtijden:
code:
1
2
3
4
5
Vooraf: 0.018496036529541
Na DB connect: 0.24409198760986
na DB select db: 0.24471592903137
Na DB connect 2: 0.4594669342041
na DB select db 2: 0.46012091636658


Kan ik ook op de 1 of andere manier de verbinding open houden per sessie? Of valt er wat te cachen, of op een andere manier op te lossen?
De webserver en database server zijn 2 verschillende servers.

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 00:16

Matis

Rubber Rocket

Draait de database wel op de localhost van de webserver?

250ms vind ik wel heel veel tijd voor het openen van een db-connectie.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je kunt toch gewoon de link identifier gebruiken :?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Wat bedoel je Roblll?
@Matis: De webserver en database server zijn 2 verschillende servers.

PHP:
1
2
3
4
5
6
7
8
9
10
11
  echo (getmicrotime() - $load_time). "<br />";
  $_DB_conn_1 = mssql_connect($_db_1_ip, $_db_1_user, $_db_1,pass, true) or die("Kan geen verbinding maken");
  echo (getmicrotime() - $load_time). "<br />";
  mssql_select_db($_db_1, $_DB_conn_1) or die("Kan de database niet selecteren");
  echo (getmicrotime() - $load_time). "<br />";
  $_DB_conn_external = mssql_connect($_db_external_ip, $_db_external_user, $_db_external_pass, true) or die("Kan geen verbinding maken");
  echo (getmicrotime() - $load_time). "<br />";
  mssql_select_db($_db_external, $_DB_conn_external) or die("Kan de database niet selecteren");
  echo (getmicrotime() - $load_time). "<br />";
  
  exit;

[ Voor 83% gewijzigd door Guillome op 09-03-2010 16:22 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan je ook afvragen waarom het zo lang duurt om te connecten (ook om die eerste connectie te versnellen). Vaak ligt deze tijd wel onder de 10ms.

Edit: Niet zo slim om het wachtwoord mee te geven in die "die()"! Gebruik je trouwens wel een ipadres ipv een hostname om te connecten? Zou kunnen liggen ana het resolven van de hostname naar een ipadres.

[ Voor 41% gewijzigd door Verwijderd op 09-03-2010 16:23 ]


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Hmmmz, als dat zo is is het zoeken naar een oplossing wat ik in gedachten had overbodig natuurlijk.

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 00:16

Matis

Rubber Rocket

Je hebt een variabele genaamt $_db_1_ip.

Is dat een domeinnaam of een ipadres?

Indien het eerste het geval is, kan de DNS-recursion ook nog een negatieve invloed hebben op je connectietijd.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
@Robill, ja ik had de code net na jouw reactie geplaatst :) Ja dat gebruik ik.
@ruggerlak: klopt, ik heb het verwijderd.

`t Zijn IP adressen

[ Voor 8% gewijzigd door Guillome op 09-03-2010 16:25 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Guillome schreef op dinsdag 09 maart 2010 @ 16:24:
@Robill, ja ik had de code net na jouw reactie geplaatst :) Ja dat gebruik ik.
Ja, ik zie nu ook pas dat je de connectie "per sessie" wil openhouden... Ik dacht even dat je voor elke actie opnieuw de connectie opende.

[ Voor 11% gewijzigd door RobIII op 09-03-2010 16:27 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 00:16

Matis

Rubber Rocket

Zijn Persistent Database Connections niet wat je zoek?

Ik weet btw niet hoe dat performed of hoe fatsig dat is

[ Voor 40% gewijzigd door Matis op 09-03-2010 16:27 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Misschien heeft de TS iets aan Persistent Connections? Maar ik zou ook eerder kijken naar waarom het connecten zo lang duurt.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Vreemd, als ik beide op mssql_pconnect zet krijg ik bij alle queries op de 2e connectie deze fout:
"Unable to set query". Bij alleen de 1e werkt het, en scheelt het zo`n 0.2 seconden :)

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 00:16

Matis

Rubber Rocket

Dat is ook niet zo heel vreemd dat het alleen bij de eerste werkt, want als je de documentatie had gelezen had je het volgende gezien:
If you have multiple databases on the same server AND you are using persistent connections, you MUST prefix all the table names with the specific database name.
Nu is het d.d. 06 maart 2006, ik weet niet of er al fixes zijn, maar dat zou je eens kunnen proberen.

Edit; dat neemt nog niet weg dat de opmerking van Okke blijft gelden.

[ Voor 7% gewijzigd door Matis op 09-03-2010 17:00 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
`t Is op 2 verschillende plekken traag. Op de 2e kost het net zoveel tijd.
Rare is dat de 2e connectie langer duurt dan de 1e, terwijl het dezelfde server is.

0.224989891052
0.22541809082
0.552973031998
0.553289890289

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 00:16

Matis

Rubber Rocket

Het is voor jezelf eenvoudiger als je de tijd per functie meet, dit geeft een vertekend beeld.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
dit is per functie, zoals hier

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 00:16

Matis

Rubber Rocket

Nee, dat is het niet :)

Wat jij nu doet is op die punten kijken hoe lang het totale programma al loopt. Je trekt als het ware steeds een constante waarde af van de huidige tijd.

[ Voor 10% gewijzigd door Matis op 10-03-2010 09:04 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online
8)7 t Is vroeg, moment..

Met connect
0.204
0.001
0.217
0.001

Met (1e alleen) pconnect
0.001
0.001
0.129
0.001

:)

Over het algemeen zijn beide connecties idd even snel.

Edit: als ik beide op pconnect zet is het net zo snel (traag) als met 1 pconnect.

Edit2:

Als ik dit doe werkt het vlot, maar is dit euhh... netjes? 2 keer pconnect, met een select_DB elke keer dat ik de andere DB benader (makkelijk te doen in mijn code).
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  $_DB_conn_1= mssql_pconnect($_db_1_ip, $_db_1_user, $_db_1_pass) or die("Kan geen verbinding maken.");
  echo getmicrotime() - $start_time. "<br />";$start_time = getmicrotime();
  mssql_select_db($_db_1, $_DB_conn_1) or die("Kan de database niet selecteren.");
  echo getmicrotime() - $start_time. "<br />";$start_time = getmicrotime();
  $_DB_conn_external = mssql_pconnect($_db_external_ip, $_db_external_user, $_db_external_pass) or die("Kan geen verbinding 2 maken");
  echo getmicrotime() - $start_time. "<br />";$start_time = getmicrotime();
  mssql_select_db($_db_external, $_DB_conn_external) or die("Kan de database 2 niet selecteren.");
  echo getmicrotime() - $start_time. "<br />";
  $r = mssql_query("SELECT * FROM tbl WHERE ID > 50000", $_DB_conn_external);
  echo mssql_num_rows($r). "<br />";
  echo getmicrotime() - $start_time. "<br />";$start_time = getmicrotime();  
  mssql_select_db($_db_1, $_DB_conn_1) or die("Kan de database niet selecteren.");
  $r = mssql_query("SELECT * FROM users WHERE ID > 100", $_DB_conn_1);
  echo mssql_num_rows($r). "<br />";
  echo getmicrotime() - $start_time. "<br />";$start_time = getmicrotime();
  exit;


Output:
code:
1
2
3
4
5
6
7
8
0.00020289421081543
0.0012547969818115
0.00017786026000977
0.0007319450378418
938
0.051059007644653
2691
0.047502040863037

[ Voor 245% gewijzigd door Guillome op 10-03-2010 09:34 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • _Noldy
  • Registratie: September 2009
  • Laatst online: 06-07 14:33
Matis schreef op dinsdag 09 maart 2010 @ 16:19:
Draait de database wel op de localhost van de webserver?

250ms vind ik wel heel veel tijd voor het openen van een db-connectie.
...

[ Voor 23% gewijzigd door _Noldy op 11-03-2010 20:41 . Reden: ongelijk ingezien ]

Pagina: 1