Различия между помощником по настройке ядра СУБД и мастером настройки индексов

Кроме поддержки новых функций базы данных SQL Server, существуют также различия в работе помощника по настройке ядра СУБД и мастера настройки индексов Microsoft SQL Server 2000. Хотя оба средства содержат и графический интерфейс пользователя (GUI), и интерфейс командной строки, следует учитывать описанные ниже изменения по сравнению с мастером настройки индексов.

Полный список новых возможностей помощника по настройке ядра СУБД см. в разделе Особенности помощника по настройке ядра СУБД.

Разрешения, требуемые для настройки баз данных

В SQL Server 2000 только члены предопределенной роли сервера sysadmin могли использовать мастер настройки индексов для настройки баз данных. В SQL Server члены серверной роли sysadmin с помощью помощника по настройке ядра СУБД также могут выполнять настройку баз данных, однако теперь настраивать принадлежащие им базы данных могут и пользователи, являющиеся членами предопределенной роли базы данных db_owner.

ПримечаниеПримечание

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

Контекст рабочей нагрузки

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

Например:

  • База данных AdventureWorks2008R2 содержит таблицу Person.Person со столбцами FirstName и LastName.

  • Рабочая нагрузка TuneQuery.sql содержит следующий запрос:

    SELECT FirstName, LastName
    FROM Person.Person
    WHERE LastName = 'Abercrombie';
    GO
    
  • Пользователь User1 подключается по умолчанию к базе данных MyDB.

В SQL Server 2000 пользователь User1 выполнил в командной строке следующие или похожие шаги с помощью графического интерфейса мастера настройки индексов.

Itwiz -D AdventureWorks2008R2 -I TuneQuery.sql –o rec.sql –U <username> –P <password>

Этот метод работает так, как анализ каждой инструкции в TuneQuery.sql был выполнен по отношению к базе данных База данных AdventureWorks2008R2, поскольку она была указана в командной строке (-D AventureWorks2008R2). Сценарий TuneQuery.sql допустим в контексте базы данных База данных AdventureWorks2008R2, и настройка была выполнена успешно.

Синтаксис вызова помощника по настройке ядра СУБД в командной строке следующий:

dta -s Session1 –D AdventureWorks2008R2 –if TuneQuery.sql –of rec.sql –U username –P password

Поскольку пользователь User1 по умолчанию подключается к базе данных MyDB, система выбирает контекст базы данных MyDB. Затем инструкция Transact-SQL анализируется в контексте базы данных MyDB, а не База данных AdventureWorks2008R2. Эта инструкция недопустима в контексте базы данных MyDB и поэтому не обрабатывается.

Почему это произошло? Если пользователь User1 выполняет сценарий TuneQuery.sql с помощью программы sqlcmd или среды Среда SQL Server Management Studio, не указав целевую базу данных, то TuneQuery.sql выполнялся бы в контексте базы данных MyDB и завершился бы ошибкой. Помощник по настройке ядра СУБД работает таким же образом.

Что необходимо сделать? Добавьте инструкцию USE <database> к сценарию TuneQuery.sql:

USE AdventureWorks2008R2;
GO
SELECT FirstName, LastName
FROM Person.Person
WHERE LastName = 'Abercrombie';
GO

Помощник по настройке ядра СУБД сначала обнаруживает инструкцию USE AdventureWorks2008R2 и, соответственно, устанавливает в качестве текущей базу данных AdventureWorks2008R2. Затем при переходе к инструкции SELECT FirstName, LastName FROM Person.Person WHERE LastName = 'Abercrombie' ее анализ выполняется в контексте базы данных База данных AdventureWorks2008R2, так как теперь контекст текущей базы данных — База данных AdventureWorks2008R2. Это позволяет помощнику по настройке ядра СУБД успешно настроить базу данных. Обратите внимание, что при выполнении этого сценария с помощью программы sqlcmd или среды Среда SQL Server Management Studio инструкция выполняется в контексте База данных AdventureWorks2008R2, так как первая инструкция USE <database> изменяет контекст базы данных с MyDB на База данных AdventureWorks2008R2.

Инструкции USE <database> можно использовать для указания базы данных, в контексте которой должна выполняться инструкция. Это не требуется, если каждая инструкция использует полное указание имени таблиц.

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

Рабочая нагрузка в SQL-файле или встроенная рабочая нагрузка

Как упоминалось в предыдущем разделе, помощник по настройке ядра СУБД использует инструкции USE <database>, предшествующие запросу Transact-SQL, для определения базы данных, в контексте которой будет выполняться запрос. Помощник по настройке ядра СУБД обрабатывает входные данные, начиная с первого оператора в файле сценария Transact-SQL. Он начинает работу, предполагая, что в качестве текущей используется база данных по умолчанию. Появление инструкций USE <database> изменяет текущую базу данных, в контексте которой выполняются инструкции.

Файлы трассировки и таблицы трассировки

Обрабатывая файл трассировки, помощник по настройке ядра СУБД имитирует воспроизведение в Приложение SQL Server Profiler. Он использует следующие данные из файлов трассировки в порядке перечисления.

  • Если файл трассировки содержит события с заполненным столбцом DatabaseName, помощник по настройке ядра СУБД использует эти данные для определения базы данных, в контексте которой произошло событие.

  • Если в файле трассировки заполнен столбец DatabaseID, помощник по настройке ядра СУБД использует эти данные для определения базы данных, в контексте которой произошло событие. Он просматривает системный каталог, находя имя базы данных, соответствующее DatabaseID.

ПримечаниеПримечание

Если базы данных отсоединялись, присоединялись, создавались или удалялись после сбора данных трассировки, то с момента создания файла трассировки отображения DatabaseID и DatabaseName могут измениться. Помощник по настройке ядра СУБД не может определить такое состояние. В таком случае необходимо удалить DatabaseID из трассировки, чтобы предотвратить настройку помощником по настройке ядра СУБД неправильной базы данных.

  • Если в трассировке нет ни столбца DatabaseName, ни DatabaseID, то помощник по настройке ядра СУБД определяет, в контексте какой базы данных выполнять каждую инструкцию, таким же образом, как для сценариев Transact-SQL для каждого столбца SPID в файле трассировки. Если столбец SPID отсутствует, решение принимается точно таким же образом, как для файлов сценариев Transact-SQL.

Помощник по настройке ядра СУБД при обработке каждой инструкции также использует сведения об имени входа (как при воспроизведении в Приложение SQL Server Profiler). Базы данных по умолчанию на сервере могут меняться в зависимости от значений в столбце LoginName, записанных в файле трассировки.

ПримечаниеПримечание

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

Пределы времени настройки

Помощник по настройке ядра СУБД позволяет указать длительность настройки или выбрать неограниченное время выполнения настройки. В мастере настройки индексов эта возможность отсутствовала. Дополнительные сведения см. в разделе Ограничение продолжительности и событий настройки.