Поделиться через


Создание скрипта статистики для создания базы данных только статистики в SQL Server

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

Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 914288

Введение

DBCC CLONEDATABASE — это предпочтительный метод для создания клона базы данных, доступной только для схемы, для изучения проблем с производительностью. Используйте процедуру в этой статье только в том случае, если вы не можете использовать DBCC CLONEDATABASE.

Оптимизатор запросов в Microsoft SQL Server использует следующие типы сведений для определения оптимального плана запроса:

  • Метаданные базы данных
  • аппаратная среда
  • Состояние сеанса базы данных

Как правило, необходимо имитировать все эти же типы информации, чтобы воспроизвести поведение оптимизатора запросов в тестовой системе.

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

Примечание.

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

Скрипт всей базы данных

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

  • Избегайте проблем с отсутствующими зависимыми объектами, необходимыми для воспроизведения проблемы.
  • Для выбора необходимых объектов требуется меньше шагов.

Обратите внимание, что при создании скрипта для базы данных и метаданных для базы данных содержится тысячи объектов, процесс скрипта потребляет значительные ресурсы ЦП. Рекомендуется создать скрипт в нерабочие часы или использовать второй вариант скрипта отдельных объектов для создания скрипта для отдельных объектов.

Чтобы выполнить скрипт для каждой базы данных, на которую ссылается запрос, выполните следующие действия:

  1. Откройте СРЕДУ SQL Server Management Studio.

  2. В обозреватель объектов разверните узел "Базы данных" и найдите базу данных, которую требуется выполнить скрипт.

  3. Щелкните правой кнопкой мыши базу данных, наведите указатель на задачи и выберите команду "Создать скрипты".

  4. В мастере сценариев убедитесь, что выбрана правильная база данных. Щелкните, чтобы выбрать всю базу данных скрипта и все объекты базы данных, а затем нажмите кнопку "Далее".

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

    Параметр "Скрипты" Значение для выбора
    Анси заполнение Верно
    Продолжить скрипты при ошибке Верно
    Создание скрипта для зависимых объектов Верно
    Включение имен ограничений системы Верно
    Параметры сортировки скриптов Верно
    Имена входа скриптов Верно
    Разрешения уровня объекта скрипта Верно
    Статистика сценария Статистика сценариев и гистограммы
    Индексы скриптов Верно
    Триггеры скрипта Верно

    Примечание.

    Обратите внимание, что параметр "Имена входа скрипта" и параметр "Разрешения уровня объектов скрипта" могут не потребоваться, если схема не содержит объекты, принадлежащие именам входа, отличным от dbo.

  6. Нажмите кнопку "ОК ", чтобы сохранить изменения, и закройте страницу "Дополнительные параметры скрипта".

  7. Выберите "Сохранить в файл " и выберите параметр "Один файл ".

  8. Просмотрите выбранные варианты и нажмите кнопку "Далее".

  9. Нажмите Готово.

Скрипт отдельных объектов

Можно создать скрипт только для отдельных объектов, на которые ссылается конкретный запрос, а не скрипт полной базы данных. Однако если все объекты базы данных не были созданы с помощью WITH SCHEMABINDING предложения, сведения о зависимости в системной sys.depends таблице могут не всегда быть точными. Эта неточность может вызвать один из следующих вопросов:

  • Процесс создания скриптов не выполняет скрипт зависимого объекта.

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

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

  1. В среде SQL Server Management Studio разверните базы данных и найдите базу данных, которую требуется выполнить скрипт.

  2. Щелкните правой кнопкой мыши базу данных, наведите указатель мыши на базу данных скриптов как, а затем выберите команду CREATE To, а затем выберите "Файл".

  3. Введите имя файла и нажмите кнопку "Сохранить".

    Контейнер основной базы данных будет скриптирован. Этот контейнер включает файлы, группы файлов, базу данных и свойства.

  4. Щелкните правой кнопкой мыши базу данных, наведите указатель на задачи и выберите команду "Создать скрипты".

  5. Убедитесь, что выбрана правильная база данных, а затем нажмите кнопку "Далее".

  6. В диалоговом окне "Выбор типов объектов" выберите "Выбрать определенные объекты базы данных" и выберите все типы объектов базы данных, на которые ссылается проблематичный запрос.

    Например, если запрос ссылается только на таблицы, выберите таблицы. Если запрос ссылается на представление, выберите представления и таблицы. Если проблемный запрос использует определяемую пользователем функцию, выберите "Функции".

  7. Выбрав все типы объектов, на которые ссылается запрос, нажмите кнопку "Далее".

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

    Параметр "Скрипты" Значение для выбора
    Ansi Padding Верно
    Продолжить скрипты при ошибке Верно
    Включение имен ограничений системы Верно
    Создание скрипта для зависимых объектов Верно
    Параметры сортировки скриптов Верно
    Имена входа скриптов Верно
    Разрешения уровня объекта скрипта Верно
    Статистика сценария Статистика сценариев и гистограммы
    Скрипт USE DATABASE Верно
    Индексы скриптов Верно
    Триггеры скрипта Верно

    Примечание.

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

  9. Нажмите кнопку "ОК ", чтобы сохранить и закрыть страницу "Дополнительные параметры скрипта".

    Откроется диалоговое окно для каждого типа объекта базы данных, выбранного на шаге 7.

  10. В каждом диалоговом окне выберите определенные таблицы, представления, функции или другие объекты базы данных, а затем нажмите кнопку "Далее".

  11. Выберите параметр "Скрипт в файл", а затем укажите то же имя файла, которое вы ввели на шаге 3.

  12. Нажмите кнопку "Готово ", чтобы запустить скрипт.

    По завершении скрипта отправьте файл скрипта в инженер служба поддержки Майкрософт. Инженер служба поддержки Майкрософт также может запросить следующие сведения:

    • Конфигурация оборудования, включая количество процессоров и объем физической памяти.

    • Параметры SET, активные при выполнении запроса.

    Обратите внимание, что возможно, вы уже предоставили эти сведения, отправив отчет SQLDiag или трассировку профилировщика SQL. Возможно, вы также использовали другой метод для предоставления этих сведений.

