Tagi na forum.

Windows 14206 SQL Server 2132
sieci 6796 Windows XP 1922
SQL 6578 Outlook 1838
SBS 3868 Uprawnienia 1777
Windows 2003 2781 IIS 1636
Windows Server 2588 Office 1516
DNS 2315 Skrypt 1499

pokaż wszystkie tagi na forum

Remote query vs local query (problemy z pamięcią?)

mahoney 2012-01-31 11:36:37
0
avatar
 
 

Witam,

Dawno mnie tu nie było :)

Panowie mam pytanie. Zaobserwowałem dość dziwne zjawisko. Odpytuję zdalny serwer (linked server) w obrębie tej samej podsieci. Proste zapytanie SELECT xxx from. Na maszynie lokalnej zapytanie trwa niecałą 1/10 sekundy a na serwerze zdalnym około 20 sekund. Próbowałem wykonać zapytanie z wykorzystaniem openquery i wynika taki sam.

Teraz co zrobiłem. Na serwerze lokalnym wyczyściłem pamięć podręczną dla procedur, bufory itp.DBCC DROPCLEANBUFFERS, DBCC FREEPROCCACHE i nagle zapytanie zdalne działa tak samo szybko jak lokalne. Pytanie czym to jest spowodowane? Sprawę będę dalej badał o przyznam się, że nie zerknąłem przed komendami DBCC na stan pamięci serwera ale przypuszczam, że sytuacja się powtórzy a wtedy się tym zajmę jak należy.


tagi: MCA
SQL poznaję...
Liczba postów:

MarkusBass  2012-01-31 15:30:35 #1
0
avatar
 
 

A czy to jest duża tablica i czy w tym zapytaniu jest jakiś warunek WHERE (i jeśli tak, to czy istnieje odpowiedni indeks)? A na jakim użytkowniku to wykonujesz? Może to jest kwestia nie tyle zapytania, co weryfikacji użytkownika przed zapytaniem? Zawsze możesz odpalić Profilera na tym serwerze i zobaczysz co się dzieje. 


mahoney  2012-01-31 16:42:51 #2
0
avatar
 
 

Jest warunek "WHERE", ale przypomnę, że po wykonaniu DBCC... problem zniknął. Oo tego momentu wszystko działa poprawnie.


SQL poznaję...
MarkusBass  2012-01-31 16:58:59 #3
0
avatar
 
 

Ja zadałem przynajmniej 4 pytania, a Ty odpowiedziałeś jedynie na jedno. Jeśli tabela jest duża, to mogę jedynie zgadywać, że zapytanie miało nieprawidłowy plan wykonania. Tak może sią zdarzyć z różnych powodów, n.p. jeśli zawartość tabeli zmienia się z małej na dużą, albo brak indeksów, lub coś podobnego. Trzeba było nic nie czyścić tylko odpalić Profilera na tym drugim serwerze i zobaczyć co się dzieje.


mahoney  2012-01-31 17:12:38 #3.1
0
avatar
 
 

dobra.

Tabela jest mała 15tys. rekordów joinowana z tabelą 7 tys. rekordów. Wynik zwraca około 4 tys. rekordów. Na tabeli nic się nie zmieniło, statystyki (aktualne) a indeksy są. Przez ten czas nie było żadnych bulk insertów czy kasowań rekordów. Co do profilera to wiem i zdaję sobie z tego sprawę ale teraz zadałem pytanie tylko i wyłącznie dlatego, że nie rozumiem jak to możliwe, że to samo zapytanie wykonywane z serwera zdalnego i lokalnie na serwerze wykonuje się z różnymi czasami. Plan zapytania faktycznie mógł być niepoprawny. Sprawdzałem jeszcze zapytanie z innego serwera i efekt był podobny (długie czasu odpowiedzi). 

Poczekam do następnego razu (o ile takowy nastąpi) i wtedy będę miał więcej informacji. Dzięki


SQL poznaję...
MarkusBass  2012-01-31 18:14:02 #4
0
avatar
 
 

Hmm, miało być jedno proste zapytanie "SELECT xxx from". Teraz widzę, że jednak jest join dwóch tabel. A czy jedna z nich nie jest przypadkiem lokalna :-)?

Najlepiej by było gdybyś podał SQL do CREATE TABLE i samo zapytanie. Czy stwierdzenie, że "indeksy są" dotyczy ogólnie indeksów, czy dotyczy pól, które są użyte do złączenia obu tabel? Czy kolumny, które są w warunku WHERE są w indeksie? Takich wątpliwości jest wiele i skrypty by zdecydowanie pomogły.

 

Marek


Udziel odpowiedzi

avatar
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Idź na górę strony