ugrás a tartalomhoz

Mysql_lekérdezés hossza időben.

s_volenszki · 2007. Aug. 14. (K), 14.32
Sziasztok!

Azt szeretném kérdezni, hogy ebben a kódban ha mérem a lekérdezés hosszát, mettől meddíg tegyem?

$lekerdezes = mysql_query("SELECT * FROM `tabla`");

while($sor = mysql_fetch_array($lekerdezes,MYSQL_ASSOC))
{
        print $sor['record'];
}
A $lekerdezes előtt indítsam a stoppert, és a $lekerdezes utan állítsam meg? Mert ha a $lekerdezes és a while között bontom az adatbázis kapcsolatot, az eredmény attól még meg lesz, ebből gondolom, hogy a while teljes egészében már csak a lekérdezés eredményét használja ,valahonnan.

Azt olvastam a php manualban, hogy az adatbázis lekérdezés után létrejön egy speciális változó, ami egy hivatkozás valamilyen külső adatforrásra (azt is írja ki ha printelem a $valtozo-t: Resource #Id13), de akkor mégis olvas az sql szerverről, csak már valami előkészített adatot (kapcsolat nélkül????)?

Hogy is van ez?

s_volenszki
 
1

Attól függ, mit akarsz mérni

Török Gábor · 2007. Aug. 14. (K), 22.27
A $lekerdezes előtt indítsam a stoppert, és a $lekerdezes utan állítsam meg?
Ha a mysql_query időköltségét szeretnéd mérni, akkor értelemszerűen igen. Ha nem, akkor nem.
2

erőforrás gazdálkodás

s_volenszki · 2007. Aug. 15. (Sze), 08.18
Szia!

A cél az, hogy megállapítsam mennyire hosszú a lekérdezés, és jelent-e problémát szerver erőforrás gazdálkodás tekintetében (több példányban, azonos időben futtatott lekérdezés). Optimalizálni szeretnék néhány lekérdezést, de tudnom kell, hogy az átalakítással nyerek-e erőforrást!

s_volenszki
3

inkább bízd rá a mysql-re

amonrpg · 2007. Aug. 15. (Sze), 08.45
ha csak a mysql query-k érdekelnek, akkor inkább kapcsold be az sql szerver lassú query-k logolását.

http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
http://dev.mysql.com/doc/refman/5.1/en/log-tables.html
4

Jó megoldás

s_volenszki · 2007. Aug. 15. (Sze), 10.41
Jó megoldás, de sajnos nem férek hozzá a szerver ezen beállításaihoz. Van egyéb mód a lkeérdezések analizálására?

s_volenszki
5

korábbi téma

gex · 2007. Aug. 15. (Sze), 11.39
hasonló kérdést tettem fel, Felhő és Dualon is segített.
6

Ismét kérdezek tőletek.

s_volenszki · 2007. Aug. 17. (P), 16.16
Sziasztok!

Említettem már az előzőekben, hogy sajnos nincs jogosultságom log-slow-queries-hez, és az apache-al is csak beszélő viszonyban vagyok (tudom, ennyit ér a szolgáltatás amit használok), de viszonylag sokszor okoznak Internal Server Error-t a beragadt lekérdezések.

A megadott útmutatás alapján ismét átnéztem az alkalmazásaimat és egy mérőkóddal elkezdtem logolni minden lkeérdezést, most kiértékeltem, és a következőre jutottam:

Ahol lehet, minden lekérdezés indexelt.
A táblák rendszeresen karbantartottak, optimalizáltak, nincs töredezettség, és nincs overhead.
Minden lekérdezést megvizsgáltam EXPLAIN-el, és mysql mindegyiket megfelelőnek találta.

Ez nem is csoda, hiszen mindegyik teljesen egyszerű, de íme három péda (ugyanabban a táblában kb. 500 rekorddal):

1.
SELECT * FROM `termekek` WHERE termekcsoport_id = '15' ORDER BY termekek ASC
Átlagos futásidő: 0.0001-0.00005 másodperc.

2.
SELECT * FROM `termekek` WHERE katalogus_id = '15' ORDER BY termekek ASC
Átlagos futásidő: 0.0001-0.06 másodperc.

3.
SELECT * `termekek` WHERE akcios = '1' ORDER BY termekek ASC
Átlagos futásidő: 0.0001-0.07 másodperc.

A logfile ehez képest rendszeresen tartalmaz ennél jóval nagyobb futási időket!
Néhány példa:
1-es lekérdezés: 1.57 másodperc
2-es lekérdezés: 1.72 másodperc
3-as lekérdezés: 2.67 másodperc

Mi változtathatja meg a lekérezések idejét ilyen mértékben? Hogyan kezeli a mysql az egyidőben érkező lekérdezéseket? Előfordulhat, hogy ezekből az időkből a tényleges lekérdezés hasonlóan rövid mint általában, csak a várakozás miatt megnövekszik a teljes lekérdezés idelye?

Amikor elfogynak az erőforrások (mert egy vagy több szkript hosszabban fut), csak az újonan induló szkriptek kapnak error 500-at, és a folyamatban lévők lefutnak, vagy azokat is kidobja? Mert ha lefutnak, akkor ha logolnám az összes lekérdezést azonosíthatóan, akkor err.500-közben futva maradó szktiptek valamelyike lehetne a ludas.

Ha meg kidobja, akkor logolnám a kapcsolat azonosítókat, majd "elfoghatnám" a hibaüzenetet és kiszedném belőle, hogy melyik kapcsolathoz tartozik. Persze, ha külön hibakódja van az err.500-kor fellépő eröforrás hiány okozta kapcsolat megszakadásnak (ha ugye megszakad).

Ez egy kicsit tömény lett, remélem áttekinthető, és ha sok lenne benne a butaság, hát vállalom a kritikát. Barkácsolnom kell, hogy tovább jussak, de imádok tanulni! Nincs szebb és egyszerűbb dolog egy megoldott problémánál!

s_volenszki