Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
Nimua
Member

Откуда: Ростов-на-Дону
Сообщений: 344
Доброго дня!

Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит.

А.. нет не то.

Есть табличка, в которой сделали ID типа INT по скромности, а вот теперь стало понятно, что маловато будет и нужно переделать на bigint.
Так как база должна работать 24/7 решили сделать следующую - создать новую табличку такую же но с ID BIGINT, и перенаправить туда все новые записи, а старые потихоньку блочками переносить - DELETE из старой, INSERT в новую. Медленно и плавно. Чтение делалось через представление
Select * from OldTable
UNION ALL
Select * from NewTable

Все вроде хорошо было на одной базе, а на другой произошел интересный случай - как только закончилась миграция данных из старой таблицы в новую загрузка ЦПУ взлетела до 97% и так продолжалось пока вью не обновили, чтобы в нем осталась только одна NewTable. Схему баз сравнивали между собой, разницы нет. В БД, в которой произошла проблема данных примерно в 1,5 раза больше. Auto_update_stats = 1, async_update = 1, пробовали отключать ассинхронное обновление - не помогло.
Такая же ситуация у меня была 2 раза при тесте. А потом не повторилась...

В общем вопрос почему так происходит?
Если дело в статистике и плане то по идее рекомпайл процедуры по идее должен был помочь - не помогал.
И потом - почему тогда загрузка ЦПУ не росла плавно вместе с перемещением из одной таблицы в другую?

Вот например план одной из процедур. Таблица, из которой мигрировали, - Tree, соответственно в Tree_BigInt.

К сообщению приложен файл (badplan public ready.zip - 13Kb) cкачать
11 апр 17, 17:24    [20390581]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
aleks2
Guest
Осподе, опять горе-теоретики?

"Есть табличка, в которой сделали ID типа INT
новую табличку такую же но с ID BIGINT"

Select ID типа INT from OldTable
UNION ALL
Select ID типа  BIGINT from NewTable



Преобразование BIGINT -> INT думаешь святым духом производится?
11 апр 17, 18:18    [20390840]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
KRS544
Member

Откуда:
Сообщений: 497
Ну так вроде хеппи энд же?
Nimua
и так продолжалось пока вью не обновили, чтобы в нем осталась только одна NewTable.
11 апр 17, 18:20    [20390845]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
KRS544
Member

Откуда:
Сообщений: 497
aleks2
Преобразование BIGINT -> INT думаешь святым духом производится?

Таблица по условию пустая уже...
11 апр 17, 18:22    [20390851]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
Nimua
Member

Откуда: Ростов-на-Дону
Сообщений: 344
KRS544,

да хэппи энд, но интересно почему так получается.
Вроде не очень логично, явно должно быть какое то логичное объяснение - раз поведение повторялось.
11 апр 17, 18:23    [20390865]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
Nimua
Member

Откуда: Ростов-на-Дону
Сообщений: 344
aleks2,

Тогда по идее должно было стать плохо когда в обеих таблицах были данные - ну например 50 на 50
11 апр 17, 18:24    [20390868]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
KRS544
Member

Откуда:
Сообщений: 497
Вероятно после миграции были проведены какие-то действия с таблицей
11 апр 17, 18:29    [20390901]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
Nimua
Member

Откуда: Ростов-на-Дону
Сообщений: 344
KRS544,

Со старой? например? таблица была пустая - 0 rows,
пробовали делать UPDATE STATS WITH SAMPLE 100 PERCENT на нее, но это тоже не помогало.
11 апр 17, 18:47    [20390987]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1814
ghost cleanup ?
12 апр 17, 01:15    [20392173]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
aleks2
Guest
KRS544
aleks2
Преобразование BIGINT -> INT думаешь святым духом производится?

Таблица по условию пустая уже...

Зато ПЕРВАЯ в union/
12 апр 17, 06:00    [20392224]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
Nimua
Member

Откуда: Ростов-на-Дону
Сообщений: 344
X-Cite,

