Общие требования к памяти для SQL Server 2008 R2

11

У меня нет опыта работы с DBA, но я пытаюсь найти причину для запроса дополнительных ресурсов для нашего сервера sql и надеялся, что мне удастся заставить некоторых умных людей дать приблизительную приблизительную оценку того, что мы должны работать. Я подозреваю, что распределение ресурсов, выделенных ИТ на наш производственный сервер sql, невелико.

Аппаратное обеспечение:

База данных: SQL Server 2008 R2 база данных предприятия

Windows: Windows 2008 r2 Enterprise 64-битная, почти наверняка работает на VMware.

Процессор: Intel (R) Xeon (R) CPU E7-4860 @ 2,27 ГГц, 2,26 ГГц (2 процессора)

Установленная память: 4 ГБ

Жесткий диск для файлов базы данных: 300 ГБ

Жесткий диск для резервных копий: 150 ГБ

Жесткий диск для журналов: 100 ГБ

Заявка:

У нас есть 3 основные базы данных, которые составляют до 170 ГБ данных, база данных служб Reporting Services (SSRS) на том же сервере, на которой размещено, возможно, 10 различных отчетов (в среднем по 700 тыс. Записей каждая), которые генерируются ежедневно. Наша база пользователей насчитывает около 20 одновременных пользователей, может быть, 5 из них можно считать «ресурсоемкими» с созданием больших отчетов с перегрузкой данных. Большинство пользователей взаимодействуют с базой данных через веб-сайт asp.net и веб-сайт сервера отчетов. Кроме того, наши разработчики широко используют SSIS в BIDS, напрямую подключаясь к серверу (максимум 2 удаленных подключения). Наконец, у нас довольно сложная операция хранилища данных, которая, вероятно, приносит 3 миллиона записей в день с помощью пакетов служб SSIS, которые также запускаются на сервере.

Текущие проблемы:

У нас хронические тайм-ауты серверов, и время отклика на веб-сайт довольно плохое. Я подозреваю, что объем памяти (4 ГБ), вероятно, является узким местом. Наши предыдущие запросы на дополнительную память были отклонены с общим ответом, что нам нужно выполнить больше оптимизаций запросов. Хотя мы не являемся профессионалами в области SQL или (как я уверен, вы можете сказать по нашей настройке) профессионалами в области администрирования db, я хочу убедиться, что я не трачу все свое время, пытаясь выжать небольшую потенциальную производительность, если аппаратное обеспечение является узкое место.

Спасибо всем за избегание!

RMuesi
источник
7
Они рассчитывают обслуживать 170 ГБ данных с 4 ГБ памяти? Никакая настройка запросов не исправит это, и они находятся вне своего дерева.
Аарон Бертран
Покажите им цифры (статистика производительности). Вы также можете показать им документацию Microsoft, которая показывает минимальный объем памяти для Windows Server 2008 R2, составляет 4 ГБ; это не оставляет много для SQL Server.
2
Что показывает ваша статистика ожидания? Я подозреваю, что вы видите, что PAGEIOLATCH_XX ожидает ваших запросов. Если да, то вы можете использовать это как доказательство того, что некоторая дополнительная память будет полезна.
SQLRockstar
2
И если у вас есть память, вы можете начать работать с лучшей подсистемой ввода-вывода. Hard DRIVE для хорошо используемой базы данных - это шутка IOPS. ЭТО должно быть ПРИВОДЫ. Вы не покупаете диск как емкость, для баз данных вы покупаете диск как источник IOPS. Что означает 512 ГБ SSD было бы хорошо для файлов базы данных. Стандарт «давайте сделаем это большим и дешевым» убьет базу данных.
TomTom
@ TomTom Я уверен (я надеюсь), у нас есть массив рейдов. Я не уверен, как это обнаружить, хотя. Я просто основывал описание жесткого диска на том, что проводник Windows показывал на Windows-сервере.
RMuesi

Ответы:

14

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

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

База данных: SQL Server 2008 R2 база данных предприятия

Windows: Windows 2008 r2 Enterprise 64-битная, почти наверняка работает на VMware.

Процессор: Intel (R) Xeon (R) CPU E7-4860 @ 2,27 ГГц, 2,26 ГГц (2 процессора)

Установленная память: 4 ГБ

Два процессора (я предполагаю, что в ВМ они выставлены как 2 ядра) могут быть или не быть недостаточно обеспечены. Ядра, назначенные виртуальной машине, не обязательно отображаются непосредственно на физические ядра (или даже разрешено использовать 100% одного ядра, когда это необходимо!), Поэтому вы можете обнаружить, что это более гибкий ресурс, чем память. Без дополнительной информации о вашей рабочей нагрузке или конфигурации оборудования / виртуализации, я бы сказал, что было бы неплохо увеличить ее до 4.

