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

Откуда: Київ
Сообщений: 10428
sqlserver 2012

Есть таблица 2 млн записей

create table t1 (id int not null primary key , text ntext)


Хочу скопировать данные в

create table t2 (id int not null primary key , string nvarchar(max))

insert into t2(id, string) select id, text from t1


10 минут = 200 000 записей скопировались.

Можно ли как-то ускорить?
2 дек 14, 16:31    [16938542]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
bcp
2 дек 14, 16:35    [16938600]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
Winnipuh,

1Sqlbulk
2вариант базу в Симпл модель восстановления и не создавать ПК ,
3копировать порциями
Суть не грузить сильно диски и ждать
2 дек 14, 16:35    [16938610]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Winnipuh
sqlserver 2012

Есть таблица 2 млн записей

create table t1 (id int not null primary key , text ntext)


Хочу скопировать данные в

create table t2 (id int not null primary key , string nvarchar(max))

insert into t2(id, string) select id, text from t1


10 минут = 200 000 записей скопировались.

Можно ли как-то ускорить?

копировать меньшими порциями пробовали?
2 дек 14, 16:38    [16938643]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37254
Ken@t
Winnipuh, Суть не грузить сильно диски и ждать
Как можно что-то ускорить, если ждать?
2 дек 14, 16:41    [16938691]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37254
Чтобы переливать что-то быстро, надо:
а) лить балком;
б) лить с минимальным логированием;
в) лить многопоточно, если узкое место -- ядро процессора (здесь не тот случай).

Сообщение было отредактировано: 2 дек 14, 16:44
2 дек 14, 16:44    [16938722]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Winnipuh,

Копируйте в кучу with (tablock), а после Ваши хотелки накладывайте - констрэйты, индексы и пр.
Базу в Simple
2 дек 14, 16:46    [16938754]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Гавриленко Сергей Алексеевич,

+1
2 дек 14, 16:49    [16938797]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Винни, я так понимаю там объемы не хилые...

а табличка начальная и конечная на одном дисковом пространстве?

зы Это не отменяет булки и соответствующую булковую модель :)
2 дек 14, 17:15    [16939057]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
SanyL
Винни, я так понимаю там объемы не хилые...

а табличка начальная и конечная на одном дисковом пространстве?

зы Это не отменяет булки и соответствующую булковую модель :)


да, в одной базе и на одном диске.
Это преобразование типа ntext в nvarchar(MAX)
Я должен сделать скрипт, работающий быстро на других базах, у юзеров. А там как карта ляжет.
2 дек 14, 17:29    [16939177]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
alter table tt add t nvarchar(max)
updated tt set t =t1
alter table tt drop column t1

?
3 дек 14, 10:41    [16941746]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
Гавриленко Сергей Алексеевич
Чтобы переливать что-то быстро, надо:
а) лить балком;
б) лить с минимальным логированием;
в) лить многопоточно, если узкое место -- ядро процессора (здесь не тот случай).

г) выключить автоматический сбор статистики
3 дек 14, 10:50    [16941807]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
Maxx
alter table tt add t nvarchar(max)
updated tt set t =t1
alter table tt drop column t1


?
Мне кажется, вставка в новую таблицу с минимальным логированием будет быстрее, чем апдэйт...
3 дек 14, 10:52    [16941828]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
alexeyvg,

скорее всего таки да...но как вариант тоже прокатит. Я вообще в даном случае за bcp был изначально
3 дек 14, 10:56    [16941855]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
invm
Member

Откуда: Москва
Сообщений: 9785
Winnipuh
Это преобразование типа ntext в nvarchar(MAX)
Почему не alter table ... alter column ...?
3 дек 14, 11:06    [16941928]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
Павел-П
Member

Откуда:
Сообщений: 234
NickAlex66
Winnipuh,

Копируйте в кучу with (tablock), а после Ваши хотелки накладывайте - констрэйты, индексы и пр.
Базу в Simple


Вот только если человеку потом понадобится создать clustered index (к примеру PK) - то с кучей будут вопросы.
3 дек 14, 11:09    [16941949]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить копирование данных?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
Павел-П
NickAlex66
Winnipuh,

Копируйте в кучу with (tablock), а после Ваши хотелки накладывайте - констрэйты, индексы и пр.
Базу в Simple


Вот только если человеку потом понадобится создать clustered index (к примеру PK) - то с кучей будут вопросы.
Не, не надо в кучу.

Сделать таблицу с правильным кластерным инедксом, и копировать с минимальным логированием.

В кучу и строить индекс в принципе довольно быстро, но требует дополнительное место в размере таблицы.

create table t2 (id int not null primary key , string nvarchar(max))

insert into t2(id, string) with tablock select id, text from t1 order by id


Но вообще в такой задаче есть неоднозначность.
Может быть, таблица огромная, но записей мало, т.к. в полях text лежат огромные файлы. тогда может быть и alter table или update будут не хуже, так как существенного перестроения страниц не будет, а будет выделение отдельных не-строковых страниц и копирование туда.
3 дек 14, 11:58    [16942333]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить