Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Привет
большая база - 500 гигов
много таблиц по 3-4 гига
оперативки 16 гигов
делаю на клиенте запрос - select * from table where time between
запрос возвращает 100К ( примерно 5% от таблицы) записей за 10 секунд но как только последняя запись ко мне приходит я еще жду почти минуту чего то. такое впечатление что сервер после выполнения этого запроса закачивает в себя какой то индекс
странность в том что я реально быстро получаю на клиенте нужные мне данные - но после получения последней строки recordset долго думает а не последняя ли это строка.

подскажите что оттрасировать чтобы понять что происходит
P.S. может ли быть что при обращении к таблице которая не в памяти - даже при запросе небольшого кусочка данных - таблица или запрашиваемые индексы считываются в память полностью или с избытком?
22 фев 13, 11:25    [13965620]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
я еще жду почти минуту чего то


Ждет Ваше клиентское приложение? Трассу профайлером снимали, чтобы сравнить момент, когда сервер закончил обработку бача с временем, когда Ваше приложение "откликнулось"?
22 фев 13, 11:27    [13965642]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Alexander_fx,

План запроса смотрели? Если тот же запрос выполнить из SSMS, будет такое же поведение?

автор
может ли быть что при обращении к таблице которая не в памяти - даже при запросе небольшого кусочка данных - таблица или запрашиваемые индексы считываются в память полностью или с избытком?

Может. Например, пусть сервер выбрал для вашего запроса Clustered Index Scan (а при чтении 5% таблицы скорее всего так и будет), и столбец time не является первым столбцом кластерного индекса. При этом случилось так, что все необходимые данные находятся где-то в начале индекса (например, в первых 10% страниц). Но сервер этого не знает, он должен прочитать всю таблицу. То есть за первые 10% времени будет получен весь результат, а остальные 90% сервер будет считывать данные, проверять условие "where time between", но ни одна запись в итоговый набор не попадёт.
22 фев 13, 11:53    [13965843]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander_fx
запрос возвращает 100К ( примерно 5% от таблицы) записей за 10 секунд но как только последняя запись ко мне приходит

Это вы в своем программном коде увидели, что "запись приходит" ? Т.е. вы ее прочитали и отобразили на экране ?
22 фев 13, 11:56    [13965872]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Glory,

да
я в клиентском коде получаю рекордсет и вижу что получил запись после которой идет пауза и больше ничего не приходит
22 фев 13, 12:00    [13965909]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander_fx
я в клиентском коде получаю рекордсет и вижу что получил запись после которой идет пауза и больше ничего не приходит

Это как интересно ?
- вы прочитали последнюю запись
- вывели ее на экран
- и тут возникает задержка в минуту до следующей команды вашего кода ?
22 фев 13, 12:03    [13965922]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Гость333,

я как этого избежать?
таблица большая и клепать лишние индексы под конкретные запросы не очень хочется
22 фев 13, 12:03    [13965924]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Glory,

да именно так
22 фев 13, 12:07    [13965950]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander_fx
да именно так

И почему вы думаете, что это не следующая строка вашего кода тормозит ?
22 фев 13, 12:09    [13965967]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Glory,

ошибся с запросом там не between и видимо это все меняет
очевидно надо делать индекс по полям index1 и index2

таблица 5 гигов

кластерный индекс index1
индекс 2

select * from tbl where index1>1 and index2<999

do while read
.....
print index2
loop

msgbox "comleted"

вижу что получил записи 998 - и только через минуту вижу сообщение "comleted"
22 фев 13, 12:28    [13966115]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Alexander_fx
select * from tbl where index1>1 and index2<999

А теперь выложите план выполнения этого запроса, поглядим, что там.
22 фев 13, 12:33    [13966150]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Гость333,

а уже пофиксил хитрым маневром
чтобы не грузить сервер чтением не кластерного индекса

убрал and index2<999
select * from tbl where index1>1

и на клиенте делаю проверку принимаемых данных
if index2>999 then sql.ABORT

и серверу не приходиться считывать индекс и новго не надо делать и не получаю ничего лишнего
на первый взгляд решение устраивает
22 фев 13, 12:39    [13966198]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander_fx
вижу что получил записи 998 - и только через минуту вижу сообщение "comleted"

Если вы уже получили "записи 998", то какое отношение сервер имеет к скорости выполнения вашего клиентского msgbox "comleted" ?
22 фев 13, 12:41    [13966216]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Alexander_fx
и серверу не приходиться считывать индекс и новго не надо делать и не получаю ничего лишнего
на первый взгляд решение устраивает