я думала это штука, которая освобождает занятое место. И место было занято пока сделали ребилд индексов по старой табличке, уже после того как поменяли вью.
12 апр 17, 14:52    [20394396]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Nimua
Все вроде хорошо было на одной базе, а на другой произошел интересный случай - как только закончилась миграция данных из старой таблицы в новую загрузка ЦПУ взлетела до 97% и так продолжалось пока вью не обновили, чтобы в нем осталась только одна NewTable.
...
И потом - почему тогда загрузка ЦПУ не росла плавно вместе с перемещением из одной таблицы в другую?

Если бы вы предоставили актуальные планы на каждой стадии я бы смог вам сказать точно.
Но т.к. план один, сравнивать не с чем, поэтому могу только предположить.

Во первых - загрузка CPU - как измеряли? Точно ли именно этот запрос загружал ваш ЦПУ?

Сейчас системы многоядерные (из вашего плана видно, что у вас 32 ядра), чтобы один запрос повлиял на общую загрузку всех ядер он должен быть как минимум параллельный, у вас последовательный.

"Вью" (практически) = "подзапрос" - Оптимизатор раскрывает текст представления в запрос.
"Пока мигрировали" = "менялось распределение данных", а значит статистика, даже если после каждой добавленной порции вы обновляете статистику (даже не так, а особенно если обновлялась статистика) план может меняться. Может меняться порядок соединения таблиц и план в целом. Кроме того, я вижу, что вы используете рекурсивное CTE, рекурсивные CTE в сиквеле пока имеют только один способ выполнения через так называемый Stack Spool, что видно в плане. Это накладывает некоторые ограничения на оптимизатор, возможно при другом запросе он бы смог строить планы более гибко.

В ответ на ваш вопрос про "плавность роста" - нужно исключить влияние изменения плана. Например, есть подсказка OPTION(KEEPFIXED PLAN), чтобы запрос не рекомпилировался из-за статистики. Если у вас 2016 и есть Query Store, можете форсировать старый план и понаблюдать за "плавностью".

Кроме того, когда речь идет о перемещении данных, в уравнение вступают очень много других переменных, относящихся к подсистеме хранения.

Также никто не исключал блокировки.

Подытоживая - вы собрали слишком мало информации, чтобы дать вам конкретное объяснение, но в описанной ситуации не вижу ничего странного, по ряду причин перечисленных выше.
12 апр 17, 15:27    [20394589]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
KRS544
Member

Откуда:
Сообщений: 497
aleks2
KRS544
пропущено...

Таблица по условию пустая уже...

Зато ПЕРВАЯ в union/

И что?
Специально тест сделал, итоговое поле bigint.
12 апр 17, 19:01    [20395691]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
Nimua
Member

Откуда: Ростов-на-Дону
Сообщений: 344
SomewhereSomehow,

спасибо за такой подробный ответ!


У меня будет еще возможность собрать нормальный план - сохраню. Поищу возможно есть данные о том который был на этапе миграции.
К сожалению не понятно будет повторилась бы проблема или нет - теперь добавили изменение вью сразу после миграции (чему я рада).
Сервер 2012, база на SSD дисках.
12 апр 17, 22:47    [20396344]     Ответить | Цитировать Сообщить модератору
 Re: Почему после миграции данных из одной таблицы в другую сервер сходит с ума?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Nimua
SomewhereSomehow,п

спасибо за такой подробный ответ!


У меня будет еще возможность собрать нормальный план - сохраню. Поищу возможно есть данные о том который был на этапе миграции.
К сожалению не понятно будет повторилась бы проблема или нет - теперь добавили изменение вью сразу после миграции (чему я рада).
Сервер 2012, база на SSD дисках.

При всем желании, если вы не делали подобие сбора планов и нет Query Store, то вряд ли вы соберете что-то полезное...

Кстати, про сбор планов, вы версию не озвучили, есть такая тема:TF 7412 - правда, только в новых версиях сиквела.

В любом случае, ваш кейс надо было отслеживать в динамике.
12 апр 17, 23:02    [20396389]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить