PDA

View Full Version : سوال: استفاده زياد از کش مشکلي داره يا خير



m110_110
چهارشنبه 06 بهمن 1389, 15:46 عصر
با سلام
من با استفاده از تاپيک هاي اين فروم، در يک پورتال در جاهاي خاصي از کش استفاده کرده ام
مي خواستم بدونم اگر اطلاعات زيادي براي هر کاربر درون کش داشته باشيم ايا مي تونه مشکلي ايجاد کنه يا نه و اگر بله راه حل چيه؟
اين را هم بگويم که مثلا براي هر کاربر حداکثر 10 تا datatable کوچک براش کش ميشه
و همچنين سرعتش خيلي برام راضي کننده شده چرا که واقعا هر کدوم از اون ها کوئري هاي سنگين دارند که با يک بار خوندن و کش کردن اون ها سرعت عالي شده
ممنون

alonemm
چهارشنبه 06 بهمن 1389, 19:35 عصر
سلام دوست من:
كلا كش بروي CPU و مقدار كش اون تاثير ميزاره.
وبراي كوئري از SP استفاده كنيد سرعت بالاتر ميره.

Javad_Darvish_Amiry
چهارشنبه 06 بهمن 1389, 20:47 عصر
با سلام و خسته نباشید.
دات نت به ازای هر کاربرد ۴ گیگ کش رو تضمین کرده (صرف نظر از مقدار واقعی حافظه) و حجم اطلاعاتی که شما توی کش میریزید در دید عادی نباید تاثیر گذار تو کارایی باشه؛ اما با توجه به حافظه مجازی و پردازش هایی که برای جابجایی داده بین حافظه واقعی و مجازی صورت میگیره (مدیریت اینکار به عهده دات نت هست) از یه طرف؛ گرانقدر بودن حافظه در همه شرایط از طرف دیگه؛ محدودیت هایی که سرور برای کاربرد شما قایل میشه (و این خیلی طبیعیه) و این واقعیت که دات نت هر وقت تشخیص بده (با کمبود حافظه مواجه بشه) کش رو بدون اجازه ما خالی میکنه؛ میشه نتیجه گرفت که کش بخش گرانقیمتیه و باید بهترین استفاده ازش بشه. یه راه کارایی همونطور که دوستمون اشاره کردن استفاده از پروسیجر هاست. یه راه دیگه باز اینه که خودمون هم باید یه مقداری رو کش مدیریت کنیم (در واقع به دات نت و البته به خودمون کمک کنیم) مثلا چند درجه از پریوریتی (با یه enum) تعریف کنیم و زمان اقامت داده ها در کش رو بر اساس اولویت ها تعیین کنیم. یا مثلا داده ها رو به شکل ابسولوت کش نکنیم (حجم پردازش برای پر و خالی کردن کش میره بالا) و به جاش هر جا (هر متودی) نیاز بود با کلید های سازماندهی شده و منظم آیتم کش رو پیدا و از حافظه پاکش کنیم و یه کارایی از این قبیل. بیشتر از این چیزی به ذهنم نمیرسه. شرمنده. موفق و پیروز باشید.

Felony
چهارشنبه 06 بهمن 1389, 20:53 عصر
اما با توجه به حافظه مجازی و پردازش هایی که برای جابجایی داده بین حافظه واقعی و مجازی صورت میگیره (مدیریت اینکار به عهده دات نت هست)
مدیریت ارتباط بین حافظه اصلی و حافظه مجازی بر عهده سیستم عامل هست نه Net. ؛ مگر اینکه منظورتون چیز دیگه ای بوده باشه ...

Javad_Darvish_Amiry
چهارشنبه 06 بهمن 1389, 21:29 عصر
مدیریت ارتباط بین حافظه اصلی و حافظه مجازی بر عهده سیستم عامل هست نه Net. ؛ مگر اینکه منظورتون چیز دیگه ای بوده باشه ...
ممنون از لطفتون اما نه دوست عزیز منظورم همونی بود که نوشتم. دات نت ۴ گیگ حافظه رو تضمین میکنه اما OS بستگی داره به تنظیمات کاربر. و حافظه تو دات نت شامل دیتا کش - کد کش - سشن (دیتا کش منحصر به نشست) و حافظه به معنای عرف هست (خیلی شبیه به یه OS مستقل میمونه؛ همونطوری که JVM!!!) و مدیریت سه بخش اول رو خود دات نت به عهده داره و آخری همونیه که تو درس سیستم عامل خوندیم (در مورد دات نت داریم صحبت میکنیم) که باز برای خودش بخش بندیهایی داره که خودتون مسلط هستید و نیاز به توضیح نداره. این جا خوب حرف شما مصداق پیدا میکنه. (البته عذرخواهی میکنم قصدم تقابل نیست روشن شدن موضوعه) پاینده باشید.

m110_110
پنج شنبه 07 بهمن 1389, 08:55 صبح
با سلام
خیلی ممنون از پاسختون
من در اکثر کوئري هام از SP استفاده مي کنم اما بدليل زياد بودن کاربرانم و همچنين ترافيک بالاي پورتال و اطلاعات زياد نگران هستم که در صورتي که کاربرام بيشتر شود و اطلاعات حجمش خيلي بالا بره سرعت پورتال پايين بياد
همچنين در حال حاضر کوئري هام سرعت خوبي دارند ولي بدليل زياد بودن ان ها و استفاده ي زياد از ان ها مجبورا به کش روي اوردم و اينکه حداقل هر 5 دقيقه يکبار کشم را refresh مي کنم و اگر کش ها زودتر هم بدلايل مختلف از بين بروند دچار مشکل نمي شوم و دوباره object هاي مورد استفاده را دوباره مي سازم و همچنين سرور اختصاصي دارم و از اين نظر مشکلي نيست و حافظه واقعي خوبي در اختيار دارم
اما سوال اينجاست اگر زياد از کش استفاده بشود ايا ممکنه مشکلي ايجاد بشود؟

ولي واقعا روي صفحاتم فعلا تاثير خوبي گذاشته و خيلي سريعتر شده اند
ممنون

Javad_Darvish_Amiry
پنج شنبه 07 بهمن 1389, 17:26 عصر
سلام. دوست عزیز داستان کلی کش رو خدمتتون عرض کردیم. فقط این که نیاز نیست هر 5 دقیقه کش رو ریفرش کنید. هر جا داده ی توی بانک داره تغییر میکنه، کش مرتبط رو پاک کنید کفایت میکنه (با کلید های سازماندهی شده به راحتی میتونید مدیریت کنید) و اکسپایر شدن آبجکت ها رو منوط کنید به آخرین استفاده از آبجکت و تایم اقامت آبجکت ها توی کش رو هم از روی اهمیتشون تعیین کنید. فکر میکنم این ها مهمترین موضوعاتی هستن که باید رعایت کنید تا بهترین کارایی رو داشته باشید. و مطمئن باشید مشکلی هم پیش نخواهد اومد. موفق باشید.

Vahid_moghaddam
پنج شنبه 07 بهمن 1389, 21:46 عصر
برای ارتباط cache و جدول در بانک اطلاعاتی می تونید از sqldependency استفاده کنید. البته احتیاج به تنظیماتی داره. در این حالت با تغییر جدول آیتمی که وابسته به جدول هست از cache بیرون می ره. شما اشاره کردید که برای هر کاربر اطلاعاتی رو کش می کنید. این توصیه شده نیست. در cache اطلاعاتی رو نگهداری کنید که مشترک بین کاربرها یا دسته ای از کاربر هاست (نه اینکه نشه برای هر کاربر از cache استفاده کرد، این نوع استفاده به شکلی هدر دادن منابع server هست.) در صورتی که برای هر کاربر آیتمی رو به cache اضافه می کنید، باید کاملا اون رو مدیریت کنید. در سطح کاربر یا request بهتره از session استفاده کنید.

