|
Программирование >> Программирование баз данных
печено выполнение операции с ведением журнала в минимальном объеме, поскольку сам факт, что на таблице отсутствуют индексы во время выполнения массовой операции, значительно способствует повышению производительности, независимо от режима ведения журнала. Тем не менее необходимо восстановить все индексы после завершения массовой операции. Попытаться создать файлы исходных данных с соблюдением того же порядка, в котором должны храниться данные в кластерном индексе (если таковой имеется). Это позволит во время воссоздания индекса применить опцию SORTED DATA REORG, которая способствует значительному повышению скорости формирования индекса (и тем самым сократить обшую продолжительность выполнения операции ВСР). Даже если кластерный индекс останется нетронутым, выполнение операции ВСР с отсортированными данными позволит использовать опцию столбца ORDER (задаваемую с помощью параметра -h). Убедиться в том, что в составе свойств сопровождения задано значение Simple или Nonlegged. Если предусмотрено сопровождение с полным восстановлением. Full Recovery, то в операциях ВСР не допускается ведение журнала в минимальном объеме. Чтобы добиться дальнейшего повышения производительности импорта данных в таблицу, можно применить параллельную загрузку данных из нескольких клиентских приложений. Для этого необходимо выполнить следующее. Применить подсказку TABLOCK. Удалить все индексы (индексы можно будет вновь создать после завершения операции). Задать в качестве опции восстановления СУБД SQL Server значение Bulk-Logged. Ниже описан способ осуществления этих рекомендаций. Вместо импорта одного большого файла разбейте его на меньшие файлы. Затем запустите утилиту ВСР из нескольких клиентских систем так, чтобы каждый клиент импортировал один из меньших файлов. Очевидно, что применение этого метода оправдано, только если ожидаемое повышение производительности приведет к экономии большего количества времени в процессе импорта, чем будет затрачено на подготовк) исходных файлов и их копирование в клиентские системы. Параллельная загрузка не поддерживается в SQL Server 6.5 или более ранних версиях. После выполнения любой из этих операций необходимо воссоздать все индексы на целевой таблрще. Воссоздание кластерного индекса целевой таблицы (если таковой имеется) должно осуществляться прежде, чем начнется восстановление всех некластерных индексов. Дополнительного повышения производительности можно добиться, позволив СУБД SQL Server игнорировать ограничения проверки и триггеры, что предусмотрено по умолчанию. Следует помнить, что отказ от использования этих средств может привести к загрузке данных, которые нарушают ограничения проверки таблицы и те правила целостности данных, которые поддерживаются с помощью триггеров. Операция bulk insert Как уже было сказано в начале настоящей главы, для выполнения массовых операций может также применяться команда BULK INSERT. Разрешение использовать эту команду предоставляется представителям роли sysadmin или bulkadminserver. По существу команда BULK INSERT действует как ограниченная версия утилиты ВСР, которую можно вызвать на выполнение непосредственно из кода T-SQL. Для этого применяется следующий синтаксис: BULK INSERT [[<database name>.][<schema name>].]<table name> FROM <data file> [WITH ( [BATCHSIZE [ = <batch size>]] [, CHECK CONSTRAINTS] [, CODEPAGE [={ACPIOEMIRAW I <code page>}]] [, DATAFILETYPE [={charnativewidecharwidenative}]] [, FIELDTERMINATOR [= <field terminator> ]] [, FIRSTROW [= <first row>]] [, FIRE TRIGGERS] [, FORMATFILE = <format file path> ] [, KEEPIDENTITY] [, KEEPNULLS] [, KILOBYTES PER BATCH [= <no. of kilobytes>]] [, LASTROW [ = <last row no.>]] [, MAXERRORS [ = <max errors>]] [, ORDER ({column [ASCDESC]} [ ,...n ] )] [, ROWS PER BATCH [= <rows per batch>]] [, ROWTERMINATOR [ = <row terminator>]] [, TABLOCK] [, ERRORFILE = <file name>] Читателю покажутся знакомыми многие параметры команды BULK INSERT, поскольку они в основной своей части имеют аналоги в базовом синтаксическом определении оператора импорта ВСР, с которого начиналась эта глава. Определенные затруднения создаются в связи с особыми требованиями к правам досГ)Т1а, предъявляемыми к пользователям команды BULK INSERT (поскольку невозможно предоставить каждому роль sysadmin или bulkinsert), но, если не учитывать этого, команда BULK INSERT имеет целый ряд существенных преимуществ, указанных ниже, по сравнению с другими средствами массового копирования. Эту команду можно указать в составе определяемой пользователем транзакции с использованием конструкции BEGIN TRAN и связанных с ней операторов. Команда BULK INSERT выполняется в одном процессе с СУБД SQL Server, поэтому обеспечивает некоторое дополнительное повышение производительности в связи с отсутствием необходимости в использовании маршалинга (прямого и обратного преобразования параметров). Синтаксис этой команды немного (правда, очень немного) проще по сравнению с синтаксисом командной строки, который применяется в утилите ВСР. Значительным недостатком команды BULK INSERT является то, что ее назначение полностью соответствует названию, - эта команда предназначена лишь для массовой вставки данных. Команда BULK INSERT не оказывает помощи в создании файлов формата. С помощью этой команды невозможно обеспечить экспорт данных. Она представляет собой лишь простой и производительный способ реализации функциональных средств ВСР для перемеш;ения данных в базу данных из источника, внешнего по отношению к SQL Server. Конструкция openrowset (bulk) Конструкция OPENROWSET (BULK), как и утилита ВСР, применяется для массовой обработки данных, но напоминает эту утилиту в меньшей степени, чем команда BULK INSERT. В частности, эта конструкция предоставляет большие возможности по сравнению с указанной командой (и, по мнению автора, является очень удобной). Известно, что конструкция OPENROWSET, исходная по отношению к конструкции OPENROWSET (BULK), предоставляет возможность быстрого и относительно гибкого доступа к внешним файлам, не требуя обязательной загрузки данных этих файлов в промежуточную таблицу, а при указании ключевого слова BULK дополнительно предоставляет функции провайдера набора строк для операции массовой обработки данных. Напомним, что одной из наиболее важных областей применения утилиты ВСР является периодическая загрузка из внешних файлов таких данных, которые используются в определенных процессах. Например, с помош;ью утилиты ВСР можно организовать и загрузку файлов, которые содержат такие данные, как отчеты о кредитных операциях, каталоги поставш;иков и другую информацию, которая предоставляется поставш;иком в согласованном формате. Такая информация может оказаться чрезвычайно важной для функционирования предприятия, но в отдельных случаях более важно обеспечить одноразовое взаимодействие с внешними данными, а не импортировать все эти данные. Конструкция OPENROWSET (BULK) предоставляет возможность доступа к внешнему файлу (или только к части файла) как к таблице. Более того, в этой конструкции может использоваться файл формата для более подробного описания компоновки файла, чем можно было бы обеспечить с помош;ью простой связанной таблицы. Для этого применяется следуюш;ий синтаксис: OPENROWSET ( BULK <data file> , { [ FORMATFILE = <format file> ] [ CODEPAGE [={ACPOEMRAW<code page>}]] FIRSTROW [= <first row>]] LASTROW [ = <last row no.>]] MAXERRORS [ = <max errors>]] ROWS PER BATCH [= <rows per batch>]] ERRORFILE = <file name>] ] I SINGLE BLOB SINGLE CLOB SINGLE NCLOB } } ) Таким образом, конструкция OPENROWSET в большей степени является основой метода массового доступа, чем массовой вставки. Безусловно, не исключено применение оператора INSERT INTO, в котором источником данных является конструкция OPENROWSET (операторы вставки в такой форме используются довольно часто), но конструкция OPENROWSET предоставляет гораздо больше возможностей по сравнению с этим вариантом. Учитывая сказанное, рассмотрим рад важных проблем применения опций массового копирования в сочетании с конструкцией OPENROWSET.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |