SQL Server - низкая производительность во время транзакции вставки - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть хранимая процедура, которая выполняет запрос и возвращает строку в переменные, как показано ниже:

SELECT @item_id = I.ID, @label_ID = SL.label_id,
FROM tb_A I 
LEFT JOIN tb_B SL ON I.ID = SL.item_id
WHERE I.NUMBER = @VAR

У меня есть IF, чтобы проверить, является ли @label_ID нулевым или нет.Если он нулевой, он переходит к оператору INSERT, в противном случае он переходит к оператору UPDATE.Давайте сосредоточимся на INSERT, где я знаю, у меня проблемы.Часть INSERT выглядит следующим образом:

IF @label_ID IS NULL
BEGIN
    INSERT INTO tb_B (item_id, label_qrcode, label_barcode, data_leitura, data_inclusao)
    VALUES (@item_id, @label_qrcode, @label_barcode, @data_leitura, GETDATE())
END

Итак, у tb_B есть столбец PK в идентификаторе и столбец FK в item_ID, который ссылается на идентификатор столбца в таблице tb_A.

Я запустил SQL ServerПрофилировщик и я видели, что иногда продолжительность этой хранимой процедуры составляет около 2300 мс, а нормальное среднее значение для этого составляет 16 мс.

Я запустил «План выполнения», и самые большие затраты приходятся на компонент «Вставка кластерного индекса»,Ниже показано:

Предполагаемый план выполнения

Фактический план выполнения

Подробности

Подробнее о таблицах:

tb_A Storage:
Index space: 6.853,188 MB
Row count: 45988842
Data space: 5.444,297 MB

tb_B Storage:
Index space: 1.681,688 MB
Row count: 15552847
Data space: 1.663,281 MB

Statistics for INDEX 'PK_tb_B'.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Name                            Updated                         Rows                            Rows Sampled                    Steps                           Density                         Average Key Length              String Index                    
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PK_tb_B                     Sep 23 2018  2:30AM             15369616                        15369616                        5                               1                               4                               NO                                                              15369616                        

All Density                     Average Length                  Columns                         
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6.506343E-08                    4                               id               

Histogram Steps                 
RANGE_HI_KEY                    RANGE_ROWS                      EQ_ROWS                         DISTINCT_RANGE_ROWS             AVG_RANGE_ROWS                  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1                               0                               1                               0                               1                               
8192841                         8192198                         1                               8192198                         1                               
8270245                         65535                           1                               65535                           1                               
15383143                        7111878                         1                               7111878                         1                               
15383144                        0                               1                               0                               1                               


Statistics for INDEX 'IDX_tb_B_ITEM_ID'.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Name                            Updated                         Rows                            Rows Sampled                    Steps                           Density                         Average Key Length              String Index                    
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IDX_tb_B_ITEM_ID            Sep 23 2018  2:30AM             15369616                        15369616                        12                              1                               7.999424                        NO                                                              15369616                        

All Density                     Average Length                  Columns                         
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6.50728E-08                     3.999424                        item_id                         
6.506343E-08                    7.999424                        item_id, id      

Histogram Steps                 
RANGE_HI_KEY                    RANGE_ROWS                      EQ_ROWS                         DISTINCT_RANGE_ROWS             AVG_RANGE_ROWS                  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                0                               2214                            0                               1                               
16549857                        0                               1                               0                               1                               
29907650                        65734                           1                               65734                           1                               
32097131                        131071                          1                               131071                          1                               
32296132                        196607                          1                               196607                          1                               
32406913                        98303                           1                               98303                           1                               
40163331                        7700479                         1                               7700479                         1                               
40237216                        65535                           1                               65535                           1                               
47234636                        6946815                         1                               6946815                         1                               
47387143                        131071                          1                               131071                          1                               
47439431                        31776                           1                               31776                           1                               
47439440                        0                               1                               0                               1                               

PK_tb_B Фрагментация индекса

IDX_tb_B_Item_ID

Есть ли рекомендации?где я могу подать заявку и сделать эту продолжительность стабильной?

Надеюсь, вы мне поможете !!!Заранее спасибо ...

1 Ответ

0 голосов
/ 30 сентября 2018

Вероятно, проблема в DbType кластерного индекса.Кластерные индексы хранят данные в таблице на основе значений ключей.По умолчанию ваш первичный ключ создается с кластерным индексом.Это часто лучшее место, чтобы иметь это, но не всегда.Например, если у вас есть кластеризованный индекс по столбцу NVARCHAR, при каждом выполнении INSERT необходимо найти правильное место для вставки новой записи.Например, если в вашей таблице миллион строк, регистры расположены в алфавитном порядке, а новый регистр начинается с A, тогда ваш кластерный индекс должен переместить регистры с B на Z, чтобы поместить новый регистр в группу A.Если ваш новый регистр помечается звездочкой Z, то перемещается меньшее количество записей, но это не значит, что это тоже хорошо.Если у вас нет столбца, позволяющего последовательно вставлять новый регистр, вы можете создать для него столбец идентификаторов или иметь другой столбец, который логически является последовательным для любой транзакции, введенной независимо от системы, например, столбец datetime, который регистрируетсявремя на вставке: ocurrs.

Если вам нужна дополнительная информация, пожалуйста, проверьте эту документацию Microsoft

...