Как увеличить скорость чтения SQL Server? - PullRequest
5 голосов
/ 10 мая 2019

Я пытаюсь скопировать таблицу с одного сервера SQL на другой.Источник - SQL Server 2014, место назначения - SQL Server 2016. Я не могу получить скорость выше, чем около 60 МБ / с.У меня есть около 1,5 миллиардов строк для копирования, общий размер таблицы примерно 1 ТБ.

На исходном сервере установлен RAID 5 из SSD-дисков SATA, а в качестве места назначения используется рейд 0 из SSM-дисков NVME.Обе машины подключены 10GbE, прямой без коммутатора.Я могу скопировать несколько ГБ файлов за несколько секунд, поэтому я думаю, что сеть и диски настроены правильно.

Я использую SSIS и попробовал просто «табличный» источники запрос select *.Пакет создает таблицу назначения, и я использую быструю загрузку.Я пробовал oledb для SQL Server и собственный клиент SQL для типов соединений.Я пробовал где-то от 1 до 12 параллельных источников / назначений в моем потоке данных, и я получаю примерно в 3 раза большую скорость при переходе от 1 до 12. Но у меня нет простого способа дальнейшего разделения данных для увеличения параллелизма.

Я играл с буферами и размером пакета безрезультатно.

В исходной таблице около 100 столбцов.

Я ожидал получить по крайней мере 300-500 МБ /Для этого, и, надеюсь, по крайней мере, насытить скорость чтения исходного диска (~ 800 МБ / с).Я что-то упустил или это просто ограничение SQL Server?

1 Ответ

1 голос
/ 10 мая 2019

У меня нет конкретного ответа на этот вопрос, но я постараюсь предоставить некоторую информацию, которая может дать некоторое представление:

Выбор определенных столбцов

Прежде всего, если в источнике OLE DB есть несколько столбцов, которые не будут использоваться, измените Access Mode и используйте SQL Command вместо Table or View и укажите столбцы, необходимые в запросе выбора.Например, если таблица содержит 5 столбцов [Col1],[Col2], ... [Col5] и вам нужен только [Col1],[Col2], используйте следующий запрос:

Select [Col1],[Col2] From [Table]

Вместо выбора Table name

Для получения дополнительной информации:

свести к минимуму ведение журнала

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

Сбалансированный распределитель данных

Также вы можете воспользоваться Сбалансированное преобразование распределения данных для повышения производительности загрузки данных:

Полезные статьи

В 2008 году Microsoft опубликовалаофициальный документ для объявления о рекордной загрузке данных с использованием служб интеграции Microsoft SQL Server (SSIS): 1 ТБ данных менее чем за 30 минут.Это может дать вам некоторое представление:

Я думаюСуществует множество способов повысить производительность запроса INSERT. Я предлагаю прочитать следующую статью, чтобы получить дополнительную информацию о производительности загрузки данных.


Также проверьте @billinkc комментарии относительно свойства Max Insert Commit Size, типов данных, массовой вставки ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...