SQL SERVER 2016 МЕДЛЕННАЯ ВСТАВКА - PullRequest
0 голосов
/ 15 октября 2018

При вставке блока вставка начинается очень быстро (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

1 Ответ

0 голосов
/ 15 октября 2018

Используйте статистику ожидания сервера SQL, чтобы увидеть, что ожидает SQL.После того, как вы найдете это, изучите другие счетчики производительности, пока не найдете проблему.Я думаю, что ваш диск не может идти в ногу.

https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...