Я хранимая процедура, которая выбирает файлы с критериями разбиения на страницы. В этой задаче при запуске этой хранимой процедуры выдается исключение
Timeout expired. The timeout period elapsed prior to completion of the operation
Как снова работать без исключения?
Мои исследования и попытки:
Я сравнивал одну и ту же базу данных на двух серверах баз данных (prod и test). Тестовый сервер может работать, а продакшн - нет.
Я изменил строку подключения, добавив «connect timeout = 30000» (5 минут)
Я также добавил CommandTimeOut = 30000 в методе списка файлов.
Дополнительная информация: Сервер базы данных Prod и сервер IIS размещены на разных серверах. Я искал некоторые статьи и из-за медленного соединения или более тяжелого трафика c на сервере БД. Но я впервые столкнулся с этой ошибкой сегодня.
Моя хранимая процедура расположена ниже
ALTER PROCEDURE [dbo].[inwsDosyaListesiSirali]
@SiteId INT,
@KullaniciId int,
@SubeIp varchar(max),
@DepartmanId int,
@KategoriKod VARCHAR(200)= null,
@Baslik VARCHAR(100) = null,
@IlkTarih DATETIME=null,
@SonTarih DATETIME=null,
@Icerik varchar(max) = null,
@PageNumber INT=1,
@PageSize INT=10,
@SortColumn varchar(100)=null,
@SortOrder BIT=null
AS
BEGIN
DECLARE @KategoriKodListe TABLE(KategoriKod VARCHAR(20) primary key);
INSERT INTO @KategoriKodListe
SELECT Item FROM dbo.SplitString(@KategoriKod,',')
declare @SubeId int,
@DepartmanTurId int ,
@SubeKategoriKod varchar(100)
SELECT @DepartmanTurId=[DepartmanTurId] FROM [Departman]
where [SiteId]=@SiteId and [Id] = @DepartmanId
select @SubeId=ks.SubeId, @SubeKategoriKod = ksk.Kod from [dbo].[KurumsalSube] ks
inner join [dbo].[KurumsalSubeKategori] ksk on ks.KategoriId = ksk.KategoriId
where SiteId=@SiteId and SubeIp like '%'+@SubeIp+'%'
;With EMP AS (
SELECT
r.RaporId
,r.HistoryId
,r.Baslik
,r.DosyaAd
,r.RaporAktifTarih
,r.RaporGecerlilikTarih
,r.RaporTarih
,r.KategoriId
,h.KayitTarih
,r.ParentRaporId
,kat.Ad [KategoriAd]
,kat.Kod [KategoriKod]
,kat.Sira
,T.DosyaTurId
,T.Ad AS DosyaTurAd
--,T.Uzanti AS DosyaUzanti
,T.iconName
--,(ROW_NUMBER() OVER (PARTITION BY r.[KategoriId] ORDER BY r.[RaporTarih] desc)) AS number
,s.SistemDosyaId
,s.DosyaAdi as SistemDosyaAd
FROM Dosya r
INNER JOIN DosyaKategori kat ON kat.KategoriId=r.KategoriId
INNER JOIN DosyaHistory h ON h.Id=r.HistoryId
LEFT JOIN DosyaTur T ON T.DosyaTurId=r.DosyaTurId
LEFT JOIN DosyaIcerik di ON r.SistemDosyaId = di.SistemDosyaId
--Yetki kontrol kısmı
left join [dbo].[DosyaYetki] dy on r.DosyaYetkiId = dy.DosyaYetkiId
LEFT JOIN SistemDosyalari s ON s.SistemDosyaId=r.SistemDosyaId
WHERE kat.SiteId=@SiteId AND r.IsOnay=1
AND (isnull(@KategoriKod,'') = '' or exists(select 1 from @KategoriKodListe k where k.KategoriKod=kat.Kod) )
AND ((NULLIF(r.RaporGecerlilikTarih,'') IS NULL OR (r.RaporGecerlilikTarih >= GETDATE())))
AND ((NULLIF(r.RaporAktifTarih,'') IS NULL OR (r.RaporAktifTarih <= GETDATE())))
-- AND ((NULLIF(@Baslik,'') IS NULL OR (r.Baslik like '%'+@Baslik+'%' ) OR NULLIF(r.ParentRaporId,'') IS NOT NULL))
--AND ((NULLIF(@IlkTarih,'') IS NULL OR (@IlkTarih<=CONVERT(date, DATEADD(day,0,r.RaporTarih)))))
--AND ((NULLIF(@SonTarih,'') IS NULL OR (@SonTarih>=CONVERT(date, DATEADD(day,0,r.RaporTarih)))))
--AND ((NULLIF(@Icerik,'') IS NULL OR (di.Icerik like '%'+@Icerik+'%') OR NULLIF(r.ParentRaporId,'') IS NOT NULL))
--Yetki kontrol kısmı
and (
dy.DosyaYetkiId is null or
(
dy.SiteId=@SiteId and
(
r.DosyaYetkiId is null or r.[HerkeseGosterilsin]=1 or -- herkese açık demek oluyor
(@DepartmanTurId=1 and @SubeKategoriKod='INGENELMUDURLUK' ) or -- Kategori Kod : INGENELMUDURLUK ve yönetim departmanında ise tüm dosyaları görebilsin
(
(
-- Isnull(dys.SubeId,'')='' or
-- dys.SubeId=@SubeId
exists(select 1 from [dbo].[DosyaYetkiSube] dys where dys.SubeId=@SubeId )
or not exists(select 1 from [dbo].[DosyaYetkiSube] dys where dys.DosyaYetkiId=r.DosyaYetkiId )
)and
(
@DepartmanTurId=1 -- @DepartmanTurId=1 ise şubenin yönetici olarak o şubede ki tüm dosyaları görebilir
-- or Isnull(dyd.DepartmanId,'')=''
-- dyd.DepartmanId=@DepartmanId
or exists(select 1 from [dbo].[DosyaYetkiDepartman] dyd where dyd.DepartmanId = @DepartmanId)
or not exists(select 1 from [dbo].[DosyaYetkiDepartman] dyd where dyd.DosyaYetkiId = r.DosyaYetkiId )
)and
(
@DepartmanTurId=1 -- @DepartmanTurId=1 ise şubenin yönetici olarak o şubede ki tüm dosyaları görebilir
-- or Isnull(dyp.PersonelId,'')=''
-- dyp.PersonelId=@KullaniciId
or exists(select 1 from [dbo].[DosyaYetkiPersonel] dyp where dyp.PersonelId=@KullaniciId )
or not exists(select 1 from [dbo].[DosyaYetkiPersonel] dyp where dyp.DosyaYetkiId = r.DosyaYetkiId )
)
)
)
)
)
),
cte AS
(
SELECT CAST(ROW_NUMBER() OVER(order by
CASE WHEN (RTRIM(LTRIM(@SortColumn)) IS NULL)
THEN KayitTarih END DESC,
CASE WHEN (@SortColumn = 'Baslik' AND @SortOrder=1)
THEN Baslik END ASC,
CASE WHEN (@SortColumn = 'Baslik' AND @SortOrder=0)
THEN Baslik END DESC,
CASE WHEN (@SortColumn = 'Tarih' AND @SortOrder=1)
THEN KayitTarih END ASC,
CASE WHEN (@SortColumn = 'Tarih' AND @SortOrder=0)
THEN KayitTarih END DESC
) AS REAL) AS NUMBER, 1 AS Indent, Parent.* FROM EMP Parent WHERE Parent.ParentRaporId IS NULL
UNION ALL
SELECT c.NUMBER + (CAST(ROW_NUMBER() OVER(ORDER BY
CASE WHEN (RTRIM(LTRIM(@SortColumn)) IS NULL)
THEN child.KayitTarih END DESC,
CASE WHEN (@SortColumn = 'Baslik' AND @SortOrder=1)
THEN child.Baslik END ASC,
CASE WHEN (@SortColumn = 'Baslik' AND @SortOrder=0)
THEN child.Baslik END DESC,
CASE WHEN (@SortColumn = 'Tarih' AND @SortOrder=1)
THEN child.KayitTarih END ASC,
CASE WHEN (@SortColumn = 'Tarih' AND @SortOrder=0)
THEN child.KayitTarih END DESC
) AS REAL)/POWER(10, c.Indent) ) AS NUMBER, c.Indent + 1 AS Indent, child.* FROM EMP
child INNER JOIN cte c ON child.ParentRaporId= c.RaporId
),Count_CTE AS (
SELECT COUNT(*) AS [TotalCount]
FROM cte
WHERE (NULLIF(@Baslik,'') IS NULL OR (cte.Baslik like '%'+@Baslik+'%' ))
AND ((NULLIF(@IlkTarih,'') IS NULL OR (@IlkTarih<=CONVERT(date,
DATEADD(day,0,cte.RaporTarih)))))
AND ((NULLIF(@SonTarih,'') IS NULL OR (@SonTarih>=CONVERT(date,
DATEADD(day,0,cte.RaporTarih)))))
) SELECT * FROM cte, Count_CTE
WHERE (NULLIF(@Baslik,'') IS NULL OR (cte.Baslik like '%'+@Baslik+'%' ))
AND ((NULLIF(@IlkTarih,'') IS NULL OR (@IlkTarih<=CONVERT(date, DATEADD(day,0,cte.RaporTarih)))))
AND ((NULLIF(@SonTarih,'') IS NULL OR (@SonTarih>=CONVERT(date, DATEADD(day,0,cte.RaporTarih)))))
ORDER BY cte.NUMBER
OFFSET (@PageNumber-1)*@PageSize ROWS FETCH NEXT @PageSize ROWS ONLY
END