Mam problemy z przekroczeniem limitu czasu tabeli przy kopalni.TSQL: Przekroczenie limitu czasu na stole o dużym natężeniu ruchu
Przykład tabeli:
Id BIGINT,
Token uniqueidentifier,
status smallint,
createdate datetime,
updatedate datetime
ja wstawiania danych do tabeli z 2 różnych procedur przechowywanych są zawijane z transakcji (ze szczególnym nasileniem), a także jedno zadanie, które wykonuje się raz na 30 sekund.
Dostaję limitu czasu z tylko 1 z nich, a dziwne, że jej z prostego jednego
BEGIN TRY
BEGIN TRAN
INSERT INTO [dbo].[TempTable](Id, AppToken, [Status], [CreateDate], [UpdateDate])
VALUES(@Id, NEWID(), @Status, GETUTCDATE(), GETUTCDATE())
COMMIT TRAN
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN;
END CATCH
gdy istnieje jakiś ruch w tej tabeli (TempTable
) Procedura ta zachowuje się limit czasu.
Sprawdziłem plan wykonania i wygląda na to, że nie pominięto żadnych indeksów w obu procedurach przechowywanych.
Ponadto jedynym indeksem na TempTable
jest klaster PK na Id
.
Wszelkie pomysły?
Jeśli potrzebujesz więcej informacji, powiedz to.
Druga procedura przechowywana za pomocą tej tabeli nie powoduje żadnego dużego IO lub czegoś takiego.
Zlecenie używa jednak atomowego UPDATE
na tym stole, a na końcu DELETE
s z tabeli, ale ponieważ sprawdziłem na wysokim IO tej tabeli, zadanie nie trwa dłużej niż 3 sekundy.
Dzięki.
Nie sądzę, że potrzebujesz transakcji na jednym wyciągu. Pojedyncza instrukcja zakończy się pomyślnie lub nie. – Paparazzi