Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
MS SQL Server - дело тонкое...
Информационный Канал Subscribe.Ru |
#267<< #268 |
СОДЕРЖАНИЕ Секционированные таблицы и индексы SQL Server 2005 (продолжение)
По материалам статьи Kimberly L. Tripp:
SQL Server 2005. Partitioned Tables and Indexes Шаги по созданию секционированных таблиц Теперь, когда у Вас уже сложилось представление о том, для чего создаются и что предлагают секционированные таблицы, неплохо было бы проследить всю логическую цепочку процесса создания секционированной таблицы (см. Рисунок 11).
Определите, НУЖНО ЛИ секционировать Объект
Как уже описано выше - это первый и самый важный шаг. Не каждая таблица нуждается в секционировании.
Не смотря на то, что секционирование прозрачно с точки зрения приложения, оно усложняет
администрирование и реализацию ваших объектов. В то время как секционирование может предложить
значительные преимущества, Вы наверняка не станете к нему прибегать для маленьких таблиц.
Так что же считать большим, а что маленьким? Ваши требования к производительности и обслуживанию,
равно как и текущее состояние этих показателей - вот факторы, определяющие потребность в
секционировании. Определите ключ секционирования и количество секций Если Вы пытаетесь улучшить производительность и управляемость больших подмножеств данных, и существуют определенные модели доступа к ним, используйте механизм диапазонного секционирования. Если ваши данные содержат логические группировки, и Вы часто работаете с только несколькими из этих определенных подмножеств одновременно, тогда определяйте свои диапазоны таким образом, чтобы запросы обращались только к подходящим данным (т.е. секциям). За более подробной информацией вы можете обратиться к разделу BOL: Designing Partitioned Tables and Indexes. Определите, СТОИТ ЛИ использовать несколько файловых групп В целях улучшения производительности и упрощения обслуживания следует использовать файловые группы (filegroups) для разделения данных. Количество файловых групп частично продиктовано аппаратными ресурсами, находящимися в вашем распоряжении; наверняка вам захочется иметь такое же количество файловых групп, что и количество секций, и предпочтительно эти файловые группы будут располагаться на разных дисках. Однако, это в первую очередь относится к системам, где анализ имеет тенденцию быть проводимым по всему набору данных. Если в вашем распоряжении находится мультипроцессорная система, SQL Server может работать с несколькими секциями параллельно и поэтому значительно сокращать общую продолжительность обработки больших и сложных отчетов и аналитических данных. В этом случае, Вы можете получать выигрыш в производительности при параллельной обработке данных, а так же при переключении секций в секционированной таблице. Создайте файловые группы Если Вы хотите разместить секционированную таблицу в нескольких файлах для улучшения сбалансированности подсистемы ввода/вывода, тогда вам следует создать файловую(ые) группу(ы). Файловые группы могут состоять из одного или более файлов, и каждая секция должна отображаться на файловую группу. Одна файловая группа может использоваться несколькими секциями, однако для лучшего управления данными, например, для большей гранулированности резервного копирования, вы должны разрабатывать ваши секционированные таблицы продуманно, так чтобы только связанные или логически сгруппированные данные размещались в одной и той же файловой группе. Используя оператор ALTER DATABASE, Вы добавляете логическое имя файловой группы - той, к которой будут добавлены файлы. Чтобы создать файловую группу с именем "2003Q3" для учебной базы данных AdventureWorks используйте следующий оператор:
CREATE PARTITION FUNCTION для диапазонных секций Диапазонные секции должны быть определены с граничными условиями. Кроме того, все границы должны быть включены; функция диапазонного секционирования должна включать все значения даже притом, что диапазон значений таблицы может быть (и должен быть) более ограниченным (посредством CHECK constraint). Никакие значения (с любого конца диапазона) не должны быть исключены. Кроме того, поскольку данные, вероятно, будут добавляться и удаляться из секции, вам потребуется последняя пустая секция, которую вы сможете постоянно "расщеплять", выделяя тем самым место для новой секции данных. Эта последняя секция будет всегда оставаться пустой, находясь в ожидании новых записей, которые вы будете периодически в нее включать.
При диапазонном секционировании вначале определяют граничные точки. Если Вы определяете пять
секции, то потребуются только четыре граничные точки. Для того чтобы разделить данные на пять
групп, Вы определяете четыре граничных значения для секций, а затем определяете, какой из
секций будет принадлежать каждое из этих значений: первой (LEFT) или второй (RIGHT).
Для LEFT: Поскольку Ваши диапазонные секции наверняка будут определяться по столбцам с типом данных datetime, то вам следует знать об импликациях (implication - "вовлечение"). Примечание: Импликация (от лат . implico - тесно связываю) - приблизительный логический эквивалент оборота "если..., то..."; операция, формализующая логические свойства этого оборота. Применяя тип данных datetime, Вы всегда используете ОДНОВРЕМЕННО и дату и время. Дата без определенного значения времени подразумевает нулевое время - 12:00am. Если, к примеру, LEFT-функция базируется на этом типе данных, то тогда данные за 1 октября 12:00am попадут в 1-ую секцию, а остальная часть октября - во 2-ую. По логике, лучше всего использовать начальные значения (набора данных второй секции) с RIGHT-функцией и конечные значения (набора данных первой секции) с LEFT-функцией. Три следующих выражения создают логически идентичные структуры секционирования:
Примечание: Функции секционирования также позволяют в качестве определения использовать другие функции. Вы можете использовать функцию DATEADD (ms,-3, '20010101') вместо явного определения '20001231 23:59:59.997'. За дополнительной информацией обратитесь к разделу BOL: "Date and Time" in the Transact-SQL Reference. Для того чтобы хранить по одной четверти данных таблицы Orders в четырех активных секциях (представляющих календарные кварталы) и иметь пятую секцию для последующего использования (в качестве полигона для добавления/исключения данных из секционированной таблицы), используйте такую LEFT-функцию секционирования с четырьмя граничными условиями:
Граничная точка '20000930 23:59:59.997' LEFT-ФУНКЦИИ (задает модель): Независимо от модели (LEFT или RIGHT), функция диапазонного секционирования должна включать все значения: от бесконечно малого до бесконечно большого. Для функции LEFT последняя граничная точка определит последнее абсолютное значение секций, но поскольку функция должна охватывать всю область данных, то для значений, больших чем значение последней граничной точки, должна существовать заключительная секция. При использовании LEFT-функций всегда будет существовать одна дополнительная секция в конце, и одна дополнительная секция вначале - для RIGHT-функций. CREATE PARTITION SCHEME Как только Вы создали функцию секционирования, Вы должны связать ее со схемой секционирования, для того чтобы адресовать секции определенным файловым группам. Когда Вы определяете схему секционирования убедитесь, что Вы определили файловые группы для КАЖДОЙ секции, даже если несколько секций будут располагаться в одной и той же файловой группе. Созданная ранее функция OrderDateRangePFN формирует 5 секций, последняя (пустая) будет располагаться в файловой группе PRIMARY. Нет никакой необходимости в особом размещении этой секции, поскольку она никогда не будет содержать данных.
Создайте секционированную таблицу Теперь, когда логическая (функция секционирования) и физическая (схема секционирования) структуры определены, таблица может быть секционирована. Таблица определяет, какая "схема" должна использоваться, а схема определяет функцию. Для того чтобы связывать эти три понятия вместе, Вы должны определить столбец(ы) секционирования. Диапазонные секции всегда отображаются исключительно на один столбец таблицы, совместимый с типом данных граничных условий, определенных в функции секционирования. Кроме того, если в таблице необходимо специально ограничивать интервал допустимых значений (а не [- ;+ ]), то следует добавить ограничение целостности (check constraint).
Создайте индексы: секционированные либо обычные По умолчанию индексы, создающиеся в секционированной таблице, будут использовать ту же самую схему секционирования и столбец секционирования, что и таблица. В этом случае индекс будет "выровнен" по отношению к таблице. Выравнивание не является обязательным условием, тем не менее, зачастую желательно, чтобы таблица и индексы были выровнены. Выравнивание таблицы и ее индексов обеспечивает более легкое управление и администрирование, особенно при работе по сценарию "скользящего окна". Не смотря на это, индексы не обязательно должны быть выровнены. Индексы могут быть основаны на других функциях секционирования или не быть секционированы вовсе. Например, в случае, когда создаются уникальные индексы, столбец секционирования должен быть одним из ключевых столбцов; это будет гарантировать то, что для обеспечения уникальности потребуется проверить только подходящую секцию. Поэтому, если Вам необходимо секционировать таблицу по одному столбцу, а создать уникальный индекс по другому столбцу, то тогда они не смогут быть выровнены; индекс может быть либо секционирован по уникальному столбцу (если уникальный ключ основан на нескольких столбцах, то тогда это может быть любой из ключевых столбцов), либо вообще не секционирован. Запомните, что этот индекс должен быть удален и создан заново, если какие-то данные "включаются" или "исключаются" из секционированной таблицы. Примечание: Если Вы планируете загрузить таблицу c существующими данными и затем добавить к ней индексы, то чаще всего наиболее эффективным способом будет загрузка данных в НЕ секционированную, НЕ индексированную таблицу с последующим созданием индексов и секционированием таблицы. Основывая кластерный индекс на схеме секционирования, вы тем самым эффективно секционируете таблицу. Это прекрасный способ секционирования таблиц. Для того чтобы создать таблицу как НЕ секционированную, а кластерный индекс как секционированный кластерный индекс, замените определение ON оператора CREATE TABLE на одну-единственную файловую группу и затем, после того как данные будут загружены, создайте кластерный индекс на основе схемы секционирования. ПРОДОЛЖЕНИЕ СЛЕДУЕТ Использование статистики оптимизатором запросов Microsoft SQL Server 2005 (продолжение)
По материалам статьи Eric N. Hanso: Statistics Used by the Query Optimizer in Microsoft SQL Server 2005 Создание статистики для SQL Server 2005 Вы можете создать статистику для SQL Server 2005 несколькими способами:
В качестве примера рассмотрите команду CREATE STATISTICS для таблицы AdventureWorks.Person.Contact:
Обычно, статистических данных, полученных по типовой выборке, достаточно, чтобы получился
хороший план исполнения запроса. Однако, могут быть случаи, когда статистика по большой
выборке может помочь лучше оптимизировать запрос, например, когда значения в выборке
по данному столбцу не носят случайный характер. Не случайный характер выборки может
быть, если данные отсортированы или кластеризованы. Сортировка или кластеризация может
быть результатом создания индексов, или загрузки данных в хип, который уже отсортирован
или кластеризован. Обычно, большая выборка с полным сканированием используется потому,
что она дает самую точную статистику. Ценой этого становиться увеличение времени создания
такой статистики.
Точно так же можно разрешить на уровне базы данных автоматическое создание статистики:
Рекомендуется, чтобы Вы оставили значение ON. Отключать автоматическое создание статистики
стоит, если Вы можете этим решить имеющиеся у Вас проблемы производительности, и нужно
определить отличную от заданной по умолчанию частоту выборки для некоторых таблиц.
В некоторых случаях можно наблюдать сообщения AutoStats, в которых не были созданы или
обновлены никакие статистические данные. Такие сообщения получаются, когда выключена
опция auto update statistics или когда было зафиксировано существенное количество
изменений в таблице, к которой выполнялся запрос, и оптимизатор не смог удалить все
ссылки к этой таблице из плана исполнения запроса из-за структуры этого запроса и
воздействия ограничений внешнего ключа. ПРОДОЛЖЕНИЕ СЛЕДУЕТ Описание технологии работы Log Shipping SQL Server 2000 Автор: Ирина Наумова В этой статье я расскажу, как работает Log Shipping, какие задания создаются при его на-стройке, как они функционируют, где хранится системная информация о передаче журналов, а также немного расскажу, как найти причину ошибки, возникающую в процессе работы. 1 Описание работы заданий Log Shipping
Log Shipping - это фактически некоторое множество заданий (SQL-job). Суть Log Shipping состоит
в передачи копий журналов транзакций с одного сервера на другой, что при определенных
дополнениях (например, таких, как перенос логинов и сопоставление SID-ов) позволяет создать
и поддерживать в актуальном состоянии резервный сервер. При этом нужно помнить, что данные
на резервный сервер попадают не сразу, а через некоторый промежуток времени, зависящий от
на-строек Log Shipping: частоты создания резервных копий журнала; частоты переноса копий на
вто-ричный сервер и их восстановления там и эту частоту нельзя установить меньше чем 1 минута.
Т.о. нельзя заставить работать Log Shipping в непрерывном режиме, как например репликацию. 1.1 Первичный сервер 1.1.1 Задание: "Transaction Log Backup Job for DB Maintenance Plan"
На первичном сервере создается задание: "Transaction Log Backup Job for DB Maintenance Plan -
<Имя плана обслуживания>". 1.2 Вторичный сервер На вторичном сервере создаются два задания, или их может быть три, если предусмотрена возможность смены ролей:
1.2.1 Задание: "Log Shipping copy for <Имя первичного сервера>.<Имя БД_logshipping>"
1.2.2 Задание: "Log Shipping Restore for <Имя вторичного сервера>.<Имя БД_logshipping>"
1.2.3 Задание: "Transaction Log Backup Job for DB Maintenance Plan <Имя плана об-служивания>" 1.3 Сервер мониторинга
1.3.1 Задание: "Log Shipping Alert Job Restore"
1.3.2 Задание: "Log Shipping Alert Job - Backup" Эти два задания по умолчанию выполняются раз в минуту и записывают сообщения об ошибках в журнал приложений операционной системы. Важно: Серверы должны быть синхронизированы по времени и формат времени должен быть одинаковым (то есть, например, на всех серверах использовать 24 часовой формат времени), иначе это может привести к тому, что задания передачи журналов будут завершаться с ошибками. Также к ошибкам могут приводить следующие причины:
Для того чтобы лучше понять, как функционируют задания передачи журналов, в Приложении к этой статье будет приведена схема работы Log Shipping. 2 Параметры Log Shipping, доступные уже после его настройки 2.1 Изменение параметров подключения к серверу мониторинга Для того чтобы изменить учетную запись, под которой первичный и вторичный сервер под-ключаются к серверу мониторинга, необходимо открыть список объектов в Enterprise Manager, выбрать базу данных, для которой настроена передача журналов, и из контекстного меню выбрать пункт "Properties". Появится окно свойств базы данных, показанное на Рисунке 1.
Из информации на вкладке "General", в окне свойств базы данных, можно увидеть, что данный
сервер играет роль первичного, а также можно узнать имя плана обслуживания, время создания
последней полной копии БД и последней копии журнала транзакций, и определить какой сервер
является сервером мониторинга.
2.2 Добавление возможности изменения роли серверов Для этого в Enterprise Manager в дереве объектов необходимо выбрать <Имя Резервного Сервера> -> Management -> Database Maintenance Plan, в окне детализации выбрать план об-служивания, и в контекстном меню выбрать пункт "Properties". В открывшемся окне перейти на вкладку "Log Shipping". Выбрать нужный вторичный сервер и нажать кнопку "Edit".
В окне "Edit Destination Database" в разделе "Future Primary Option" установить флаг "Allow Database to assume primary role", и задать путь к локальной папке вторичного сервера, в ко-торую в случае смены ролей SQL Server будет записывать копии журнала транзакций. 2.3 Изменение состояния базы данных на резервном сервере после восстановления; изменение поведения сервера при восстановлении журнала, когда имеются подключения к БД; изменение частоты копирования и восстановления Все эти настройки доступны на следующей вкладке "Initialize" окна "Edit Destination Data-base" (Рисунок 4. Вкладка Initialize) Раздел Secondary Load State:
Если выбран параметр "No Recovery Mode", после восстановления следующей копии журнала
на резервном сервере база данных будет недоступна пользователям. Раздел Schedules:
Параметр "Copy Frequency" задает частоту копирования файлов копий журналов из папки
первичного сервера в папку на вторичном сервере. 2.4 Настройка допустимого времени, в течение которого сервера могут находиться в со-стоянии рассинхронизации; настройка времени задержки восстановления; настройка периода хранения копий журналов транзакций и истории Все эти параметры также доступны в окне "Edit Destination Database" на вкладке "Threshold" (Рисунок 5. Вкладка "Thresholds").
Параметр "Out Of Sync Threshold" задает максимальный промежуток времени, который может
пройти между последним резервированием журнала транзакций на первичном сервере, и последним
восстановлением журнала транзакций на вторичном сервере. 2.5 Параметры, которые можно изменить с сервера мониторинга В дереве объектов Enterprise Manager нужно выбрать <Имя Сервера Мониторинга> -> Management -> Log Shipping Monitor. В окне детализации выбрать нужную пару серверов, участвующий в передаче журналов и из контекстного меню выбрать пункт "Properties". Откроется окно "Log Shipping Pair Properties". На вкладке "Status" нет значений, которые можно устано-вить, но можно почерпнуть некоторую информацию (Рисунок 6)
Перейдем на вкладку "Source" (Рисунок 7)
"Alert threshold" - время, которое может пройти с момента создания последней резервной
копии журнала до того как сервер мониторинга выдаст сообщение об ошибке.
Здесь можно установить максимально возможное время рассинхронизации (Alert threshold)
и номер сообщения об ошибке при рассинхронизации (Alert number). ПРОДОЛЖЕНИЕ СЛЕДУЕТ Статьи на русском языке
Little Known SSIS Features Самые популярные темы недели
Ваше мнение об упражнениях SELECT на http://sql.ipps.ru
снова linked server |
Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки
|
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.winsoft.sqlhelpyouself |
Отписаться
Вспомнить пароль |
В избранное | ||