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

Откуда:
Сообщений: 1440
Satans Claws
Yasha123
разница в 4 раза это простая модель в явном виде.
типа перевел базу в полную, бэкап сделать "забыл".


Сорри за оффтоп (я автор, мне можно :D ), но можно с этого момента подробнее?
Я правильно понимаю, что, поскольку в FULL-модели восстановления лог содержит информацию о всех транзакциях с момента последнего бэкапа - то пока бэкапа не будет, логу нет стартовой точки, чтоб начать хранить эту информацию (соответственно, в лог ничего не пишется).
Обратный переход (FULL -> SIMPLE) применяется сразу?


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

про обратный переход тоже верно,
просто дается сигнал логу не удерживать более записи для бэкапа лога
5 сен 19, 10:13    [21964279]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить перенос данных из одной БД в другую?  [new]
msLex
Member

Откуда:
Сообщений: 6424
Yasha123
msLex
пропущено...

А не встречался ли вам какой-нибудь список условий, при которых включается "постраничное" логирование?
По какой-то неясно для меня причине, он не совпадает с условиями минимпльного логирование?

мне не встречался,
но из соображений здравого смысла:

если идет вставка с таблоком и в кучу(пустую или нет неважно),
таблица эксклюзивно блокирована и никто другой вставить не может за все время вставки.
отсюда вывод:
данные будут вставляться страницами.
мы валим все подряд и нет никаких причин вставлять их куда-то в середину(т.е. построчно)
-> будет логироваться постранично.

если вставка в кластерный с tablock и order by таблица пуста, все ровно то же самое,
мы валим точно в конец, т.е. пишем новые целые страницы подряд.
будет логироваться постранично.

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

т.е. на первый взгляд все те же условия, что и для минимального логирования в simple и bulk logged.
у вас есть примеры, когда не так?

думаю, еще есть ограничение на объем.
если строк мало, будет построчно в любой модели

Здравый смысл мне тоже подсказывает, что постраничное логирование должно происходить при тех же условиях, что и минимальное (с разницей лишь в модели восстановления), но...
Я проводил небольшие эксперименты, с целью понять в каких случаях происходит постраничное логирование.
За основу брал вот эти условия по минимальному логирования. У меня получалось, что постраничное логирование включается только в двух или трех случаях из указанных.
5 сен 19, 11:27    [21964352]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить перенос данных из одной БД в другую?  [new]
Yasha123
Member

Откуда:
Сообщений: 1440
msLex

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


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

на картинке: зеленым то, что соответствует минимальному
или постраничному логированию (в зависимости от модели)
красным: в это я не верю, см. рассуждение выше.

К сообщению приложен файл. Размер - 44Kb
5 сен 19, 11:48    [21964375]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить перенос данных из одной БД в другую?  [new]
Yasha123
Member

Откуда:
Сообщений: 1440
да и 2 строки под красным тоже подозрительны.
вставка в непустой кластер хоть с таблоком хоть без
невозможно минимально логировать.
почему именно постранично-то пойдет,
может, как раз вставится среди имеющегося(см.пример чет-нечет)
5 сен 19, 12:05    [21964392]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить перенос данных из одной БД в другую?  [new]
msLex
Member

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



С 2016 TF610 стал работать по умолчанию, и если глянуть на вашу таблицу (но в соседний столбик), то таблицы совпадут.

PS
Ваша табличка из ссылки на SQL 2008
5 сен 19, 12:37    [21964434]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить перенос данных из одной БД в другую?  [new]
invm
Member

Откуда: Москва
Сообщений: 8739
Yasha123
вставка в непустой кластер хоть с таблоком хоть без
невозможно минимально логировать.
Inside Microsoft® SQL Server® 2008: T-SQL Querying
SQL Server 2008 also introduces support for minimal logging when inserting data into a
nonempty B-tree (clustered or nonclustered index). Minimal logging is used when inserting
new key ranges that allocate and populate new pages while TF-610 is on regardless of
whether the TABLOCK hint is specifi ed. For those new key ranges, SQL Server internally takes
key-range locks to ensure that other processes don’t run confl icting activities.
5 сен 19, 12:51    [21964454]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить перенос данных из одной БД в другую?  [new]
Yasha123
Member

Откуда:
Сообщений: 1440
msLex
С 2016 TF610 стал работать по умолчанию, и если глянуть на вашу таблицу (но в соседний столбик), то таблицы совпадут.

понятно.
не было возможности тестировать на 2016-ом,
он у меня хоть и стоит локально, руки не доходят.
рабочий сервер 2014,
и на нем у меня включен TF610.
ну что могу сказать.
у меня нет куч и нет пустых таблиц.
а вставка в непустой кластер + индекс всегда логируется полностью
(у нас простая модель),
так что не Depends, а постоянное полное логирование.
причем не только в индекс, а даже в сам кластерный.
это даже при том, что у них тут кластерный везде и всюду по id identity,
и любая вставка с таблоком это гарантированные новые страницы в конец таблицы

это на тестовом.
в прод у меня таблок не пошел вообще,
т.к. выигрыша по времени никакого,
а блокировать остальных нехорошо.
5 сен 19, 12:58    [21964465]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить перенос данных из одной БД в другую?  [new]
Yasha123
Member

Откуда:
Сообщений: 1440
invm
Yasha123
вставка в непустой кластер хоть с таблоком хоть без
невозможно минимально логировать.
Inside Microsoft® SQL Server® 2008: T-SQL Querying
SQL Server 2008 also introduces support for minimal logging when inserting data into a
nonempty B-tree (clustered or nonclustered index). Minimal logging is used when inserting
new key ranges that allocate and populate new pages while TF-610 is on regardless of
whether the TABLOCK hint is specifi ed. For those new key ranges, SQL Server internally takes
key-range locks to ensure that other processes don’t run confl icting activities.

ну он может и introduces,
только у меня inserting data into a nonempty B-tree (clustered or nonclustered index) логирует полностью
5 сен 19, 13:04    [21964472]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить