Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите с пониманием работы SQL  [new]
STsarionov
Member

Откуда:
Сообщений: 105
Добрый день.
Имеется MS SQL Server 2012 sp1(cu5).
Имеем 100 процессов запущенных одновременно и пытающихся считать одни и те же данные. В итоге получаю ситуацию интересную: почти все процессы висят с ожиданием ресурса одной и той же страницы данных. Т.е. они по очереди все разом читают одни и те же страницы данных.
Вопрос: почему они ждут этот ресурс, sql server считав страницу, разве не должен остальным процессам отдавать ее из памяти?
16 окт 13, 10:04    [14978156]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
Гость333
Member

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

— Какой номер у этой страницы?
— Какой тип ожидания?
16 окт 13, 10:06    [14978172]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
STsarionov
Т.е. они по очереди все разом читают одни и те же страницы данных.
Вопрос: почему они ждут этот ресурс


это домыслы? читатели не блокируются между собой...
16 окт 13, 10:07    [14978177]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
STsarionov
почему они ждут этот ресурс, sql server считав страницу, разве не должен остальным процессам отдавать ее из памяти?

Потому что они все хотят прочитать эту станицу эксклюзивно ?
16 окт 13, 10:08    [14978183]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
STsarionov
Member

Откуда:
Сообщений: 105
5:10:125057448 такой к примеру номер страницы, PAGEIOLATCH_SH - такой вот типа ожидания.
Подумалось бы, что проблема в дисках, но проверял, очереди к диску где лежит 10 файл базу, нет. Время отклика 3-5мс.

Про блокировки не говорил. Процессы не блокируются, они просто все дружно читают одну и ту же страницу данных. Сначала одну.. потом другую, потом третью.
Как раз странность данного поведения и вынудила обратиться на форум за помощью.
16 окт 13, 10:29    [14978299]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
pkarklin
Member

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


PAGEIOLATCH_SH

Occurs when a task is waiting on a latch for a buffer that is in an I/O request. The latch request is in Shared mode. Long waits may indicate problems with the disk subsystem.
16 окт 13, 11:03    [14978540]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5133
STsarionov,
1) запустите профайлер, промониторьте им
2) перепишите код
16 окт 13, 11:06    [14978554]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5133
а вообще - если таблицы большие - то это необязательно медленный винт, дело может оказаться в недостаточном количестве памяти
16 окт 13, 11:10    [14978597]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
Гость333
Member

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

Что находится в этой странице данных? Какая-то мелкая и часто используемая справочная таблица, или большая таблица?

Если мелкая — надо разбираться, почему она выдавливается из кэша. Если большая — то разбираться, что такое делают эти 100 процессов, смотреть их запросы, планы этих запросов.
16 окт 13, 11:16    [14978636]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
STsarionov
Member

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

Что находится в этой странице данных? Какая-то мелкая и часто используемая справочная таблица, или большая таблица?

Если мелкая — надо разбираться, почему она выдавливается из кэша. Если большая — то разбираться, что такое делают эти 100 процессов, смотреть их запросы, планы этих запросов.


большая таблица, больше 1ккк записей. Т.е. есть предположение, что память забита и все процессы читают с диска по этой причине, т.е. загрузил ее процесс в память.. выкинуло оттуда, загрузил второй и т.д.?
16 окт 13, 11:24    [14978677]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
Гость333
Member

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

В этой странице индекс или данные? Листовой уровень или промежуточный? Планы запросов какие?
Если, к примеру, 100 процессов выполняют full scan таблицы, то это что-то очень странное — зачем так много процессов? Для чего они предназначены вообще?
16 окт 13, 11:50    [14978917]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
STsarionov
Member

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

В этой странице индекс или данные? Листовой уровень или промежуточный? Планы запросов какие?
Если, к примеру, 100 процессов выполняют full scan таблицы, то это что-то очень странное — зачем так много процессов? Для чего они предназначены вообще?


в странице данные, фул скан не делается, идет index seek. А много процессов, ну это так у нас многопоточность реализована:)

В принципе понимаю, что надо править код, но надежда на чудо была, вдруг я какую-то галочку не знаю, включу и залетает все.
16 окт 13, 12:05    [14979020]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
Гость333
Member

Откуда:
Сообщений: 3683
STsarionov
в странице данные, фул скан не делается, идет index seek. А много процессов, ну это так у нас многопоточность реализована:)

Тут как бы сразу возникает вопрос, почему эти самые многие потоки лезут в одни и те же данные?

Например, можно разделить потоки по дате/времени. Или по диапазонам ID. Или по набору клиентов. Да хоть по хэшу какому-нибудь. В любом из этих случаев я бы ожидал минимального пересечения IO.

Но если все сто потоков обращаются к одним и тем же страницам, то, возможно, плохо реализовано распределение данных по потокам?
16 окт 13, 12:11    [14979063]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
STsarionov
Member

Откуда:
Сообщений: 105
Гость333
STsarionov
в странице данные, фул скан не делается, идет index seek. А много процессов, ну это так у нас многопоточность реализована:)

Тут как бы сразу возникает вопрос, почему эти самые многие потоки лезут в одни и те же данные?

Например, можно разделить потоки по дате/времени. Или по диапазонам ID. Или по набору клиентов. Да хоть по хэшу какому-нибудь. В любом из этих случаев я бы ожидал минимального пересечения IO.

Но если все сто потоков обращаются к одним и тем же страницам, то, возможно, плохо реализовано распределение данных по потокам?


разработчиков озадачил. Но понимание такого поведения сервера все же не пришло. Почему он считав одним потоком, не отдает это остальным.
16 окт 13, 12:23    [14979164]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
STsarionov
Но понимание такого поведения сервера все же не пришло. Почему он считав одним потоком, не отдает это остальным.

Так что вы проверили, кроме списка соединений и очереди к диску ?
% попадания в кэш ?
Список ожиданий ?
...
16 окт 13, 12:40    [14979307]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
STsarionov
Member

Откуда:
Сообщений: 105
Glory
STsarionov
Но понимание такого поведения сервера все же не пришло. Почему он считав одним потоком, не отдает это остальным.

Так что вы проверили, кроме списка соединений и очереди к диску ?
% попадания в кэш ?
Список ожиданий ?
...


список ожиданий. А % попадания в кеш как посмотреть?
16 окт 13, 13:02    [14979524]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
STsarionov
список ожиданий

Мне кажется, что вы под списком ожиданий понимаете нечто другое
16 окт 13, 13:03    [14979537]     Ответить | Цитировать Сообщить модератору
 Re: помогите с пониманием работы SQL  [new]
STsarionov
Member

Откуда:
Сообщений: 105
Glory
STsarionov
список ожиданий

Мне кажется, что вы под списком ожиданий понимаете нечто другое


SELECT wt.session_id, wt.wait_type
, er.last_wait_type AS last_wait_type
, wt.wait_duration_ms
, wt.blocking_session_id, wt.blocking_exec_context_id, resource_description
FROM sys.dm_os_waiting_tasks wt
JOIN sys.dm_exec_sessions es ON wt.session_id = es.session_id
JOIN sys.dm_exec_requests er ON wt.session_id = er.session_id
WHERE es.is_user_process = 1 --and wt.session_id=268
AND wt.wait_type <> 'SLEEP_TASK'
ORDER BY wt.wait_duration_ms desc
вот так смотрю ожидания

а ожидания ушли когда создал кластерный индекс. В плане запроса особых нареканий кроме heap lookup не было. Сделал кластерный индекс и все заработало очень быстро и без ожиданий. Теперь надо повоевать с разработчиками чтобы они дали мне его оставить:)
16 окт 13, 15:30    [14980778]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить