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

Откуда:
Сообщений: 12
Подскажите, как сделать более правильнее.
Есть данные, которые необходимо периодически загружать в таблицу, при этом старые данные в таблице нужно удалять.
Но во время загрузки таблица не должна блокироваться на чтение.

Сейчас данные для загрузке хранятся в текстовом файле, и этот текстовый файл загружаю через конструкцию BULK INSERT.
Т.е. сначала делаю TRUNCATE, а потом загружаю BULK INSERT.
При этом таблица блокируется.
17 мар 17, 08:40    [20304557]     Ответить | Цитировать Сообщить модератору
 Re: При загрузке данных не блокировать таблицу  [new]
Добрый Э - Эх
Guest
AstX,

сделать в сторонке отдельную секционированную таблицу, заливать в нею необходимые новые данные, после чего делать обмен секциями между целевой таблицей и "в сторонке секционированной"....
17 мар 17, 08:51    [20304565]     Ответить | Цитировать Сообщить модератору
 Re: При загрузке данных не блокировать таблицу  [new]
guest45
Guest
+ offtop
Если есть возможность, то эффективнее использовать кэширующую систему для запросов.

Кэширование в основе эффективности приложений
Кеширование и ваши запросы к базе данных
Кэширование данных
17 мар 17, 09:54    [20304759]     Ответить | Цитировать Сообщить модератору
 Re: При загрузке данных не блокировать таблицу  [new]
o-o
Guest
зачем секционировать-то, ему вся таблица нужна, а не 1 секция.
ровно в такую же таблицу заливать, а после заливки таблицы alter table..switch
17 мар 17, 09:58    [20304766]     Ответить | Цитировать Сообщить модератору
 Re: При загрузке данных не блокировать таблицу  [new]
Кесарь
Member

Откуда:
Сообщений: 671
Старые данные удаляются, но не нужно закрывать на чтение... А что читать-то, если данные удалены?
17 мар 17, 10:03    [20304779]     Ответить | Цитировать Сообщить модератору
 Re: При загрузке данных не блокировать таблицу  [new]
o-o
Guest
почему???
до момента switch читаются старые данные.
затем моментально truncate + switch, и читаются уже новые
17 мар 17, 10:13    [20304803]     Ответить | Цитировать Сообщить модератору
 Re: При загрузке данных не блокировать таблицу  [new]
Кесарь
Member

Откуда:
Сообщений: 671
o-o,

в какой такой «момент»? А если в это время идёт транзакция чтения по старым данным? Вы прямо во время её выполнения данные новые подпихнёте? И что получится в итоге?

Блокировки для того и придуманы, чтобы не было проблем с данными (по их содержанию). И обходить их – создавать проблемы самому себе.

Вообще ТС ничего не написал, зачем же это ему надо. Задача не поставлена по сути. Что нужно изначально?
17 мар 17, 10:44    [20304888]     Ответить | Цитировать Сообщить модератору
 Re: При загрузке данных не блокировать таблицу  [new]
o-o
Guest
господи помилуй
да годами эта схема у нас работает.
и не 1 таблицу, а под тысячу переключаем,
в 1 транзакции.
база на время операции в сингл юзер переводится,
хотя в это время и нет никого, все ночью происходит, но мало ли,
вдруг кто-то напланировал отчетов по расписанию на это время.

для чтецов и придумано, чтобы читали согласованные данные, а не половину таблиц со вчерашними данными,
половину с сегодняшними.
не блокировать же всю базу на время полной перезаливки всего.
льется по соседству, и пока не перелилось, все читают старые данные.
а "момент" переключения очень даже конкретный: это последняя из процедур заливки ночного бэтча
17 мар 17, 10:54    [20304952]     Ответить | Цитировать Сообщить модератору
 Re: При загрузке данных не блокировать таблицу  [new]
Кесарь
Member

Откуда:
Сообщений: 671
o-o
база на время операции в сингл юзер переводится,
хотя в это время и нет никого, все ночью происходит


И как это я сразу не догадался
17 мар 17, 11:00    [20304980]     Ответить | Цитировать Сообщить модератору
 Re: При загрузке данных не блокировать таблицу  [new]
o-o
Guest
вот сегодняшняя перезаливка.
3 секунды на переключение всех таблиц (терабайт данных)
вот бы все сидели и ждали, пока терабайт перельется

К сообщению приложен файл. Размер - 69Kb
17 мар 17, 11:02    [20304993]     Ответить | Цитировать Сообщить модератору
 Re: При загрузке данных не блокировать таблицу  [new]
o-o
Guest
Кесарь
o-o
база на время операции в сингл юзер переводится,
хотя в это время и нет никого, все ночью происходит


И как это я сразу не догадался

из-за одной таблицы жирновато наверное в сингл юзер переводить, не правда ли?
что truncate, что switch, хотят sch-m, так что переключится только когда читатели отвалятся.
ну а для всей базы single user в самый раз
17 мар 17, 11:06    [20305012]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить