Низкая скорость вставки на серверах, но высокая на локальных машинах - PullRequest
0 голосов
/ 16 мая 2018

Мы обнаружили, что вставки на наших серверах очень медленные (более 40 секунд), но когда мы используем одну и ту же БД с одинаковым сценарием вставки на наших локальных компьютерах, это происходит практически мгновенно.

Наши серверы размещены в Microsoft Azure, но мы также пробовали его на сервере в нашем здании, и он также работает медленно

Скрипт вставки занимает всего около 5000 вставок, но занимает на серверах более 40 секунд. Это происходит во всех таблицах, но в той, которую мы тестируем, есть 2 столбца, без ключей, без ограничений, без триггеров и без индексов.

Как показано здесь скрипт вставки занял 43 секунды на нашем сервере, но на наших локальных машинах это занимает всего 1 секунду. Хотя индексы поднимаются до 7761, на самом деле это чуть меньше 5000 операторов INSERT INTO.

Это приводит к значительному замедлению работы некоторых наших клиентов, и во многих случаях мы добавляем более 10000 записей, поэтому загрузка страницы занимает у них 1-2 минуты.

Я пробовал разные версии сервера SQL и 3 разных сервера (2 в Windows 2012, 1 в Windows 2016). Запуск сценария вставки на нашем компьютере с другого компьютера все еще имеет скорость вставки ~ 1.

Я подумал, что это могло быть из-за того, что на наших компьютерах есть SSD, а на серверах - HDD, но я установил его на ноутбуке с жестким диском, у которого все еще было время вставки ~ 1 секунда.

Я не совсем уверен, что еще нужно искать, единственное отличие, которое я вижу, это то, что серверы работают под управлением Windows 2012/2016, но все наши компьютеры работают на Windows 10.

Что еще может быть причиной этого, так как я считаю маловероятным, что версия для Windows вызывает это. Похоже, что на серверах SQL есть некоторые параметры, которые вызывают медленную вставку.

EDIT:

Причиной проблемы является низкая скорость диска на серверах. Они способны на гораздо большее, но по какой-то причине их максимальная скорость составляет около 1 МБ / с, в то время как наши компьютеры получают около 30 МБ / с при выполнении запроса на вставку.

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

1 Ответ

0 голосов
/ 16 мая 2018

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

Попробуйте использовать другой синтаксис для этой мульти вставки

INSERT INTO wtListingExpand VALUES
  ('a24f0628-dc91...', 7747)
 ,('a24f0628-dc91...', 7747)
 ,('a24f0628-dc91...', 7747)

Thisследует отправлять все данные в виде одного большого запроса на вставку и снизить влияние задержки в сети.

...