И всё это подтверждается планами выполнения, статистикой IO и прочим? Или просто таблица закэшировалась в памяти, и запросы к ней пока что выполняются быстрее (до вытеснения таблицы из кэша)?
22 фев 13, 12:50    [13966280]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Glory
Alexander_fx
вижу что получил записи 998 - и только через минуту вижу сообщение "comleted"

Если вы уже получили "записи 998", то какое отношение сервер имеет к скорости выполнения вашего клиентского msgbox "comleted" ?


дык а кто имеет

do while recordset read

loop


вот тут минута после того как получил последнюю запись в цикле loop

msgbox "готово"
22 фев 13, 15:08    [13967393]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander_fx
вот тут минута после того как получил последнюю запись в цикле loop

И причем тут сервер, если он вам вернул все записи ?
22 фев 13, 15:09    [13967400]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Гость333
Alexander_fx
и серверу не приходиться считывать индекс и новго не надо делать и не получаю ничего лишнего
на первый взгляд решение устраивает

И всё это подтверждается планами выполнения, статистикой IO и прочим? Или просто таблица закэшировалась в памяти, и запросы к ней пока что выполняются быстрее (до вытеснения таблицы из кэша)?


из перечисленных пунктов подтверждается только третьим пунктом
клиент получает то что надо сразу и не ждет окончания запроса
сервер сразу после Cansell - перестает читать таблицу
22 фев 13, 15:10    [13967404]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Glory
Alexander_fx
вот тут минута после того как получил последнюю запись в цикле loop

И причем тут сервер, если он вам вернул все записи ?


он вернул все записи но не сказал что закончил
потому как сам не был уверен что все
и подумав минуту говорит - ну все
22 фев 13, 15:11    [13967415]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Alexander_fx
он вернул все записи но не сказал что закончил
потому как сам не был уверен что все
и подумав минуту говорит - ну все


Вы подтвердите это трассой профайлера?
22 фев 13, 15:13    [13967436]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander_fx
он вернул все записи но не сказал что закончил

А как он обычно "говорит", что закончил ?

Alexander_fx
потому как сам не был уверен что все
и подумав минуту говорит - ну все

msgbox - это вы называете "он говорит" ?
22 фев 13, 15:13    [13967438]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Glory
Alexander_fx
он вернул все записи но не сказал что закончил

А как он обычно "говорит", что закончил ?

Alexander_fx
потому как сам не был уверен что все
и подумав минуту говорит - ну все

msgbox - это вы называете "он говорит" ?


dim reader =SqlClient.SqlDataReader

do while reader.read
loop
msgbox "я закончил"

в случае если нет ошибок выполнения то именно сервер говорит я закончил
22 фев 13, 15:17    [13967469]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander_fx
в случае если нет ошибок выполнения то именно сервер говорит я закончил

Офигеть.
А если написать
msgbox "я сбегал за пивом"
, то когда я оглянусь, сзади стоять сервер с бутылкой пива ?
22 фев 13, 15:19    [13967485]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Glory
Alexander_fx
в случае если нет ошибок выполнения то именно сервер говорит я закончил

Офигеть.
А если написать
msgbox "я сбегал за пивом"
, то когда я оглянусь, сзади стоять сервер с бутылкой пива ?


ну да
а у тебя не бегает?
у меня mssql 2008
:)
22 фев 13, 15:21    [13967501]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander_fx
ну да
а у тебя не бегает?
у меня mssql 2008

Я так понимаю, что вы просто не знаете, что на самом деле ваш чудо-код выполняет на сервере.
А что на клиентской машине.
22 фев 13, 15:24    [13967530]     Ответить | Цитировать Сообщить модератору
 Re: Помогите . Что то странное происходит про запросе  [new]
Alexander_fx
Member

Откуда:
Сообщений: 657
Glory
Alexander_fx
ну да
а у тебя не бегает?
у меня mssql 2008

Я так понимаю, что вы просто не знаете, что на самом деле ваш чудо-код выполняет на сервере.
А что на клиентской машине.


тоесть вы исключаете возможность когда сервер отдаст фактические данные до того как закончит выполнять запрос до конца?
в моем случае я знаю что как только я получил index2>998 там ловить нечего и меня это устраивает
а серверу для этого надо прочитать весь индекс большого размера
22 фев 13, 15:29    [13967578]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить