Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
Всем привет. Гугл - слабак. Ищу помощи у вас )) Есть тестовый сервак. Mssql2017/14.0.1000.169 Поставили в него раздельно пару ssd. Получили такую странную картинку... Просто в ОС копирование случайных файлов (мелкие или крупные) выполняются быстро. Скорость ~500Мб/с, что соответствует характеристикам диска. 500Мб мелких без проблем пролетают за секунду В SQL же любое тривиальное сканирование кластерного индекса застревает на отметке 50Мб/с (иногда до 100М/с доходит). При этом гарантировано имеем PageIoLatch_SH на страницах читаемой таблицы. При этом % загрузки диска 100%, а очередь доходит до пары тысяч! Откуда? В ОС производительность отличная. Проблема только в SQL. Игрался с Select: with nolock, maxdop 1 or 4 or 0 - никакой погоды не делают... На сервере никакой параллельной нагрузки нет. Если параллельно к сканированию что либо выполнять в СУБД - все явно тупит. В топе ожидание - Buffer IO (кэп). Что не так с экземпляром SQL? Что стоит проверить? Наведите на мысли, плиз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 22:19 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
nvvПросто в ОС копирование случайных файлов (мелкие или крупные) выполняются быстро. Скорость ~500Мб/с, что соответствует характеристикам диска. 500Мб мелких без проблем пролетают за секунду В SQL же любое тривиальное сканирование кластерного индекса застревает на отметке 50Мб/с (иногда до 100М/с доходит).А в ресурс-мониторе что? Какая очередь к диску, к каким файлам обращается, какие responce time к файлу? Как при этом загружен процессор? На виртуалке или в реале? Сканирование в какой операции? То есть сервер что сервер делает с этими данными? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 23:48 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
nvvПоставили в него раздельно пару ssd.Да, и что делали с дискамим? Объединяли? Отдельно - это отдали оба серверу? Какие файлы положили, данные и лог вместе на один диск, на разные? ОС там же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 23:50 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
alexeyvg, сканирование в операции select ) читается последовательно таблица. Результат - пару строк. CI - Period Select Period, sum(1) From Table Where Period Between ... and ... Group by Period Или это может быть Select Count(*) (выберите любой или предложите свой для теста) В мониторе - то что я написал выше, в предыдущем посте. Читается только один файл - database MDF очередь скачет на неадекватных значениях (много сотен, иногда - тысяч), задержка - 150-250мс Сейчас скорость скачет 40-120Мбс... Здесь ОС на отдельном диске. (при этом на любых других машинах - легко достигает 500, даже если там же ОС) На данном диске - только базы. Объем фактически читаемых в тесте данных судя по фактическому плану - до гига. физическая машина, физические диски ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 00:36 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
nvvПоставили в него раздельно пару ssd. Получили такую странную картинку...Ничего странного, ссд быстрые, но в однопользовательком режиме. Для сервака нужно ставить "all flash array" минимум, а не пукалку из двух шпинделей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 02:14 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
Данные что ли фрагментированы? Давно ребилдили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 07:43 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
nvvalexeyvg, сканирование в операции select ) читается последовательно таблица. Результат - пару строк. CI - Period Select Period, sum(1) From Table Where Period Between ... and ... Group by Period Или это может быть Select Count(*) (выберите любой или предложите свой для теста)Ясно, я на всякий спросил, может, дело в передаче данных клиенту... nvvочередь скачет на неадекватных значениях (много сотен, иногда - тысяч), задержка - 150-250мсЗадержка - это задержка самого диска, то есть не от постановки в очередь до ответа, а от начала обработки первого в очереди запроса до ответа. Для SSD это чень много, должно быть 1 мс. Так что ИМХО это проблема с драйверами/диском. Скорее, с драйверами, т.к. диска же 2, и у обоих одна проблема. Драйверы - это не только сам драйвер, а вообще вся цепочка, т.е. скорее это что то в виндах, а не в драйвере производителя дисков. Relic HunterНичего странного, ссд быстрые, но в однопользовательком режиме.Бытовые ссд быстрее в "многопользовательском" режиме. Вот смешанную нагрузку не все любят, это да. nvvпри этом на любых других машинах - легко достигает 500На других машинах такие же диски, ОС? 500 - имеется в виду то же сканирование в сиквеле? Модель дисков какая, если не секрет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 08:34 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
Relic Hunter, alexeyvg, Коллеги, спасибо за ответы. Ввел немного в заблуждение себя и вас. Прошу прощения... Проблемный диск оказался из raid0 из 4x hdd. Бюджетная тестовая машинка. Нагрузки выросли. Вместо десятка уже сотня разношерстных копий баз - поэтому стали обращать внимание на подтормаживания. Базы и данные не повторяются. Это тестовые копии заказчиков. Какие ребилды на копиях?)) Фрагментация прямо в исходнике клиента - очень вероятна... Чтение данных другой произвольной базы может давать немного лучшие результаты. А может и не давать. Вроде как все теперь понятно... Именно в однопользовательском режиме и только из sql и только на этой машине неудовлетворительная производительность. Очень странно, что ОС умудряется читать очень быстро прозвольный пакет файлов и не собирая таких очередей. Опять же вопрос к фрагментированности данных... Однако, провел такой опыт: создал пустые базы на разных дисках. Выполнил Select Into одинаковых данных в целевые базы (25 млн записей до 2016 года). Последовательная куча, индекс нигде не создавал. Читаю все Select Count(*) Перед каждым чтением сбрасывал буфер для обеспечения физических чтений. (У меня это как-то не очень получилось, DROPCLEANBUFFERS не помогает, физических чтений - нет, есть логические и упреждающие. ЧЯДНТ?) Как-то так: число просмотров 1, логических чтений 492581, физических чтений 0, упреждающих чтений 492581, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0. Чтения на первый взгляд ничего нового не показали, но цифра была все же выше... SSD показал до 500Мбс, hhd x4 raid0 - 250Мбс, hdd x4 raid10 - 200Мбс Создал кластерные индексы для чистоты эксперимента - все тоже самое ;) Ну и напоследок еще раз прочитал те же данные (что и вставлял в отдельные базы) из исходной базы: сама база 450+Гб, топовая таблица 140Гб - читаю из нее. Число просмотров 1, логических чтений 395701, физических чтений 5, упреждающих чтений 395929, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0. Скорость не более 50-100 (база на диске hhd x4 raid0) Итого наиболее вероятный ответ: фрагментация. PS: почему на одних и тех же данных (исходных и скопированных) разное количество чтений? Почему в скопированных данных нет физических чтений, а в исходных - есть? Почему их только 5, или целых 5?(запрос выполнялся многократно со сбросом буфера - цифры не менялись) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 10:18 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
nvvЧто не так с экземпляром SQL? Что стоит проверить? Наведите на мысли, плиз...Читайте - https://www.sqlshack.com/how-to-analyze-storage-subsystem-performance-in-sql-server/ nvvИтого наиболее вероятный ответ: фрагментация.Гадание на кофейной гуще никогда не давало результата. Проверьте фрагментацию с помощью sys.dm_db_index_physical_stats nvvПочему в скопированных данных нет физических чтений, а в исходных - есть? Почему их только 5, или целых 5?(запрос выполнялся многократно со сбросом буфера - цифры не менялись)Читайте что такое "упреждающие чтения" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 11:39 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
nvvлогических чтений 492581, физических чтений 0, упреждающих чтений 492581Упреждающие чтения - это физические чтения, выполненные в режиме упреждающих. Так что всё нормально, никакого чуда :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 17:08 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
по марке ссд надо на техфоруме спрашивать возможна специфика по быстродействию на разной глубине очереди и при большом количестве параллельных операций также надо убедиться в активации ncq/trim ну и идти туда лучше с указанием матплаты и ос может и в техподдержке что ответят как вариант - можно запилить себе виртуальный диск, например ImDisk и посмотреть, если там тоже тормоза будут - значит, не в дисках дело тогда в разделе операционок спрашивать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 19:04 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
invm, спасибо напомнили про dmv. Всего 41 минута и я получил ее вывод ) Такие дела. На исследуемой таблице (она самая большая, но не самая проблемная): из 7 млн страниц - 32% фрагментировано. авторГадание на кофейной гуще никогда не давало результата. Целиком согласен. Но общий процент фрагментации очень слабо характеризует причины деградации IO. Из 300млн+ строк таблицы я исследую поведение только первых 25 млн. Поэтому общий показатель - так себе характеристика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 23:18 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
nvvНо общий процент фрагментации очень слабо характеризует причины деградации IO. Из 300млн+ строк таблицы я исследую поведение только первых 25 млн. Поэтому общий показатель - так себе характеристика.32% - это достаточно много. Если фрагментация равномерная, то на первых 25 млн она работает точно так же, как на остальных данных. Понятно, что это только возможность. Может, первые 25 млн не дефрагментированы? Тем не менее, она есть, скорее всё таки они фрагментированы так же, как остальное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 23:32 |
|
||
|
MSSQL медленно читает диск + создает очередь
|
|||
|---|---|---|---|
|
#18+
nvvПочему в скопированных данных нет физических чтений, а в исходных - есть?В скопированных данных нет фрагментации, поэтому там физические чтения делаются с упрежджением, а в исходных есть фрагментация, поэтому там без упреждения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 23:35 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39804197&tid=1687927]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 420ms |

| 0 / 0 |
