Различия между помощником по настройке ядра СУБД и мастером настройки индексов
Кроме поддержки новых возможностей базы данных MicrosoftSQL Server существуют также различия в работе помощника по настройке ядра СУБД и мастера настройки индексов MicrosoftSQL Server 2000. Хотя оба средства содержат и графический интерфейс пользователя (GUI), и интерфейс командной строки, следует учитывать описанные ниже изменения по сравнению с мастером настройки индексов.
Полный список новых возможностей помощника по настройке ядра СУБД см. в разделе Особенности помощника по настройке ядра СУБД.
Разрешения, требуемые для настройки баз данных
В SQL Server 2000 только члены предопределенной роли сервера sysadmin могли использовать мастер настройки индексов для настройки баз данных. В SQL Server члены роли сервера sysadmin с помощью помощника по настройке ядра СУБД также могут выполнять точную настройку баз данных, однако теперь настраивать принадлежащие им базы данных могут и пользователи, являющиеся членами предопределенной роли базы данных db_owner.
Примечание |
---|
При первом использовании помощник по настройке ядра СУБД должен быть запущен для инициализации приложения пользователем, имеющим права системного администратора. После инициализации члены предопределенной роли сервера sysadmin и предопределенной роли базы данных db_owner могут настраивать свои базы данных с помощью помощника по настройке ядра СУБД. Необходимо помнить, что члены роли db_owner могут настраивать лишь принадлежащие им базы данных. Дополнительные сведения см. в разделе Инициализация помощника по настройке ядра СУБД. |
Контекст рабочей нагрузки
Мастер настройки индексов оценивал каждую инструкцию в рабочей нагрузке, использующей настраиваемую базу данных, независимо от того, выполнялась ли эта инструкция изначально в контексте этой базы данных. Мастер настройки индексов в течение сеанса настройки может настроить только одну базу данных. Помощник по настройке ядра СУБД может настроить несколько баз данных в течение одного сеанса настройки. Помощник по настройке ядра СУБД использует данные из сценария для определения базы данных, в которой выполняется инструкция, и оценивает выполнение инструкции в этой базе данных. Выбор баз данных для настройки не влияет на оценку инструкций.
Например:
база данных AdventureWorks содержит таблицу Person.Contact со столбцами FirstName и LastName;
рабочая нагрузка TuneQuery.sql содержит следующий запрос:
SELECT FirstName, LastName FROM Person.Contact WHERE LastName = 'Abercrombie'; GO
пользователь User1 подключается по умолчанию к базе данных MyDB.
В SQL Server 2000User1 выполнил в командной строке следующее или похожие шаги с помощью графического интерфейса мастера настройки индексов:
Itwiz -D AdventureWorks -I TuneQuery.sql –o rec.sql –U <username> –P <password>
Этот метод сработал, так как анализ каждой инструкции в TuneQuery.sql был выполнен по отношению к базе данных AdventureWorks, поскольку она была указана в командной строке (-D AventureWorks). Рабочая нагрузка TuneQuery.sql была допустима в контексте базы данных AdventureWorks, и настройка прошла успешно.
Синтаксис вызова помощника по настройке ядра СУБД в командной строке следующий:
dta -s Session1 –D AdventureWorks –if TuneQuery.sql –of rec.sql –U username –P password
Поскольку пользователь User1 по умолчанию подключается к базе данных MyDB, система выбирает контекст базы данных MyDB. Затем инструкция Transact-SQL анализируется в контексте базы данных MyDB, а не AdventureWorks. Эта инструкция недопустима в контексте базы данных MyDB и поэтому не обрабатывается.
Почему это произошло? Если пользователь User1 выполняет рабочую нагрузку TuneQuery.sql с помощью sqlcmd или среды SQL Server Management Studio, не указав целевую базу данных, то TuneQuery.sql выполнялась бы в контексте базы данных MyDB, в результате вызвав сбой. Помощник по настройке ядра СУБД работает таким же образом.
Что необходимо сделать? Добавить инструкцию USE <database> к сценарию TuneQuery.sql:
USE AdventureWorks;
GO
SELECT FirstName, LastName
FROM Person.Contact
WHERE LastName = 'Abercrombie';
GO
Помощник по настройке ядра СУБД сначала обнаруживает инструкцию USE AdventureWorks и, соответственно, устанавливает в качестве текущей базу данных AdventureWorks. Затем при переходе к инструкции SELECT FirstName, LastName FROM Person.Contact WHERE LastName = 'Abercrombie' ее анализ выполняется в контексте базы данных AdventureWorks, так как теперь контекст текущей базы данных — AdventureWorks. Это позволяет помощнику по настройке ядра СУБД успешно настроить базу данных. Обратите внимание, что при выполнении этого сценария с помощью sqlcmd или среды SQL Server Management Studio инструкция выполняется в контексте AdventureWorks, так как первая инструкция USE <database> изменяет контекст базы данных с MyDB на AdventureWorks.
Инструкции 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, записанных в файле трассировки.
Примечание |
---|
Если имя входа, указанное в трассировке, отсутствует в системе, помощник по настройке ядра СУБД не учитывает его и использует по умолчанию запись, от имени которой выполняется процесс настройки. В этом случае в журнал настройки помощника по настройке ядра СУБД записывается сообщение. |
Пределы времени настройки
Помощник по настройке ядра СУБД позволяет указать длительность настройки или выбрать неограниченное время выполнения настройки. В мастере настройки индексов эта возможность отсутствовала. Дополнительные сведения см. в разделе Ограничение продолжительности и событий настройки.
См. также