Testowanie szybkości wykonywania SQLi

MySQLZapewne większość wie, że MySQL posiada wbudowany mechanizm cacheowania SQLi. Sprawdza się w miarę dobrze i w większości przypadków jego wyłączenie nie jest zalecane.

My programiści, potrzebujemy jednak do testów prędkości wykonywania SQLi (szczególnie tych operujących na większej liczbie danych) realnych prędkości.


Z włączonym cache jest to jednak trudne bo np. taki SQL:


SELECT * FROM duza_tabela GROUP BY jakies_pole;

za pierwszym razem (przy liczbie rekordów 100-200 tysięcy rekordów) taki SQL może się wykonywać ładnych parę(naście) sekund. Jednak wykonanie go ponowne (jeśli tylko nie zmieniły się w międzyczasie dane w tabeli `duza_tabela`) spowoduje pobranie danych z cache i co zaowocuje wynikiem co najwyżej kilku(nastu) milisekund..

Niby teoretycznie wystarczy zmienić coś w podanym SQLu, żeby zapytanie zostało znowu wykonane. Np.


SELECT jakies_pole, inne_pole FROM duza_tabela GROUP BY jakies_pole;

i znowu będzie się wykonywało kilka(naście) sekund. Jednak wykonywanie pojedynczego zapytania jednokrotnie jest bardzo mylące – czasami właśnie komputer/serwer coś robił i ciężko ocenić czy to zapytanie wykonywało się kilka sekund tylko dlatego, że jest z gatunku “ciężkich” czy po prostu komputer na którym się wykonywało był akurat zajęty.

Co trzeba zrobić? Oczywiście wykonać to zapytanie kilkukrotnie. W SqlYog’u jest to proste – wystarczy nacisnąć na danym zapytaniu F5. Niestety z przyczyn opisanych powyżej wykonanie drugi raz tego samego SQLa spowoduje pobranie danych z cache’a. Nie przedłużając :) są 2 sposoby na ominięcie tego problemu.


SELECT
SQL_NO_CACHE
*
FROM
duza_tabela
GROUP BY
jakies_pole

Tu chyba wszystko jest jasne – wystarczy dodać słowo kluczowe SQL_NO_CACHE PO wyrażeniu SELECT i zapytanie nie będzie już cachowane.


SET query_cache_type=0;

spowoduje wyłączenie cacheowania dla danego połączenia. Każdy wykonany SQL (nawet ten bez SQL_NO_CACHE) będzie wykonywany bez cachowania. Tak po prostu :)

Więcej o query_cache_type znajdziesz tutaj.

Ten wpis umieszczono w kategorii MySQL. Możesz dodać go do zakładek permalink. Dodaj komentarz lub dodaj odpowiedź (trackback): Trackback URL.

Skomentuj

Twój adres email nie zostanie opublikowany i nie będzie rozpowszechniany. Wymagane pola są oznaczone *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>