سلام و عرض ادب
من یک برنامه دارم که با یک جدول از sql server کار میکنند. thread های مختلفی در حال اینسرت و اپدیت و یا حذف و یا انتخاب از این جدول هستند. این نکته رو هم در نظر داشته باشید به هیچ وجه دو query بر روی یک سطر همزمان اپدیت و یا حذف ندارند. ( اینو مدیریت کردم در برنامه خودم )

ممکنه سطری که در حال اپدیت هست رو در select بخونیم ( به طور همزمان ) اما بر روی یک سطر در لیک لحظه دو اپدیت همزمان نداریم.

برنامه من به خوبی کار میکنه اما گاهی برای یک اپدیت ساده که 10 یا 20 میلی ثانیه زمان میبره ، حدودا 2000 ثانیه طول میشکه.
من برای درک کارکرد برنامه ، از یک ترد لاگ گرفتم که زمان اپدیت ها به چه شکل بوده

این لاگ های مربوط به یک ترد هست
_____________________________4/20/2017 14:01:20_____________________________

16

_____________________________4/20/2017 14:06:27_____________________________

396

_____________________________4/20/2017 14:16:59_____________________________

582

_____________________________4/20/2017 14:34:10_____________________________

15658

_____________________________4/20/2017 14:56:59_____________________________

2852

_____________________________4/20/2017 15:04:38_____________________________

87805

_____________________________4/20/2017 15:36:08_____________________________

392795

_____________________________4/20/2017 16:21:24_____________________________

623428

_____________________________4/20/2017 16:41:48_____________________________

785921

_____________________________4/20/2017 17:24:21_____________________________

840607

_____________________________4/20/2017 17:46:30_____________________________

869007

_____________________________4/20/2017 18:29:58_____________________________

492379

_____________________________4/20/2017 18:47:29_____________________________

731698

_____________________________4/20/2017 19:42:40_____________________________

129920

_____________________________4/20/2017 19:54:35_____________________________

1210

_____________________________4/20/2017 20:20:24_____________________________

15

_____________________________4/20/2017 21:13:44_____________________________

134

_____________________________4/20/2017 21:16:55_____________________________

14

_____________________________4/20/2017 21:38:27_____________________________

33

_____________________________4/20/2017 21:40:53_____________________________

195

_____________________________4/20/2017 21:55:06_____________________________

13

_____________________________4/20/2017 22:23:22_____________________________

19

_____________________________4/20/2017 22:36:59_____________________________

14

_____________________________4/20/2017 22:41:55_____________________________

429

_____________________________4/20/2017 22:49:14_____________________________

14

_____________________________4/21/2017 00:00:42_____________________________

141

_____________________________4/21/2017 00:17:32_____________________________

15

_____________________________4/21/2017 00:57:39_____________________________

501205

_____________________________4/21/2017 02:19:53_____________________________

2735636

_____________________________4/21/2017 03:25:22_____________________________

3275132



این لاگ ها زمان گرفتن لاگ رو نشون میده و عدد بین اون تایم ها به میلی ثانیه هست و زمان اپدیت شدن یک رکورد رو نشون میده.

تعداد رکورد های دیتابیس در همه زمان ها ثابت هست . 68 هزار رکورد هست. اما من نمیدونم چرا دقیقا یک نوع اپدیت که انجام شده زمان انجام اون اینهمه متغیر هست.

ایا باید در دیتابیسم از lock استفاده کنم؟ یا چه چیزی که این مشکل رو حل کنه؟

این لاگ ها از این خط کد نوشته شدند :
Stopwatch sw2 = new Stopwatch();
sw2.Start();
query = "UPDATE UpgradeQueue2 SET datecreated='" + T + "', dateend='" + T.AddSeconds(secends) + "', taskid='" + Task + "' WHERE server='" + Server + "' AND account='" + Account + "' and taskid<'1000' and dateend <= convert(datetime,'" + DateTime.Now + "',121)";
using (var command = new SqlCommand(query, connection))
{
command.CommandTimeout = 0;
command.ExecuteNonQuery();
}
sw2.Stop();