aserfg
پنج شنبه 07 بهمن 1389, 22:16 عصر
سلام
کش دو قسم است :
1-output cache
2-data cache
وخود datacaching تنوع فراوانی داره مانند استفاده از کنترلهای منبع داده 2-sqlserver caching و کش با وابستگی یا تنها بر اساس تایم خاص و...
استفاده از کش به دلایل ذیل در asp.net بسیار توصیه می شه :
asp.net برای هر کنترل سرویس دهنده منبع داده مانند sqldatasource یک کوئری بر روی منبع داده اجرا می کند و به ازای هر کنترل نسبت دهنده مانند گرید ویو یک کوئری حال فرض کنید چندین گرید از یه منبع داده خوراک می گیرن و چند کاربر همزمان یه صفحه رو به سمت سرور می فرستن . استفاده از کش باعث می شه این کنترل برای درخواستها به لایه های زیرین (منظور همون بانک اطلاعاتی) مراجعه نکنه (تا زمان انقضا ).
خوب پس توی خوب بودنش شکی نیست . حالا یه سئوال وجود داره که شاید همون دغدغه شما و منظور سئوالتون باشه :
تکلیف هدر رفتن منابع سیستم (حافظه) چی می شه .
asp.net راهکار های بسیار زیادی برای این موضوع اندیشیده که با توجه به روش انتخابی شما توضیحات مفصلی داره .
سلسله مقالاتی رو توی سایتم گذاشتم(سایت با ie8 مشکل داره) تحت عنوان افزايش كارآئی برنامه های وب در ASP.NET (http://persianarticle.org/article.aspx?id=53&idauthore=1)
البته با ذکر منبع ، این مقالات در سیزده قسمت شرح مفصلی بر کش داده ها و انواع روشها است . اگه دوست داشتید می تونید مطالعه کنید .

Houmehre
چهارشنبه 13 بهمن 1389, 07:05 صبح
کش دو قسم است :
1-output cache
2-data cache
با تشکر از توضیحات همه دوستان. البته output-cache خودش جزو گروه data-cache به حساب میاد.

alonemm
چهارشنبه 13 بهمن 1389, 15:55 عصر
با سلام
خیلی ممنون از پاسختون
من در اکثر کوئري هام از SP استفاده مي کنم اما بدليل زياد بودن کاربرانم و همچنين ترافيک بالاي پورتال و اطلاعات زياد نگران هستم که در صورتي که کاربرام بيشتر شود و اطلاعات حجمش خيلي بالا بره سرعت پورتال پايين بياد
همچنين در حال حاضر کوئري هام سرعت خوبي دارند ولي بدليل زياد بودن ان ها و استفاده ي زياد از ان ها مجبورا به کش روي اوردم و اينکه حداقل هر 5 دقيقه يکبار کشم را refresh مي کنم و اگر کش ها زودتر هم بدلايل مختلف از بين بروند دچار مشکل نمي شوم و دوباره object هاي مورد استفاده را دوباره مي سازم و همچنين سرور اختصاصي دارم و از اين نظر مشکلي نيست و حافظه واقعي خوبي در اختيار دارم
اما سوال اينجاست اگر زياد از کش استفاده بشود ايا ممکنه مشکلي ايجاد بشود؟

ولي واقعا روي صفحاتم فعلا تاثير خوبي گذاشته و خيلي سريعتر شده اند
ممنون

در اين مورد يك نكته هست كه سعي كنيد در روييداد هاي مربوطه اعملياتي همانند بايند يا اجراي كوئري انجام بشه و اگه نياز نداريد در روييدادهايي مانند لود صفحه اين عمليات رو صرف نظر كنيد.
و همونطور كه گفتيد SP كه استفاده ميكنيد كلا سرعت بالاتر هست.