При вставке блока вставка начинается очень быстро (3 тысячи за 1 секунду), но со временем вставка занимает до 60-70 секунд на каждые 3 тысячи из 8 миллионов записей.
Кто-то знает, что я могу проверить: до сих пор мы проверили авторазраст. Он проверяет на уровне диска, памяти и обрабатывает любые увеличения, чтобы что-то предупредить.Это виртуальный сервер VM Ware, сервер Sql 2016 Enterprise.
Можете ли вы мне помочь, но я могу проверить все конфигурации BDD, хранилища и сервера.
table_data_tmp 8 миллионов идентификаторов таблиц (используется для извлечения) и содержит индекс data_table_tmp1 8 миллионов table_data_tmp1_2 3 mil записи tabla_datos_fin 19 миллионов 30 ГБ - при вставке здесь время вставки является медленным
Присоединенные сценарии только в качестве ссылки, поскольку уже было определено, что при вставкек финальному столу каждый раз проходит вставка
IF EXISTS (SELECT 1 FROM SYS.INDEXES WHERE OBJECT_ID = OBJECT_ID( 'tabla_datos_fin') AND NAME = 'IX_tabla_datos_fin_TIP_IDE_1' AND IS_DISABLED =0)
ALTER INDEX IX_tabla_datos_fin_TIP_IDE_1 ON tabla_datos_fin DISABLE;
GO
TRUNCATE TABLE tabla_datos_tmp
IF EXISTS (SELECT 1 FROM SYS.INDEXES WHERE OBJECT_ID = OBJECT_ID( 'IDX_tabla_datos_tmp') AND NAME = 'tabla_datos_tmp')
DROP INDEX tabla_datos_tmp.IDX_tabla_datos_tmp
GO
INSERT INTO tabla_datos_tmp (campos)
SELECT *
FROM [tabla_datos_tmp1]
CREATE INDEX IDX_tabla_datos_tmp ON tabla_datos_tmp (CONTROL_INT) INCLUDE (all campos)
DECLARE
@batchsize INT,
@ctr INT,
@rc INT,
@val_ini int,
@val_fin int
SELECT
@batchsize = 3000,
@ctr = 0;
WHILE 1 = 1
BEGIN
set @val_ini = @batchsize * @ctr
set @val_fin = @batchsize * (@ctr + 1)
truncate table tabla_datos_tmp1_2
INSERT INTO tabla_datos_tmp1_2
(all campos)
SELECT*
FROM tabla_datos_tmp WITH (INDEX =IDX_tabla_datos_tmp )
WHERE CONTROL_INT > @VAL_INI
AND CONTROL_INT <= @VAL_FIN
UPDATE tabla_datos_tmp1_2 SET FECHA_ULTIMA_ACTUALIZACION= GETDATE ()
/* INSERTION IS DELAYED HERE */
INSERT INTO tabla_datos_fin (al campos)
SELECT *
FROM tabla_datos_tmp1_2
/**********************/
DELETE A
FROM tabla_datos_tmp A WITH (INDEX =IDX_tabla_datos_tmp )
WHERE CONTROL_INT > @VAL_INI AND CONTROL_INT <= @VAL_FIN
IF @@ROWCOUNT = 0
BREAK;
SET @ctr = @ctr + 1;
PRINT @ctr
END
IF EXISTS (SELECT 1 FROM SYS.INDEXES WHERE OBJECT_ID = OBJECT_ID( 'tabla_datos_fin') AND NAME = 'IX_tabla_datos_fin' AND IS_DISABLED =1)
ALTER INDEX IX_tabla_datos_fin ON tabla_datos_fin REBUILD;
GO
IF EXISTS (SELECT 1 FROM SYS.INDEXES WHERE OBJECT_ID = OBJECT_ID( 'tabla_datos_fin') AND NAME = 'IX_tabla_datos_fin_TIP_IDE_1' AND IS_DISABLED =1)
ALTER INDEX IX_tabla_datos_fin_TIP_IDE_1 ON tabla_datos_fin REBUILD;
GO