ورود

View Full Version : گفتگو: مدیریت حافظه برای پردازش های وقت گیر



shaghaghi
یک شنبه 02 تیر 1387, 07:54 صبح
سلام
اگر دقت کرده باشید وقتی شما از طریق یک Application نظیر VB فرمان اجرای یک sp نسبتا وقت گیر را به سرور SQL بدهید، برنامه تان به حالت کما فرو می رود!! (حتی ساعت Status Bar شما هم متوقف می شود)، حال اینکه شما در Query Analyzer این مشکل را ندارید و بعد از دادن فرمان اجرای آن sp با خیال راحت در همان محیط می توانید گردش کنید بدون اینکه تایمر آن مختل شود یا اینکه حتی چرخش آیکون Status bar آن متوقف شود
آنچه به نظر می رسد این است که در نرم افزار های حرفه ای قبل از اجرای هر پروسس برای سیستم کاربر (اعم از CPU و Memory) سقفی تعیین می شود که مثلا 20 درصد توان خود را برای این پروسس اختصاص دهد و مابقی آنرا صرف سایر درخواستها نماید (نظیر این تنظیم در سرور SQL مطابق تصویر ضمیمه براحتی امکان پذیر است)
دوستان عزیز، در این زمینه تجربه یا نظر خاص دارید؟
آیا این امکان فقط مختص نرم افزار های خاص و مایکروسافت است؟

yasak55
یک شنبه 02 تیر 1387, 08:54 صبح
سلام،
دلیل اینکه Query Analyzer موقع اجرای query های سنگین باز هم response-able هست اینه که از Thread جدا از Thread اصلی برنامه برای اجرای query استفاده می کنه. تعیین سقف برای CPU و یا منابع دیگه کمکی به freeze نشدن برنامه نمی کنه. برای این کار باید query ها رو در یک Thread جداگانه اجرا کنی... که پیشنهاد می کنم فقط و فقط در صورت لزوم این کارو بکنی. چون Debug کردن و نوشتن نرم افزارهای multi-thread تقریبا یه کاووسه!!

ASKaffash
یک شنبه 02 تیر 1387, 09:07 صبح
سلام
به این موضوع میگویند SQL pass through که نمونه هائی از آن به VFox6 را مطالعه کردم که دقیقا به همین موضوع اشاره میکند نمونه آدرس در MSDN98 : (از ODBC استفاده میکند)
SQL pass-through in client/server applications, expressions as parameters in

yasak55
یک شنبه 02 تیر 1387, 09:20 صبح
سلام،


سلام
به این موضوع میگویند SQL pass through که نمونه هائی از آن به VFox6 را مطالعه کردم که دقیقا به همین موضوع اشاره میکند نمونه آدرس در MSDN98 : (از ODBC استفاده میکند)
SQL pass-through in client/server applications, expressions as parameters in



متاسفانه SQL Server از تکنولوژی Pass-Through پشتیبانی نمی کنه و برنامه نویس خودش باید این کارو شبیه سازی کنه.

ASKaffash
یک شنبه 02 تیر 1387, 16:07 عصر
سلام
دوست من آن آدرس که قرار دادم اتفاقا یک مثال به VFox با بانک SQLServer است که از Pass-Through استفاده کرده است و این موضوع نشان میدهد SQLServer هم پشتیبانی می کند درضمن QA نیز دارد همین کار را میکند.

yasak55
یک شنبه 02 تیر 1387, 17:34 عصر
سلام،
درسته، از VFOX با استفاده از Pass-Through می شه به SQL Server وصل شد. به این دلیل که VFOX از ODBC (البته مطمئن نیستم) برای برقراری ارتباط استفاده می کنه و Pass-Through یک خصوصیت مربوط به ODBC هست. البته که بانک اطلاعاتی مبدا نیز باید از Pass-Through پشتیبانی بکنه که VFOX اینکاره می کنه. فکر می کنم MS Access هم از Pass-Through برای اجرای دستورات روی بانک های اطلاعاتی خارجی استفاده می کنه. درست می گم؟ لطفا راهنماییم کنید.

در مورد اینکه Pass-Through باعث می شه دستورات سریع تر اجرا بشه شکی نیست. اما این تکنولوژی باعث جلوگیری از Freeze شدن نرم افزار که دستورات SQL رو اجرا می کنه نمی شه. مثلا ممکنه باعث بشه یه Query که 15 ثانیه طول می کشیده تا اجرا بشه حالا مثلا 3 ثانیه طول بکشه. اما باز هم 3 ثانیه نرم افزار Freeze خواهد شد. و برای جلوگیری از این باید از یه Thread جدا گدانه استفاده کرد که اون Thread به Freeze بشه، نه Thread اصلی نرم افزار و نرم افزار بتونه سایر کارها رو انجام بده.

ASKaffash
یک شنبه 02 تیر 1387, 17:40 عصر
سلام
حال سئوال اینست که اگر از Thread استفاده گردد آیا میتوان عملیات ادامه استخراج داده ها را در هر مرحله ای Cancel کرد ولی در Pass-Through همواره میتوان اینکار را انجام داد همانگونه که QA میکند و از ODBC هم استفاده نمیکند من فکر نمیکنم Pass-Through مربوط به فقط ODBC باشد و در Provider های OLE_DB و غیره نیز معتبراست چون در یک مقاله از مایکروسافت دیدم که یک نقشه ای ارائه شده بود که حتی Provider های ازنوع OLE-DB هم از طریق ODBC میتوانستند به هر پایگاه داده ای متصل شوند