Apr 02
Testowanie szybkości wykonywania SQLi
Zapewne 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:
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.
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.
Tu chyba wszystko jest jasne - wystarczy dodać słowo kluczowe SQL_NO_CACHE PO wyrażeniu SELECT i zapytanie nie będzie już cachowane.
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.
