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

Проблема с маской CPU / Affinity в SQL 2005

Возникла проблема с SQL Server, который был виртуализирован с физической машины. Маска ЦП была установлена ​​на физическом SQL Server по какой-то причине до виртуализации, и теперь расширенные параметры недоступны на машине, теперь это гость VMware. Поэтому мне нужно перенастроить параметры маски соответствия ЦП - это дополнительные параметры, поэтому они заблокированы из-за проблемы с маской соответствия.

Я пробовал делать это с SQL-сервера в режиме однопользовательской командной строки, искал в Google и нашел много людей с похожими проблемами, но без реального решения.

Примеры команд и вывод анализатора запросов ниже.

sp_configure 'show advanced options', 1 
GO
RECONFIGURE WITH OVERRIDE
GO
sp_configure 'affinity mask', 0x00000000
GO
RECONFIGURE 
GO

-----------------------------------------

Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.

Msg 5832, Level 16, State 1, Line 1

The affinity mask specified does not match the CPU mask on this system.

Msg 15123, Level 16, State 1, Procedure sp_configure, Line 51

The configuration option 'affinity mask' does not exist, or it may be an advanced option.

У нас была именно такая проблема в нашем магазине. В нашем случае у нас был блок SQL 2005 с 4 процессорами, который P2V поместил в блок с 2 процессорами VMWare SQL 2005. После того, как SQL 2005 вернулся в сеть, он оказался в ловушке 22, описанной выше. Мы смогли исправить ситуацию, изменив коробку VMWare обратно на 4-стороннюю коробку (простое изменение с быстрой перезагрузкой). В нашем случае мы оставили его как 4-полосную коробку, но можно было бы отключить привязку к процессору ... уменьшить ее до 2-полосной, а затем восстановить привязку к процессору.

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

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

Если вы хотите попробовать что-то не поддерживается MS, и возможно совершенно опасно, вы можете попробовать обновить основную базу данных с помощью SQL-запроса. Не знаю, рекомендую ли я это, но это может сработать для вас и избавить от некоторых проблем с переустановкой. Кроме того, я никогда не делал этого раньше, поэтому не могу гарантировать, что это даже сработает. Шаги следующие:

  1. Сделайте резервную копию ваших баз данных
  2. Убедитесь, что резервные копии вашей базы данных действительны
  3. На самом деле, убедитесь, что у вас есть хорошие резервные копии ваших баз данных.
  4. Остановите свой SQL Server
  5. Запустите SQL Server в Однопользовательский режим (добавьте параметр -m в sqlserver.exe)
  6. В (административной) командной строке выполните в sqlcmd следующее:

    sqlcmd -S ADMIN: server \ instance -d master -W -s "," -Q "SELECT Name, Value, Minimum, Maximum, Value_in_use, is_dynamic, is_advanced из SYS.Configurations Где Name = 'affinity mask'"

    конечно заменить server\instance перед запуском. Так же ADMIN: в начале имени сервера важно - это связывает вас с выделенное административное соединение.

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

    sqlcmd -S ADMIN: server \ instance -d master -W -s "," -Q "update sys.configurations set value = 0 Где Name = 'affinity mask'"

  8. Выключите сервер однопользовательского режима.

  9. Запустите SQL Server, как обычно.
  10. Скрестить пальцы.