Назад | Перейти на главную страницу

С чего начать исправление узкого места ввода-вывода в SQL Server?

Недавно я наткнулся на интересная статья который прошел с использованием статистики ввода-вывода для определения причин проблем с производительностью. Изучив свою статистику, я пришел к выводу, что у меня было «узкое место в подсистеме ввода-вывода».

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

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

Подсистема ввода-вывода обычно занимается хранением на диске. Это происходит, когда данные необходимо записать или прочитать. Вообще говоря, вам нужно следить за глубиной дисковой очереди. Я не совсем помню рекомендации, но думаю, что это что-то вроде 1,5 * количества задействованных физических дисков.

В зависимости от того, что вы найдете, есть несколько возможных решений.

Во-первых, получите достаточно оперативной памяти на сервере, чтобы он мог хранить всю БД в памяти и иметь достаточно места для выполнения запросов. Чем меньше времени вы сможете удерживать от подкачки на диск, тем лучше вам. Это включает в себя наличие достаточного количества ОЗУ для хранения временных таблиц в ОЗУ вместо их выгружаемых на диск.

Во-вторых, приобретите более быстрые диски. Дисководы SCSI 15k соответственно подверглись рейду. Вы можете даже исследовать SSD, если применимо; осознайте их ограничения, прежде чем делать это. Поместите файлы журнала на отдельную дисковую систему и, возможно, разбейте таблицы на разделы, чтобы они также находились на разных дисках. Это может быть сложно и очень дорого.

В-третьих, настройте свои запросы, чтобы лучше использовать ваши индексы, что также должно помочь с ограничением, когда сервер должен перейти на диск, чтобы получить полные записи.

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

Подсистема ввода-вывода в основном означает диск / хранилище. Если это действительно ваше узкое место, вы могли бы улучшить производительность, добавив больше и / или более быстрых дисков. Выбор правильного уровня рейда также важен, RAID 10 обычно превосходит RAID 5 для баз данных, особенно для нагрузок с большим объемом записи.

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