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

Откуда:
Сообщений: 316
Имеется существующая конфигурация: Сервер Windows 2008, 32 ядра Intel,
1ТБ база на диске (Raid 10 из 20 дисков),
дополнительный 50ГБ-раздел на ramdive (о нём речь пойдёт позже).

Задача - максимально быстро сделать клон существующей таблицы.
исходная таблица содержит 2 некластерных индекса, целевая индесов не содержит.

клон в делает следующая конструкция:
INSERT WITH (TABLOCK).... SELECT with (nolock)

копирование делается неприемлемо долго,
при выполении конструкции единственное весомое ожиданеие сосавляет pageiolatch_sh

для теста максимально возможной скорости копирования создаю новую файловую группу,
связываю её с новым файлом размещённым на рамдрайв-разделе.

переношу сушествующую исходную таблицу в новую файловую группу, создавая в ней кластерный индес,
также некластерные индесы (перестраиваю их, указывая новую файловую группу с рамдрайв-файлом)

далее считаю что исходная и целевая таблица находятся в рамдрайв,
также добавляю атрибут DEFAULT файловой группе на rambdive-разделе.

запускаю INSERT WITH (TABLOCK).... SELECT with (nolock) снова.
по статистике ввода-вывода вижу что используется файловая группа, находящаяся на дисковом-разделе (используется файл данных).

почему так происходит-обе таблицы же на ramdrive-разделе. Зачем MSSQL использует файловую группу на диске?
13 июн 12, 14:21    [12707790]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое клонирование таблиц  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Вообще-то версию сиквела тоже не мешало бы указать...

http://msmvps.com/blogs/gladchenko/archive/2010/03/09/1761298.aspx
13 июн 12, 14:26    [12707834]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое клонирование таблиц  [new]
aux3
Member

Откуда:
Сообщений: 316
версия mssql Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)
13 июн 12, 14:32    [12707876]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое клонирование таблиц  [new]
aux3
Member

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

Прочитал статью. Мой случай эквивалентен вставке в кучу данной статьи.

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

объясните пожалуйста!
13 июн 12, 14:49    [12707998]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое клонирование таблиц  [new]
aux3
Member

Откуда:
Сообщений: 316
up!
13 июн 12, 16:19    [12708911]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое клонирование таблиц  [new]
komrad
Member

Откуда:
Сообщений: 5736
aux3

Задача - максимально быстро сделать клон существующей таблицы.
исходная таблица содержит 2 некластерных индекса, целевая индесов не содержит.


BCP
13 июн 12, 20:43    [12710373]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое клонирование таблиц  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
aux3
Имеется существующая конфигурация: Сервер Windows 2008, 32 ядра Intel,
1ТБ база на диске (Raid 10 из 20 дисков),
дополнительный 50ГБ-раздел на ramdive (о нём речь пойдёт позже).

Задача - максимально быстро сделать клон существующей таблицы.
исходная таблица содержит 2 некластерных индекса, целевая индесов не содержит.

клон в делает следующая конструкция:
INSERT WITH (TABLOCK).... SELECT with (nolock)

копирование делается неприемлемо долго,
при выполении конструкции единственное весомое ожиданеие сосавляет pageiolatch_sh

для теста максимально возможной скорости копирования создаю новую файловую группу,
связываю её с новым файлом размещённым на рамдрайв-разделе.

переношу сушествующую исходную таблицу в новую файловую группу, создавая в ней кластерный индес,
также некластерные индесы (перестраиваю их, указывая новую файловую группу с рамдрайв-файлом)

далее считаю что исходная и целевая таблица находятся в рамдрайв,
также добавляю атрибут DEFAULT файловой группе на rambdive-разделе.

запускаю INSERT WITH (TABLOCK).... SELECT with (nolock) снова.
по статистике ввода-вывода вижу что используется файловая группа, находящаяся на дисковом-разделе (используется файл данных).

почему так происходит-обе таблицы же на ramdrive-разделе. Зачем MSSQL использует файловую группу на диске?
Мы понятия не имеем где у вас находятся таблицы, файловые группы, файлы, а также каким конкретно скриптом вы переносите данные, как проверяете ввод-ввывод и прочее. Есть ли внешние ключи на таблице получателе?
Скрипты пожалуйста всего вышеперечисленного. В файл данных идет запись или чтение?
13 июн 12, 23:50    [12710822]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое клонирование таблиц  [new]
SomewhereSomehow
Member

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

А что с tempdb?
14 июн 12, 00:00    [12710835]     Ответить | Цитировать Сообщить модератору
 Re: Быстрое клонирование таблиц  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Поясню вопрос.
автор
переношу сушествующую исходную таблицу в новую файловую группу, создавая в ней кластерный индес,
также некластерные индесы (перестраиваю их, указывая новую файловую группу с рамдрайв-файлом
)

Где и как это происходит?
14 июн 12, 00:02    [12710838]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить