Pull to refresh

Comments 28

Меня (возможно и не только меня) уже на протяжении многих лет в разных проектах преследует спонтанно возникающий глюк у mssql: условно говоря раз в месяц/другой (но строгой периодичности нет) он беспричинно начинает грузить одно ядро процессора и почти перестает отвечать на запросы. Что я только ни делал… обрубал все сетевые коннекты, останавливал сайты, даже рестартовал инстанс- всё равно он сразу возвращался к тормозам. В логах и профайлере никаких признаков ддоса или циклических запросов выявить не могу. Чаще всего помогает ребут винды.

в разделе про анализ активности пользователей (в процессе написания) освещу вопросы как посмотреть кто именно работает, что делает при этом и сколько каких ресурсов потребляет.
надеюсь, статья вам поможет

спасибо, буду рад )) Правда в моем случае я не уверен, что эти проблемы в прямой зависимости от запросов пользователей (ну или учетки движка сайта), ибо тогда оно по-любому отлавливалось бы профайлером.

У нас такое было, когда мы на одном виндовом сервере поставили два Sql Server: Developer Edition (default instance) и Express Edition (named instance). Developer сервер начал безпричинно тормозить, хотя никто его не трогал. Все, что знал из мониторинговых средств, попробовал — ничего страшного не нашел. С выключением и последующим удалением Express сервера тормоза исчезли. Справедливости ради, спустя какое-то время снова попробовал поставить второй инстанс Sql Express, с тех пор они живут дружно уже почти полгода.

Что касается нагрузки на диски — в первую очередь нужно выучить, что такое IOPS и как они связаны с пропускной способностью. И тогда внезапно может стать понятно, что, например, 50Мб/сек на 4K блоках со случайным доступом может быть совсем не мало, и высокая очередь — это никакие не проблемы с железом, а банально недостаточно производительная дисковая.


не смешивайте файлы ОС с файлами данных БД. Размещайте их на физически разных носителях чтобы система не конкурировала с СУБД за ввод-вывод.

А что, разве ОС сама по себе создает какую-то серьезную нагрузку на диски? Разве только при постоянном своппинге, но тогда не о разнесении нагрузки на разные диски думать надо, а совсем о другом. Предлагаю вам на досуге померять, что будет быстрее — ОС + СУБД на RAID-10 из 4-х дисков, или ОС и СУБД на отдельных зеркалах.


И т.д, и т.п.


Резюмируя — на самом деле нужна голова на плечах и минимальное понимание происходящих процессов. Тогда половина рекомендаций в таких статьях сразу окажутся капитанскими, а вторая половина — вредными.

согласен с резюме.
надеюсь статья поспособствует тому, чтобы больше людей стали считать эти советы капитанскими.

Я не вижу, как это может произойти, если вы описываете волшебные пилюли вместо того, чтобы давать понимание. Для примера — ну нельзя понять, что в случае СУБД происходит с нагрузкой на диски, не оперируя понятием IOPS, а вы это даже мимоходом не упоминаете.

исходил из предположения что мсскл пишет данные страницами. в этом случае зависимость между IOPS и Mb/s — линейная.
просто для меня лично удобнее прокачку оценивать в Мб/с, но тут кому как.

При одном постоянном типе нагрузки она, конечно, линейная. Но при этом оперировать скоростью чтения, а не иопсами, может только человек с некоторым опытом. Если начинать с азов, то нужно понимать, чем вообще скорости работы с дисками ограничиваются. А это совершенно разные параметры для случайных и последовательных операций.


Если понимать, что скорость случайного чтения ограничена средним временем поиска, то становится ясно, что, скажем, с 15К SAS HDD с паспортным средним временем поиска 3.3мс вы не снимете больше примерно 300 IOPS, что, например, на 4К блоках даст нам жалкие 1.2 Мбайт/сек. А для Enterprise SATA, которые сейчас весьма популярны, цифры уменьшаются еще вдвое. А, скажем, 50Мбайт/сек в таких условиях можно снять только с массива из минимум 40 15K SAS HDD, что в природе хоть и встречается, но отнюдь не у целевой аудитории вашей статьи.


Поэтому для оценки, насколько адекватно работает система в режиме случайного доступа, в перфмоне смотреть надо вовсе не скорость чтения, а количество операций в секунду (ну или уметь пересчитывать одно в другое).

Автор, скорее всего, имел ввиду не размещать на одном логическом диске файлы mdf и ldf. Т.к. mdf пишется параллельно, а ldf последовательно. Тут может быть гонка на ввод-вывод, если они рядом.
А что, разве ОС сама по себе создает какую-то серьезную нагрузку на диски?

ОС может и не создает, но сам диск может оказаться совсем не производительным. Встречал случаи когда С: создан внутри виртуальной машины которая лежит на общей хранилке с кучей всего остального и производительность там совсем никакая.
В таком случае, вполне разумно файлы БД убрать с С:.
прошу не воспринимать раздел «советы» как руководство к действию, а лучше как «варианты на подумать».
надо будет в следующий раз в статье предупреждение указать :)
У Вас сравнение нечестное. Надо сравнивать ОС+СУБД на RAID10 vs. ОС на RAID10 + СУБД на RAID10.
Разумеется, RAID10 быстрее RAID1 примерно в два раза будет. А ОС не даст такую же нагрузку, как СУБД.