Выделение памяти. О, парень. Это крайне недостаточно для рабочей нагрузки. Сама Windows требует минимум 2-3 ГБ, чтобы оставаться довольным, и каждому из 2 пользователей, использующих BIDS на коробке, потребуется по крайней мере 500 МБ каждый. И с этим коробка уже исчерпана, и я даже не начал выяснять, сколько понадобится базе данных .

Большинство пользователей взаимодействуют с базой данных через веб-сайт asp.net и веб-сайт сервера отчетов.

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

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

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

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

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

Даже несмотря на то, что вы получили общий ответ, подобный этому (который, кстати, скорее всего, был связан с тем, насколько убедительным было ваше обоснование дополнительных ресурсов, а не фактическое использование самих ресурсов), весьма вероятно, что эффективность базы данных может быть улучшенный. Тем не менее, нет одной лишь настройки, которая может решить проблемы, которые вы испытываете сейчас; предложение о том, что для меня это совсем не начало.

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

Вот несколько мыслей (в порядке атаки):

  • Вы выиграете, если сможете доказать, насколько улучшается производительность каждый раз, когда вы получаете больше ресурсов. Отслеживайте показатели производительности с помощью ведения журнала Performance Monitor (примечание: часть ведения журнала очень важна), включая время отклика веб-сайта, если это возможно. Начните делать это сейчас , прежде чем делать что-либо еще. Когда вы, наконец, доберетесь до минимального объема памяти (вы не собираетесь сразу получить 32 ГБ), вдруг у вас появятся доказательства того, что добавленная память улучшила вещи ... что означает, что добавление еще большего объема памяти, вероятно, тоже поможет! Если вы не соберете базовый уровень в текущей конфигурации, вы пропустите лодку, когда все поднимется до минимального рекомендуемого уровня.

  • Проанализируйте статистику ожидания вашего сервера . Это скажет вам, какое самое большое узкое место в системе. Вероятно, у вас будет PAGEIOLATCH_XXсамое распространенное / максимальное время ожидания, которое указывает на то, что слишком много операций ввода-вывода выполняется для извлечения страниц с диска. Это можно облегчить, добавив память, поэтому физические операции ввода-вывода становятся менее частыми, поскольку необходимые данные уже находятся в памяти. Хотя этот анализ в значительной степени предрешен, тот факт, что вы собрали эти статистические данные, дает больше боеприпасов при обосновании необходимости в ресурсах.

  • Как я уже упоминал выше, минимальное требование к памяти не выполняется. Соберите набор рекомендуемых аппаратных требований для всего программного обеспечения, которое вы используете, и, возможно, также сделайте скриншоты диспетчера задач. Одного этого должно быть достаточно, чтобы оправдать как минимум еще 4-8 ГБ на месте. Если они по-прежнему отказываются, попробуйте убедить их позволить вам опробовать его в течение недели, а затем верните его (вы собираете статистику производительности, поэтому вам не нужно будет возвращать ее, потому что в середине недели вы '' смогу доказать насколько это улучшило ситуацию). Если они все еще отказываются, вы настроены потерпеть неудачу; URLT .

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

  • Вы не сможете разместить всю базу данных в памяти сразу, а это значит, что вам нужно очень осторожно установить максимальный объем памяти в SQL Server, чтобы предотвратить перерасход памяти , который, как ничто другое , снижает производительность . Чрезмерная фиксация на самом деле даже хуже, чем просто невозможность разместить все данные в памяти. Весьма вероятно, что вы находитесь в этом сценарии прямо сейчас, просто потому, что памяти вообще нет, и вполне вероятно, что для параметра max memory установлено значение по умолчанию (неограниченное).

  • Поскольку вы работаете с SQL Server Enterprise Edition, а объем памяти ограничен, я настоятельно рекомендую реализовать сжатие данных . Это компенсирует увеличение использования ЦП для экономии места в памяти (и, следовательно, уменьшает доступ к диску, который сравнительно очень медленный).

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

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

Это всего лишь несколько идей. Суть в том, что настройка сама по себе не решит проблемы, как и аппаратное обеспечение, хотя последнее, вероятно, облегчит большинство неотложных проблем. Вот как это происходит: бросьте аппаратное обеспечение на проблему в краткосрочной перспективе, чтобы потушить пожар, и бросьте настройку на проблему в долгосрочной перспективе, чтобы как можно лучше устранить первопричину.

