Ĺadny brzuch
Witam.
Mam następujące pytanie. Czy wie ktoś może, czy da się z poziomu MySQL-a, Oracle-a i MSSQL-a, albo z odpowiedniego komponentu w Delphi pozyskać informację, o czasie wykonywania zapytania w w/w bazach? Nie interesują mnie wyniki zapytania, liczy się tylko czas w jakim baza zwróci wyniki konkretnego zapytania. Taka informacja jest np. w MySQL-u na samym dole po wykonaniu zapytania np.:
SELECT f_name, l_name from employee_data where f_name = 'John'; +--------+------------+ | f_name | l_name | +--------+------------+ | John | Hagan | | John | MacFarland | +--------+------------+ [color="#FF0000"]2 rows in set (0.00 sec)[/color]
Z tego co wiem to istnieje funkcja benchmark w MySQL, i ewentualnie ona mi zapewni pozyskiwanie wyników. Ale czy istnieje coś takiego w Oracle i MSSQL?? Czy istnieje coś innego w MySQL co przechowuje taki czas? A może jakiś komponent w Delphi poradzi sobie z tym?
Z góry dziękuję za pomoc.
Pozdrawiam
Co do Oracle:
http://groups.google...c4e36abb0736bb/
Dla MSSQL można skorzystać z Profilera. Odpalasz go, a następnie wykonujesz jakieś zapytanie. Wypluje on różne dane, w tym godzinę rozpoczęcia i zakończenia. Sam go nigdy nie używałem, więc nie wiem, czy da się później te dane jakoś programowo wyciągnąć i parsować.
Ale przykładowo w takim php do oszacowania czasu wykonania można skorzystać z funkcji microtime
$startTime = microtime(true); //mssql_query(); $totalTime = microtime(true) - $startTime;
$startTime = microtime(true); //mssql_query(); $totalTime = microtime(true) - $startTime;
tak to mozna wszedzie, ale wyniki moga byc bardzo mylne, bo czas przesylu danych z serwera moze byc dluzszy niz samo wykonanie zapytania - a ten sposob podaje laczny czas.
tak to mozna wszedzie, ale wyniki moga byc bardzo mylne, bo czas przesylu danych z serwera moze byc dluzszy niz samo wykonanie zapytania - a ten sposob podaje laczny czas.
To nic że podaje łączny czas. Chodzi mi o to, by napisać program testujący, benchamrk sprawdzający jaka jest różnica między pozyskiwaniem czystych rekordów, a rekordów zaszyfrowanych np. AESem. Tak więc generalnie nie interesuje mnie czy wyciąganie wyników bedzie trwało minutę czy 10sekund, a jedynie różnica między pozyskaniem wyników z w/w warunkami.
Jak ktoś ma jeszcze jakieś pomysły to proszę pisać...
Pozdrawiam
tak to mozna wszedzie, ale wyniki moga byc bardzo mylne, bo czas przesylu danych z serwera moze byc dluzszy niz samo wykonanie zapytania - a ten sposob podaje laczny czas.
Niestety miałeś rację... Nie zależało mi na wartości czasu, ale na względnej jego stabilności. Niestety wykonywanie tego samego zapytania czasem odbywa się nawet 10x dłużej niż wykonanie go parę sekund wcześniej... Dla mnie taka rozbieżność jest katastrofalna i nie do zaakceptowania. Pewnie za duży udział mają w tym przestoje serwera itp, a nie zapytanie do bazy.
Ponawiam wiec pytanie, jak ktoś wie jak sobie poradzić z tym zagadnieniem w MySQL, albo za pośrednictwem PHP, proszę o odpowiedź.
Pozdrawiam
Niestety muszę stwierdzić że funkcja profili w MySQL jest totalną porażką i nie można jej wykorzystywać do pomiarów. Nie wiem po co robić taką funkcję skoro nie spełnia ona swoich założeń, bo jak inaczej można nazwać niestabilność rzędu nawet 300%-500%. Wykonanie jednego zapytania trwa powiedzmy 0.0123, a 5 sek później, wykonanie tego samego zapytania trwa czasami nawet 0.0987 (wartości są zmyślone ale z podobnymi się spotkałem). Straszna niestabilność! Ponadto chciałem wykorzystać tą funkcję do pomiarów szybkości algorytmów szyfrujących, i niczego się nie dowiedziałem. Wyniki są chaotyczne, a na dowód tego może świadczyć fakt, że szyfrowanie metodą DES(który uznawany jest za ok 10x wolniejszy niż np. AES) daje wynik taki sam jak nie użycie szyfrowania w ogóle.
Tym którzy chcą zdiagnozować, czy sprawdzić co jak długo przebiega w MySQL radzę uzyć funkcji benchmark...
Ponadto chciałem zapytać, czy istnieje odpowiednik PROFILES lub BENCHMARK (z MySQL) w MS SQL bądź Oracle(jest AUTOTRACE ale daje on wynik w sekundach :/) ?? A może w tych systemach da się inaczej zmierzyć szybkość wykonywania zapytań??
Pozdrawiam
Ta niestabilnosc wynikow moze byc wynikiem nie zlych funkcji, tylko samego serwera - jesli to serwer wspoluzytkowany przez innych (a pewnie tak jest), to wez pod uwage ze w pewnym momencie moze wykonywac tylko twoje zapytanie, a w innym - twoje razem ze 100 innymi. Jesli mierzyc czas wykonywania, to tylko na dedyku - mozesz sam postawic jakis serwer chocby na lokalnej maszynie i wyniki i tak beda o niebo bardziej trafne niz na zwyklym wspoldzielonym serwerze (a jesli chodzi ci o relatywna wydajnosc to wystarczy ci wlasnie mierzenie na swoim kompie).
Użytkownik Deadeye edytował ten post 22 sierpień 2008, 11:32
Oczywiście korzystam z lokalnej bazy i tylko ja jej używam. Ponadto sprawdzałem na 3 różnych maszynach jak również 3 różnych systemach MySQL (lokalne i zdalne)...
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mam następujące pytanie. Czy wie ktoś może, czy da się z poziomu MySQL-a, Oracle-a i MSSQL-a, albo z odpowiedniego komponentu w Delphi pozyskać informację, o czasie wykonywania zapytania w w/w bazach? Nie interesują mnie wyniki zapytania, liczy się tylko czas w jakim baza zwróci wyniki konkretnego zapytania. Taka informacja jest np. w MySQL-u na samym dole po wykonaniu zapytania np.:
SELECT f_name, l_name from employee_data where f_name = 'John'; +--------+------------+ | f_name | l_name | +--------+------------+ | John | Hagan | | John | MacFarland | +--------+------------+ [color="#FF0000"]2 rows in set (0.00 sec)[/color]
Z tego co wiem to istnieje funkcja benchmark w MySQL, i ewentualnie ona mi zapewni pozyskiwanie wyników. Ale czy istnieje coś takiego w Oracle i MSSQL?? Czy istnieje coś innego w MySQL co przechowuje taki czas? A może jakiś komponent w Delphi poradzi sobie z tym?
Z góry dziękuję za pomoc.
Pozdrawiam
Co do Oracle:
http://groups.google...c4e36abb0736bb/
Dla MSSQL można skorzystać z Profilera. Odpalasz go, a następnie wykonujesz jakieś zapytanie. Wypluje on różne dane, w tym godzinę rozpoczęcia i zakończenia. Sam go nigdy nie używałem, więc nie wiem, czy da się później te dane jakoś programowo wyciągnąć i parsować.
Ale przykładowo w takim php do oszacowania czasu wykonania można skorzystać z funkcji microtime
$startTime = microtime(true); //mssql_query(); $totalTime = microtime(true) - $startTime;
$startTime = microtime(true); //mssql_query(); $totalTime = microtime(true) - $startTime;
tak to mozna wszedzie, ale wyniki moga byc bardzo mylne, bo czas przesylu danych z serwera moze byc dluzszy niz samo wykonanie zapytania - a ten sposob podaje laczny czas.
tak to mozna wszedzie, ale wyniki moga byc bardzo mylne, bo czas przesylu danych z serwera moze byc dluzszy niz samo wykonanie zapytania - a ten sposob podaje laczny czas.
To nic że podaje łączny czas. Chodzi mi o to, by napisać program testujący, benchamrk sprawdzający jaka jest różnica między pozyskiwaniem czystych rekordów, a rekordów zaszyfrowanych np. AESem. Tak więc generalnie nie interesuje mnie czy wyciąganie wyników bedzie trwało minutę czy 10sekund, a jedynie różnica między pozyskaniem wyników z w/w warunkami.
Jak ktoś ma jeszcze jakieś pomysły to proszę pisać...
Pozdrawiam
tak to mozna wszedzie, ale wyniki moga byc bardzo mylne, bo czas przesylu danych z serwera moze byc dluzszy niz samo wykonanie zapytania - a ten sposob podaje laczny czas.
Niestety miałeś rację... Nie zależało mi na wartości czasu, ale na względnej jego stabilności. Niestety wykonywanie tego samego zapytania czasem odbywa się nawet 10x dłużej niż wykonanie go parę sekund wcześniej... Dla mnie taka rozbieżność jest katastrofalna i nie do zaakceptowania. Pewnie za duży udział mają w tym przestoje serwera itp, a nie zapytanie do bazy.
Ponawiam wiec pytanie, jak ktoś wie jak sobie poradzić z tym zagadnieniem w MySQL, albo za pośrednictwem PHP, proszę o odpowiedź.
Pozdrawiam
Niestety muszę stwierdzić że funkcja profili w MySQL jest totalną porażką i nie można jej wykorzystywać do pomiarów. Nie wiem po co robić taką funkcję skoro nie spełnia ona swoich założeń, bo jak inaczej można nazwać niestabilność rzędu nawet 300%-500%. Wykonanie jednego zapytania trwa powiedzmy 0.0123, a 5 sek później, wykonanie tego samego zapytania trwa czasami nawet 0.0987 (wartości są zmyślone ale z podobnymi się spotkałem). Straszna niestabilność! Ponadto chciałem wykorzystać tą funkcję do pomiarów szybkości algorytmów szyfrujących, i niczego się nie dowiedziałem. Wyniki są chaotyczne, a na dowód tego może świadczyć fakt, że szyfrowanie metodą DES(który uznawany jest za ok 10x wolniejszy niż np. AES) daje wynik taki sam jak nie użycie szyfrowania w ogóle.
Tym którzy chcą zdiagnozować, czy sprawdzić co jak długo przebiega w MySQL radzę uzyć funkcji benchmark...
Ponadto chciałem zapytać, czy istnieje odpowiednik PROFILES lub BENCHMARK (z MySQL) w MS SQL bądź Oracle(jest AUTOTRACE ale daje on wynik w sekundach :/) ?? A może w tych systemach da się inaczej zmierzyć szybkość wykonywania zapytań??
Pozdrawiam
Ta niestabilnosc wynikow moze byc wynikiem nie zlych funkcji, tylko samego serwera - jesli to serwer wspoluzytkowany przez innych (a pewnie tak jest), to wez pod uwage ze w pewnym momencie moze wykonywac tylko twoje zapytanie, a w innym - twoje razem ze 100 innymi. Jesli mierzyc czas wykonywania, to tylko na dedyku - mozesz sam postawic jakis serwer chocby na lokalnej maszynie i wyniki i tak beda o niebo bardziej trafne niz na zwyklym wspoldzielonym serwerze (a jesli chodzi ci o relatywna wydajnosc to wystarczy ci wlasnie mierzenie na swoim kompie).
Użytkownik Deadeye edytował ten post 22 sierpień 2008, 11:32
Oczywiście korzystam z lokalnej bazy i tylko ja jej używam. Ponadto sprawdzałem na 3 różnych maszynach jak również 3 różnych systemach MySQL (lokalne i zdalne)...