Все честно. Вот есть у нас сервер с N дисками. Тормозит. Мы решаем вынести ОС на отдельное зеркало. Но откуда диски под него взять? При работе в рамках имеющегося оборудования, без апгрейда — только изъять из имеющегося массива. Вот и получаем в реальной жизни сравнение "N дисков, но вместе с ОС" против "N-2, но без ОС".

Погодите. Вы решаете задачу «разделить ОС и данные имеющимися средствами» или приводите аргумент в пользу своего «ОС не даёт сильной нагрузки и пофиг, на одном носителе или на разных у нас данные и ОС»?
Если первое — Вам надо куда-то забэкапить данные, чтобы пересобрать один RAID10 на два RAID1.
Если второе — мы оперируем любым количеством дисков для соблюдения одинаковых условий — и там, и там RAID10.

Это не я решаю задачу. :) Это автор предлагает решать задачу тормозов дисковой подсистемы конкретного сервера путем разнесения ОС и СУБД на разные физические диски. И мои комментарии следует воспринимать исключительно в этом контексте, а не в контексте некоего абстрактного тестирования в лабораторных условиях.

А я вот помню, как я (как раз айтишник, а не ДБА) пытался разобраться с резким падением прозводительности на SaaS интсансе при больших операциях. Ну просто одна большая операция, в которой копируются миллионы строчек вдруг после бодрого начала начинала безбожно тормозить. Даже до того, что начало было бодрое, нужно было ещё докопаться, я даже график строил, зависимости времени от количества операций, пока не познакомился с разными типами дисков на AWS:
docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html

А так всё перепробовал. и таймауты, и настройки различные…
Не совсем согласен с началом решения проблем. Перестраивать индексы и статистику надо только на таблицах, где они реально портятся, а так можно мышкой накликать задач, которые будут только еще больше замедлять работу сервера. Можно конечно перестраивать только сильно попорченные индексы, статистики и фрагментированные таблицы, но серебряной пули тут не существует, если что-то тормозит, надо садиться и разбираться, какие запросы тормозят, смотреть их планы, в реальности кроме индексов и статистики может быть еще тысяча причин торможения
Очередь желательно чтобы не превышала 1. Допустимы кратковременные всплески, если они быстро спадают. Всплески могут быть разным


Откуда такая информация? Даже для старых дисков говорили про 2N, где N — количество шпинделей.

Если интересно ознакомиться с темой глубже — вот неплохая статья (правда, трёхлетней давности): Управление глубиной очереди дисков для достижения лучшей производительности
Если очередь выше 1, то значит в ней кто-то ждёт завершения предыдущей операции. Если эти операции записи в mdf, то пусть будут. Если они на чтение, то, как и написано в вашей статье, задержки будут расти линейно. От количества шпинделей это никак не зависит (это странная байка откуда-то из 90-х или раньше, сам я это году в 97-98 читал, применительно в NT4 встроенным RAID).
Но. Если это write-ahead запись в LDF, то очередь 1 — это значит, что вы полностью упёрлись в производительность диска. Потому что тут: SQL кинул запись в журнал транзакций (очередь стала 1), подождал, получил ответ от ОС «я кончила» (очередь стала 0) и тут же кинул новую запись в журнал.
Так что если очередь 1, то уже нужно убедиться, что это не связано с однопоточным синхронным сценарием IO.
UFO just landed and posted this here
как верно заметили выше, нужно понимать что при этом происходит…
например, выборка во временные таблицы приведет к дополнительному вводу-выводу в tempdb…
UFO just landed and posted this here
в первую очередь, обновите статистику и перестройте индексы

Статистика по-умолчанию обновляется сама,
а индексы перестраивать надо только те, которые имеют определенное количество страниц и уровень фрагментации. Перестройка индекса очищает кеш планов, что в некоторых случаях воспринимается как «волшебная помощь» именно от перестройки индекса, хотя дело-то в кеше планов.
Кроме того, так как ни слов «кеш планов», ни IOPS, в вашей статье нет, то рекомендовать ее кому-либо, в том числе новичкам, смысла я не вижу.
Пользуясь случаем, хотел спросить немного не по теме. Какая сейчас линуксовая ФС наиболее подходящая для sql-ных и 1с-ных баз? Btrfs хороша, но кажется не доросла ещё до времени, когда её можно пускать в продакшн, XFS хороша дефрагментацией на лету, но боится сбоев по питанию, ZFS хороша, но тогда BSD надо ставить наверно… А что тогда? Как всегда старая добрая ext4?
" В кратце:"-> " Вкратце:"
«скорость варьирует»->«скорость изменяется(варьируется)»
Описанные вами админы обычно используют MS SQL для 1С. Для них в интернете уже много есть рекомендаций, среди которых вы упустили достаточно (для новичков) полезные:
  1. Использовать протокол Shared Memory
  2. Изменить «шаг» роста для рабочих баз со стандартного 1 МБ на 100 МБ
  3. Убедиться, что план электропитания стоит «Высокая производительность». В случае виртуализованного сервера — и на гипервизоре

Кто-то скажет, что эти пункты о быстродействии, а не об анализе, но у меня и от статьи такое ощущение.
Shared Memory — только для локальных клиентов
Там же сервер приложений, который скорее всего вместе с сервером SQL стоит.
Sign up to leave a comment.

Articles

Change theme settings