CompZone.Org :: Artykuły :: SQL
Jaki jest Twój wiek?
40 - 59
26 - 39
19 - 25
13 - 18
12 i mniej
60 i więcej
Sonda Wyniki

Add to Google

Mierzenie wydajności zapytań MySQL

Konfigurując MySQL lub pisząc skompliwkowane zapytanie często przydaje się wiedza na temat, jak bardzo kosztowne jest wykonanie danej operacji. Pod pojęciam kosztowne mam na myśli oczywiście czas wykonania. Zazwyczaj niemożliwe jest zmierzenie pojedynczeg

Po co mierzyć wydajność?

Konfigurując MySQL lub pisząc skompliwkowane zapytanie często przydaje się wiedza na temat, jak bardzo kosztowne jest wykonanie danej operacji. Pod pojęciam kosztowne mam na myśli oczywiście czas wykonania. Zazwyczaj niemożliwe jest zmierzenie pojedynczego wywołania, gdyż jego czas jest zbyt mały. Wywoływanie funkcji wewnętrznych mysql (takich jak count, sum) może być czasochłonne na bardzo dużych tablicach.

Mierzenie w PHP

Jak zatem możemy zmierzyć? Co możemy zmierzyć? Oczywiście pomysłów jest kilka można napisać porsty skrypt php, który będzie mierzył czas. Istnieje tutaj pewien narzut związany z uruchomieniem połączenia, transferem danych i przetwarzaniem przez PHP jednak takie dane mogą być przydatne. Poniższy kod demonstruje taki pomysł.

 <?php
$link = mysql_connect('localhost','user','password');
mysql_select_db('contacts',$link);

$loop_count=10000; // Wartość ta może wymagać zmiany w zależności
// od stopnia skomplikowania zapytania

$sql = 'Select * from contacts;'; //zapytanie do wykonania
$start = microtime(true); // czas start!

//pętla wywołująca zapytania
while(--$loop_count){
mysql_query($sql,$link);
}

$stop = microtime(true); // zatrzymaj stoper

//Wyświetl wynik
echo 'Wykonanie trwało: '.(round(($stop-$start),3)).' sek.<BR>';


?>

Wyjaśnienia w powyższym kodzie może wymagać jedynie funkcja microtime. Zwraca ona czas w mikrosekundach od tzw. ery uniksa. Dzięki przekazaniu parametru true, wartość zwracana jest liczbą zmiennoprzecinkową (a nie parą wartości milisekund i sekund odzielonych spacją).

A może jednak MySQL?

Jednak ten pomysł ma pewne wady, o których wspomniałem wcześniej. Istnieje jednak inna metoda. Możemy użyć wbudowanej w mysql funkcji benchmark. Wykonuje ona podaną liczbę iteracji wykonując zapytanie. Funkcja benchmark przyjmuje jako pierwszy argument właśnie liczbę iteracji (liczbę wykonań), a jako drugi parametr funkcję którą ma sprawdzić. Prosty przykład możemy zobaczyć poniżej.

 Select benchmark(10000000, count(*)) from items;
Select benchmark(10000000, password('super_tajne_haslo'));

Wykorzystanie funkcji benchmark może być róznorakie. Zapraszam to testowania różnych możliwości. Zmierzenie wydajności może zaowocować znalezieniem wąskiego gardła aplikacji i lepszą konfiguracją serwera.

Źródła:

[Książka]"Bazy danych w Internecie. Tworzenie za pomocą PHP i MySQL" - Hugh E. williams & David Lane
[WWW]www.mysql.com
Kodie @ 29-06-2006 11:12
Brak komentarzy...
Copyright © 2005-2006 Compzone.Org. Kopiowanie i wykorzystywanie materiałów zawartych na tej stronie bez zgody autora zabronione!