Можно ли указать минимальное / максимальное количество системных ресурсов (дискового ввода-вывода, памяти, циклов ЦП / с), доступных для каждого экземпляра базы данных на сервере SQL Server 2005?
Это будет аналог настроек QoS для SQL-серверов.
Рикардо, ваш вопрос немного вводит в заблуждение. Есть два способа прочитать это.
Если вы имеете в виду базы данных внутри экземпляра SQL Server, то вы не можете этого сделать с SQL Server 2005. SQL Server 2008 представил регулятор ресурсов, который вроде как выполняет то, что вам нужно, но не совсем. Он может ограничивать память и процессор, но не дисковый ввод-вывод.
Если вы имеете в виду разные экземпляры SQL Server на одном компьютере, тогда вы можете это сделать. У каждого экземпляра есть свои собственные минимальные и максимальные настройки памяти. В SQL Server Management Studio щелкните правой кнопкой мыши имя экземпляра в обозревателе объектов и выберите «Свойства». Оттуда вы можете установить минимальный и максимальный объем памяти, который будет занимать каждый экземпляр. Вы также можете установить маски соответствия ЦП, которые позволят вам выбрать, какие ЦП может использовать экземпляр. Если у вас есть двухпроцессорный четырехъядерный сервер (всего 8 ядер), вы можете назначить один экземпляр двум конкретным ядрам, а другой - шести ядрам. К сожалению, если один из экземпляров простаивает, другой не сможет воспользоваться этими простаивающими ядрами.
Разделение дискового ввода-вывода между экземплярами становится еще сложнее. Вы можете использовать множественный путь к хранилищу, чтобы разделить трафик между экземплярами, если вы готовы потратить много времени на проектирование хранилища и пути. Вы можете назначить файлы данных и журналов одного экземпляра конкретному массиву, а затем настроить пути к этому массиву только через определенные адаптеры главной шины (HBA). Если это не имеет для вас смысла, обратитесь к администратору хранилища, а если у вас нет администратора SAN, это больше работы (и денег), чем вы хотите.
Нет. Все они используют процесс sqlservr.exe, который является экземпляром SQL Server.
Если вам нужно управлять ресурсами уровня базы данных, вам понадобится отдельный экземпляр
Как правило, я обнаружил, что несколько баз данных в одном экземпляре обычно уравновешиваются. Каждая база данных имеет свой собственный шаблон использования, шаблон загрузки, количество пользователей и т. Д., И SQL Server очень хорошо управляет пулом буферов, кешами планов, памятью и т. Д. На основе этой нагрузки.
Если у вас есть база данных с плохим кодом или ресурсами, я бы посоветовал ей собственное оборудование или хотя бы экземпляр.
С помощью именованных экземпляров SQL Server (то есть более одного процесса sqlservr.exe) вы можете ограничить ЦП, используя привязку процессора для привязки планировщика SQL Server для экземпляра к конкретным ЦП. Существует также параметр максимальной памяти сервера, который также указывается для каждого экземпляра SQL Server.
Я не думаю, что есть какие-либо общесерверные настройки, которые можно установить с помощью дисков, но, по крайней мере, вы можете создать отдельные LUN для своих баз данных, чтобы они размещались и таким образом разделяли нагрузку.
В SQL Server 2008 есть управляющий ресурсами который позволяет вам устанавливать очень сложные правила для рабочих нагрузок и количества ресурсов, которые они могут потреблять для каждой базы данных. Может, апгрейд в порядке?
Вы можете потенциально сделать это, используя виртуальные машины вместо экземпляров. Поместите отдельный экземпляр в каждую виртуальную машину, поскольку гипервизоры, как правило, имеют лучшие инструменты для управления ресурсами.
Регулятор ресурсов - хорошее начало, но пока это серьезное ограничение. Как сказал Брент, это хорошее начало, но оно не касается ввода-вывода. Учитывая алгоритмы упреждающего чтения, я не совсем уверен, как можно упростить кому-то управление.