Apr 02

Testowanie szybkości wykonywania SQLi

Tag: MySQLdooshek @ 09:12

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:

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.

Leave a Reply