Джон Сайгель
источник
1
Джон, мне нравится твой ответ и +1, но в этом сценарии кажется, что комментарий Аарона ударил его по голове, и им просто нужно больше оперативной памяти, независимо от того, как сильно они пытаются его настроить.
Али Разеги
2
@ Али: Да, я согласен, и я упомянул это в своем ответе. В основном я хотел сосредоточиться на стратегиях, чтобы получить больше оперативной памяти, потому что это похоже на проблему здесь. (Если это просто не доступно , это отдельная проблема.)
Джон Зигель
Большое спасибо за подробный ответ! Я новичок в настройке производительности БД, поэтому я просто пытаюсь понять, с чего начать. У меня есть некоторые материалы для чтения и Performance Monitor, теперь я просто должен понять метрики. Но ваши предложения обеспечивают хорошую дорожную карту для решения этой проблемы. Еще раз спасибо.
RMuesi
@RMuesi: Всегда пожалуйста. Если у вас есть какие-либо конкретные вопросы о том, как выполнить то, что вам нужно, не стесняйтесь их публиковать (сначала выполните поиск, конечно), и сообщество с радостью поможет.
Джон Зигель
9

Это безумие "счетчик бобов" аккаунта. 1100-2500 долларов, которые вы потратите на оперативную память, могут окупиться в течение недели !

Они получают тайм-ауты для 20 сотрудников, и 5 из них выполняют «ресурсоемкую» работу. Я полагаю, что их время недешевое, и некоторые из этих отчетов - те, которые любил бы начальник, не подписывающий зарплату. Это тонны потраченных впустую повторных передач и борьбы с разочарованием.

Объясните им, что они, вероятно, ищут 15-20 долларов США за ГБ для оперативной памяти. Объем 128 ГБ ОЗУ сейчас составляет примерно 2200-2500 долларов, а цены на ОЗУ в настоящее время немного выросли. Даже если материнская плата вашего сервера не может ее поддерживать (это было бы странно), тогда 64 ГБ будут стоить от 1100 до 1200 долларов (я только что проверил, и это качество памяти сервера от Dell без скидок). Даже 64 ГБ оперативной памяти могут иметь ОГРОМНОЕ отличие (особенно если мы избегаем сканирования больших таблиц).

Выясните, сколько времени потрачено впустую, и спросите их, стоит ли это 1100-2500 долларов. Если вы тратите всего 1100 долларов и получаете 64 ГБ оперативной памяти, избегайте сканирования таблиц на больших столах. Используйте больше дисков с индексами (если у вас есть задержка для его поддержки), чтобы избежать больших дампов сканирования памяти.

Али Разеги
источник
5
Хорошо сказано для безумия. 4 ГБ памяти меньше, чем я бы предложил в наши дни для настольного компьютера. И это сейчас пытается работать в среде базы данных 170 ГБ. Чертова шутка. Но эй, виртуализация для beancounters означает, что вы можете избавиться от больших дорогих серверов;)
TomTom
2
Полностью согласен. По крайней мере, у счетчиков бинов в сценариях OP были сняты когти с физического сервера (надеюсь!)
Али Разеги
1
поверь в это. Я не. TYPICAL - это сервер с большим количеством оперативной памяти и дешевыми дисками LAAAAARGE. Таким образом, вы можете запустить много виртуальных машин на них. В конце концов, ОЗУ обычно является ограничивающим фактором, не так ли? Результатом будет невероятная производительность IOPS - даже без базы данных. Был там, видел это. 64 ГБ памяти, 2 ТБ зеркала SATA диска;)
TomTom
Спасибо за ответ. Я так и подозревал, но просто не имею данных, чтобы доказать, что это частично аппаратная имитация. Я работаю над этим сейчас.
RMuesi
2
Возможно, вы захотите просто сообщить им, что SQL Server является ядром базы данных. Чтение с диска, даже SSD (которые, я уверен, этот магазин не использует) мучительно медленное. Чтение из ОЗУ занимает около 5 нс. Покажите им план выполнения с SET STATISTICSIO ON, который показывает сканирование и чтение таблицы. Покажите им физическое чтение против логического чтения. Физическое ведется с диска.
Али Разеги
-1

Я бегу 2008 R2 с 46 ГБ ОЗУ. Нет виртуальных машин. SQL Server 2008

Базы данных около 300 ГБ.

Я недавно положил базы данных на твердотельный накопитель и утроил вывод данных.

Сервер в настоящее время использует 45 ГБ оперативной памяти и работает нормально.

Рейды FC Sata и SAS SCSI. Всего 26 логических дисков. 144 прядильные диски.

Вчера я использовал только 24 ГБ оперативной памяти, когда у меня было только 50 ТБ заполненных жестких дисков и для передачи данных. Сегодня у меня 160TB полных жестких дисков, и я использую 45 ГБ оперативной памяти.

Мое приложение не использует более 400 МБ оперативной памяти.

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

Дэвид
источник
IBM exFlash 400GB MCS $ 4400. Вот куда я иду.
Дэвид