Как используется информация

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

Метаданные

Вариант Описание
Ограничения Оптимизатор запросов часто использует ограничения для обнаружения противоречий между запросом и базовой схемой. Например, если запрос содержит WHERE col = 5 предложение и CHECK (col < 5) ограничение существует в базовой таблице, оптимизатор запросов знает, что строки не будут совпадать. Оптимизатор запросов делает аналогичные типы вычетов о допустимости null. Например, WHERE col IS NULL предложение имеет значение true или false в зависимости от допустимости значений NULL столбца и того, является ли столбец из внешней таблицы внешнего соединения. Наличие ограничений FOREIGN KEY полезно для определения кратности и соответствующего порядка соединения. Оптимизатор запросов может использовать сведения об ограничении для устранения соединений или упрощения предикатов. Эти изменения могут удалить требование для доступа к базовым таблицам.
Статистика Сведения о статистике содержат плотность и гистограмму, которая показывает распределение ведущего столбца индекса и ключа статистики. В зависимости от характера предиката оптимизатор запросов может использовать плотность, гистограмму или оба для оценки кратности предиката. Для точной оценки кратности требуются актуальные статистические данные. Оценки кратности используются в качестве входных данных для оценки стоимости оператора. Таким образом, необходимо иметь хорошие оценки кратности, чтобы получить оптимальные планы запросов.
Размер таблицы (количество строк и страниц) Оптимизатор запросов использует гистограммы и плотность для вычисления вероятности, что заданный предикат имеет значение true или false. Окончательная оценка кратности вычисляется путем умножения вероятности на число строк, возвращаемых дочерним оператором. Количество страниц в таблице или индексе является фактором оценки затрат на операции ввода-вывода. Размер таблицы используется для вычисления стоимости сканирования, и это полезно при оценке количества страниц, доступ к которым будет осуществляться во время поиска индекса.
Параметры базы данных Несколько вариантов базы данных могут повлиять на оптимизацию. AUTO_CREATE_STATISTICS Параметры AUTO_UPDATE_STATISTICS влияют на то, будет ли оптимизатор запросов создавать новую статистику или обновлять статистику, которая устарела. Уровень параметризации влияет на параметризацию входного запроса перед передачей входного запроса оптимизатору запросов. Параметризация может повлиять на оценку кратности и также может препятствовать сопоставлению индексированных представлений и другим типам оптимизаций. Параметр DATE_CORRELATION_OPTIMIZATION приводит к тому, что оптимизатор ищет корреляции между столбцами. Этот параметр влияет на кратность и оценку затрат.

Среда

Вариант Описание
Параметры сеанса SET Параметр ANSI_NULLS влияет на то, вычисляется ли NULL = NULL выражение как true. Оценка кратности внешних соединений может измениться в зависимости от текущего параметра. Кроме того, неоднозначные выражения также могут измениться. Например, col = NULL выражение вычисляется по-разному в зависимости от параметра. col IS NULL Однако выражение всегда оценивается так же.
Аппаратные ресурсы Стоимость операторов сортировки и хэша зависит от относительного объема памяти, доступной SQL Server. Например, если размер данных больше кэша, оптимизатор запросов знает, что данные всегда должны быть вложены на диск. Однако если размер данных гораздо меньше кэша, операция, скорее всего, будет выполнена в памяти. SQL Server также рассматривает различные оптимизации, если сервер имеет несколько процессоров и если параллелизм не отключен с помощью MAXDOP указания или максимальной степени конфигурации параллелизма.

См. также