(Возврат на основную страницу)

 

Содержание номера за Декабрь 2011 год

SQL Server

Декабрь 2011 12 (18)

 

  1. Оптимизатор запросов SQL Server (часть 2)
    Бенджамин Неварез (Benjamin Nevarez)

  2. Компрессия всех объектов
    Грегори Фердинандсен (Gregory Ferdinandsen)

  3. Восстановление БД с устройства, на котором хранится несколько резервных копий
    Смита Редди (Smitha Reddy)

  4. Динамическое создание и наполнение промежуточных таблиц из CSV файлов
    Стен Калп (Stan Kulp)

  5. Удаленные базы данных фрагментированы? Давайте, дефрагментируем.
    Кимберли Киллиан (Kimberly Killian)

 


Оптимизатор запросов SQL Server (часть 2)
Бенджамин Неварез (Benjamin Nevarez)


Чтобы разобраться в том, как пишется высокопроизводительный SQL-код для SQL Server, важно понимать, как работает оптимизатор запросов. Бен Неварез (Ben Nevarez) объясняет основные принципы, всесторонне рассматривая эту сложную тему в статье, взятой из его новой книги «Inside the SQL Server Query Optimizer».
Оптимизатор запросов (Query Optimizer), реализованный в СУБД SQL Server, является стоимостным оптимизатором (cost-based optimizer). Он анализирует несколько вариантов плана выполнения данного запроса, оценивает стоимость каждого из предполагаемых вариантов и выбирает из них план с наименьшей стоимостью. Правда, если принять во внимание, что оптимизатор запросов не в состоянии рассмотреть все возможные планы выполнения для каждого запроса, то на самом деле он должен обеспечить стоимостной баланс, учитывая как затраты на нахождение вероятных планов выполнения, так и стоимость самих планов.
Таким образом, именно оптимизатор запросов является тем компонентом SQL Server, который оказывает наибольшее влияние на производительность ваших баз данных. В конце концов, выбор правильного (или ошибочного) плана выполнения мог бы означать разницу во времени выполнения запроса, измеряемого миллисекундами или минутами, или даже часами. Естественно, более глубокое понимание того, как работает оптимизатор запросов, может помочь как администраторам баз данных, так и разработчикам, способствуя написанию более совершенных запросов и позволяя предоставить оптимизатору запросов ту информацию, в которой он нуждается для выработки эффективных планов выполнения.
 


Компрессия всех объектов
Грегори Фердинандсен (Gregory Ferdinandsen)


Приведенная процедура выполняет компрессию/декомпрессию всех объектов. Для компрессии можно указать уровень (страница, запись).
 


Восстановление БД с устройства, на котором хранится несколько резервных копий
Смита Редди (Smitha Reddy)


Если на единственном устройстве резервного копирования записна несколько резервных копий БД для SQL Server 2008 R2, этот скрипт позволит поднять БД из самой свежей полной и дифференциальной копий.

Если скрипт используется для восстановления БД для SQL Server 2005, удалите предложение "CompressedBackupSize" из команды CREATE для временной таблицы.

При написании кода я использовал пример со страницы:
http://www.karaszi.com/SQLServer/util_restore_all_in_file.asp
 


Динамическое создание и наполнение промежуточных таблиц из CSV файлов
By Stan Kulp (Стен Калп)


Приведенный в статье SSIS пакет динамически создает промежуточные (staging) таблицы из текстовых файлов с разделителями (CSV). Файлы расположены в папке и в первой строке каждого файла размещены имена полей таблиц. Затем пакет заполняет вновь созданные таблицы данными из остальных строк файлов. Каждая таблица получает такое же имя, что и CSV файл.
 


Удаленные базы данных фрагментированы? Давайте, дефрагментируем.
Кимберли Киллиан (Kimberly Killian)


На своей новой работе я обнаружил, что необходимо улучшить обслуживание наших реплицируемых слиянием серверов, функционирующих на ноутбуках. Чтобы ситуация была яснее, я уже описывал ее в своей статье «When Did Merge Replication Subscribers Last Sync?», у меня есть около 20 ноутбуков с инсталлированной на них СУБД SQL Express, которые используют репликацию слиянием для обратной синхронизации с главным издателем. Их пользователи не всегда находятся в офисе, а когда они там присутствуют, серверов просто слишком много, чтобы обслуживать их каждый в отдельности. Эти пользователи работают вне сайта/локальной сети, поэтому им требуется, чтобы базы данных были производительными и быстродействующими.
Поскольку эффективность – обязательное условие, мне надо было найти способ, который позволяет контролировать фрагментацию таблиц без ручного вмешательства на 20 ноутбуках, когда они возвращаются в офис, что происходит как минимум каждые две недели. На случай появления пользователей в офисе у меня есть задание, которое проверит локальную сеть и выяснит, кто к ней подключен, уведомит пользователя о начале выполнения задания, соберет информацию об уровне фрагментации на компьютерах пользователей, создаст сценарии реорганизации или перестроения в зависимости от уровня фрагментации (я использую реорганизацию для фрагментации 5-30% и перестроение для фрагментации 31%+), выполнит созданные сценарии, уведомит пользователя об окончании работы и в завершение запишет в две таблицы данные о том, что было сделано, организует ведение некоторого рода журнала и отправит мне сообщения по электронной почте.
Кажется, здесь нет ничего сложного, и это задание экономит мне массу времени, затрачиваемого на присмотр за ноутбуками. Мое задание включено в расписание и должно выполняться ежедневно. Если хотя бы 7 дней у пользователей не проводилась дефрагментация, тогда мое задание будет выполнено на их компьютерах.


(Возврат на основную страницу)

Hosted by uCoz