Puncte:0

De ce o selecție MySQL nu creează uneori o „conexiune client”?

drapel gl

Fac niște teste (pe serverul meu de dezvoltare) pentru a mă ajuta să îmi dau seama ce cauzează lista tot mai mare de conexiuni pe serverul meu de producție. Presupunerea mea este că există anumite pagini care nu închid conexiunea folosind mysql_close(). Așa că încerc mai întâi să confirm ce creează conexiunile și apoi să confirm cum să mă asigur că sunt închise.

Pentru a face acest lucru, am creat un script simplu pentru a crea o conexiune, urmat de un mysql_close() pentru a închide conexiunea. Din păcate, testarea mea este oprită pentru că nici măcar nu pot confirma că creez conexiuni.

Când execut următorul cod (observați că mysql_close()) este comentat, m-aș aștepta să văd o nouă conexiune în lista mea de conexiuni client și m-aș aștepta să se distrugă după 20 de secunde de când am setat wait_timeout la 20 Cu toate acestea, nici măcar nu pare să fie creată nicio conexiune.

<?php

$dblocation = "127.0.0.1";
$dbusername = "blah_dev";
$dbpassword = "test";
$dbname = "blah_dev";
$dbdescription = "";

$conn = mysql_connect($dblocation, $dbusername, $dbpassword) or die ("<span style='color:red'>Unable to connect!  Press F5 to try again.</span>");
mysql_select_db($dbname, $conn) or die ("Unable to select database!");

$sql = "select fullname from months";
$result = mysql_query($sql);
if($row = mysql_fetch_array($result)){

  echo "<table border=1>";
  do{
    $month = $row["fullname"];
    echo "<tr><td>".$month."</td></tr>";
  }while ($row = mysql_fetch_array($result));

  echo "</table>";
}

//mysql_close();

?>

Am adăugat chiar și o simplă declarație select pentru a confirma că fac o conexiune și o fac. De ce această conexiune nu apare în lista mea de conexiuni client din MySQL Workbench? De asemenea, folosesc un alt instrument (MySQL Diagnostic Manager) pentru a-mi arăta firele curente și nici acolo nu se afișează.

Ce îmi lipsește aici?

drapel ua
Oare vreun strat din stiva dvs. oferă „grupare de conexiuni”?
drapel ua
Cu excepția cazului în care Workbench este conectat ca „rădăcină”, puteți vedea doar conexiunile care provin de la același „utilizator”.
Wilson Hauck avatar
drapel jp
Utilizarea jurnalului general este o modalitate excelentă de a confirma ceea ce se întâmplă. Nu uitați să setați GLOBAL general_log=OFF; pentru a evita să vă umpleți mediul de stocare când ați terminat cu investigația.
Wilson Hauck avatar
drapel jp
Vincent, te-ai gândit să folosești mysqli_connect mai degrabă decât mysql_connect. Această adresă URL poate fi utilă. https://www.php.net/manual/en/mysqli.error.php
drapel gl
@RickJames Sunt conectat ca Root.
drapel gl
@WilsonHauck Sunt de fapt în curs de a trece tot codul meu la DBO și, de fapt, folosesc un amestec al ambelor, dar mai am peste 2000 de instrucțiuni mysql_query, așa că este o treabă mare și un proces lung pentru a schimba fiecare instrucțiune peste. În acest moment, îmi fac doar testarea cu mysql_connect pentru că a trebuit să aleg unul.
drapel gl
@WilsonHauck doar ca să fiu clar, mă conectez pentru că, dacă nu aș fi, nu aș putea să-mi execut instrucțiunea select și să afișez rezultatele. Conexiunea pur și simplu nu apare în lista mea de conexiuni și asta face imposibilă testarea gestionării conexiunilor. De asemenea, pare aleatoriu. Uneori văd două conexiuni în lista mea de conexiuni după ce execut acest cod (niciodată una) și uneori nu văd niciuna.
Wilson Hauck avatar
drapel jp
Vincent, Vă rugăm să postați din producție pe pastebin.com și să distribuiți linkurile. După 48 de ore de funcționare, următoarele informații ar face posibilă analiza. Conectați-vă ca root și din promptul de comandă MySQL, SHOW GLOBAL VARIABLES; și AFIȚI STAREA GLOBALĂ; pentru a detecta posibilele cauze ale creșterii conexiunilor. Includeți complet SHOW FULL PROCESSLIST; de asemenea. Mulțumesc că te-ai gândit să postezi aceste informații.
drapel gl
@WilsonHauck Nu sunt sigur ce vrei să postez exact.
Wilson Hauck avatar
drapel jp
Consultați pagina de pe site-ul nostru „Date de care avem nevoie” pentru a afla cum să ne transmiteți date. Mulțumesc, Wilson
drapel gl
@RickJames de unde aș știu dacă folosesc pooling de conexiuni? Am instalat MySQL cu setările implicite, așa că bănuiesc că acesta este ceva care trebuie activat în mod explicit, dar cum pot confirma?
drapel gl
Nu contează pe toți. Mi-am dat seama. Conexiunea este creată, dar închisă imediat după aceea, așa că nu pare să creeze o conexiune. Greșeala mea.
Puncte:0
drapel gl

Se pare că acest cod face creați o conexiune client, dar pentru că o închide imediat ce scriptul termină de rulat, nu o face apărea pentru a crea o conexiune. :/

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.