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

Есть таблица с объемом порядка 20 млн строк, в которую раз в неделю вставляется порядка 50 тыс строк.
На данной таблице пара некластерных индексов и первичный ключ.

Как можно ускорить вставку? Нормальной ил является практика отключение индексов на время вставки? это делается ночью, когда юзеров мало
16 июл 13, 14:39    [14573368]     Ответить | Цитировать Сообщить модератору
 Re: вставка большого объема данных раз в неделю  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
large insert
Привет

Есть таблица с объемом порядка 20 млн строк, в которую раз в неделю вставляется порядка 50 тыс строк.
На данной таблице пара некластерных индексов и первичный ключ.

Как можно ускорить вставку? Нормальной ил является практика отключение индексов на время вставки? это делается ночью, когда юзеров мало

Сколько по времени идёт вставка 50 тысяч строк?
16 июл 13, 14:41    [14573381]     Ответить | Цитировать Сообщить модератору
 Re: вставка большого объема данных раз в неделю  [new]
large insert
Guest
Часа 3. Но это 2 разных сервера. Вставка идет на линкед сервер
16 июл 13, 14:43    [14573388]     Ответить | Цитировать Сообщить модератору
 Re: вставка большого объема данных раз в неделю  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3393
large insert
Часа 3. Но это 2 разных сервера. Вставка идет на линкед сервер
... находящийся на другой стороне планеты, по мобильному каналу, по 1 строке за раз. Так, что ли?

Код покажите, как именно вы вставляете. И на какой стороне он выполняется.
16 июл 13, 14:47    [14573420]     Ответить | Цитировать Сообщить модератору
 Re: вставка большого объема данных раз в неделю  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
large insert
Часа 3. Но это 2 разных сервера. Вставка идет на линкед сервер


Значит вставка идет по одной записи. Дешевле будет забирать с линкованного сервера. А лучше всего сделать для этого SSIS пакет.
16 июл 13, 14:49    [14573426]     Ответить | Цитировать Сообщить модератору
 Re: вставка большого объема данных раз в неделю  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
large insert
Часа 3. Но это 2 разных сервера. Вставка идет на линкед сервер

Почитайте тут:

ТЫНЦ

Вы каждую запись отдельно вставляете.
16 июл 13, 14:53    [14573476]     Ответить | Цитировать Сообщить модератору
 Re: вставка большого объема данных раз в неделю  [new]
large insert
Guest
Ennor Tiegael,

SET XACT_ABORT ON;
SET TRAN ISOLATION LEVEL READ UNCOMMITTED;

DECLARE @MaxSaleId INT
SELECT @MaxSaleId = MAX(SaleId) 
FROM [192.168.1.524].[Total].[dbo].[Sales]
     
--1. Update deleted sales
DECLARE @DeletedSales TABLE (SaleId INT) 
INSERT @DeletedSales(SaleId) 
SELECT [SaleId] 
    FROM [UpdSales].[dbo].[vw_Data]
    WHERE [SaleId] > @MaxSaleId AND IsDeleted = 1
--
IF (SELECT COUNT(*) FROM @DeletedSales) > 0
BEGIN
	UPDATE i
	SET i.IsDeleted = 1
	FROM [192.168.1.524].[Total].[dbo].[Sales] i 
		JOIN @DeletedSales d
		ON i.[SaleId] = d.SaleId
END 

--2. Insert new sales
INSERT INTO [192.168.1.524].[Total].[dbo].[Sales]
			(...)
SELECT ...
	FROM  [UpdSales].[dbo].[vw_Data] 
	WHERE SaleId > @MaxSaleId



pkarklin
large insert
Часа 3. Но это 2 разных сервера. Вставка идет на линкед сервер


Значит вставка идет по одной записи. Дешевле будет забирать с линкованного сервера. А лучше всего сделать для этого SSIS пакет.


что вы имеете в виду "Значит вставка идет по одной записи" ? разве при обычном инсерте вставка будет идти не по одной строке? или имеете ввиду про записи в логе транзакции

А как оптимально решение если вставлять данные на линкованный сервер во временную-постоянную таблицу без индексов. а потом уже из нее вставлять в постоянную таблицу?
16 июл 13, 15:06    [14573603]     Ответить | Цитировать Сообщить модератору
 Re: вставка большого объема данных раз в неделю  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
large insert

что вы имеете в виду "Значит вставка идет по одной записи" ?


https://www.sql.ru/articles/mssql/2007/051803pushandpullinmicrosoftsqlserverlinkedservers.shtml
16 июл 13, 15:09    [14573633]     Ответить | Цитировать Сообщить модератору
 Re: вставка большого объема данных раз в неделю  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
large insert,

сдаётся мне, вам надо выполнять скрипт на сервере [192.168.1.524]
без какой-то там табличной переменной.
Причём, если сервер >= SQL2008, то красиво оформить одной командой MERGE
16 июл 13, 15:16    [14573710]     Ответить | Цитировать Сообщить модератору
 Re: вставка большого объема данных раз в неделю  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
large insert
А как оптимально решение если вставлять данные на линкованный сервер во временную-постоянную таблицу без индексов. а потом уже из нее вставлять в постоянную таблицу?


Оптимально - это SSIS пакет, с помощью которого такой небольшой объем данных должен влететь очень быстро. Да и для табличной переменной 10ки тысяч записей уже перебор.
16 июл 13, 15:31    [14573825]     Ответить | Цитировать Сообщить модератору
 Re: вставка большого объема данных раз в неделю  [new]
large insert
Guest
pkarklin
large insert
А как оптимально решение если вставлять данные на линкованный сервер во временную-постоянную таблицу без индексов. а потом уже из нее вставлять в постоянную таблицу?


Оптимально - это SSIS пакет, с помощью которого такой небольшой объем данных должен влететь очень быстро.
 Да и для табличной переменной 10ки тысяч записей уже перебор
.


а для временной таблицы?
17 июл 13, 17:04    [14579438]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить