PDA

View Full Version : حرفه ای: خطا در ارتباط با database برای درخواست های همزمان



leila.net
پنج شنبه 26 شهریور 1394, 09:48 صبح
با سلام و احترام
ضمن تشکر از توجه و راهنمایی دوستان ، بنده سناریو رو توضیح میدم و مشکلی که الان بهش برخوردم رو و بعد از دوستان تقاضا دارم در مورد رفع مشکل رهنمایی بفرمایند :


من با C#‎‎‎ و asp.net mvc کار می کنم.


خب در نظر بگیرین یک حلقه foreach دارم با حدود 1500 ایتم که داخل هر حلقه چهار ارتباط با دیتابیس دارم. چهار ارتباط با دیتابیسم شامل دو insert , update که با sp انجام میشه و یک دستور Select که با توجه به item لیستم ، top حدود 10 تا 100 رو از یکی از جدول هام انتخاب می کنه و البته مابین این ها یکسری پرداش هایی صورت میگیره و نهایتا bulkInsert انجام میدم که برا اینکار هم از table type استفاده کردم .


تا اینجا مشکلی پیش نمی اومد و برنامه بخوبی کار می کرد به غیر از یک مورد که زمان اجرا خیلی طولانی بود!


خب با توجه به اینکه زمان اجرای سریال این فرایند زیاد بود تصمیم گرفته شد بجای foreach ، از Pararllel.ForEach استفاده کنیم ولی خب الان به timeout از سمت Sql Server مواجه میشیم !
البته در جزئیات خطا این رو مشاهده می کنیم


connection pool reached max size


هر چند pool max size رو هم افزایش میدم ولی ظاهرا اعمال نمیشه زمان اجرا و به این ترتیب خطا همچنان پیش میاد!


البته این رو باید اضافه کنم که تمام دستورات داخل حلقه اصولا همزمان اجرا نمی شن چون بسته به item ، پردازش های متفاوتی داخل حلقه انجام میگیره.


activity monitor رو هم بررسی کردم و حداکثر تا 280 فرآیند و ارتباط با دیتابیس رو دیدم که البته اکثر اون ها هم تو وضعیت awaiting command بودن .


ممنون میشم در مورد خطاهای بوجود آمده و نحوه رفع اون راهنمایی کنین .