sajadf7
جمعه 01 اردیبهشت 1396, 16:46 عصر
سلام و عرض ادب
من یک برنامه دارم که با یک جدول از 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();
من یک برنامه دارم که با یک جدول از 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();