یک سوال در زمینه مقایسه stored procedure و query . سرعت کدومشون بهتره منظورم اینه که اگر در یک جای برنامه بخوایم یک script رو اجرا کنیم که هم بشه با query اجرا کرد و هم بشه با stored procedure کدومشون بهتره از لحاظ سرعت و چیزهای دیگه
یک سوال در زمینه مقایسه stored procedure و query . سرعت کدومشون بهتره منظورم اینه که اگر در یک جای برنامه بخوایم یک script رو اجرا کنیم که هم بشه با query اجرا کرد و هم بشه با stored procedure کدومشون بهتره از لحاظ سرعت و چیزهای دیگه
سلام دوست عزیز استفاده از sp سرعت کار تو را بالا میبره البته باید توجه داشته باشی که در sql server اگر sp
در DB همیشه وجود داشته باشه مدیریت حافظه sql server به مشکل میخوره و احتمالا کند میشه ولی اگر در موقع لزوم sp شود و سپس حذف شود بهترین بازدهی رو دارید
یعنی هر موقع که خواستم sp رو runtime بسازم و زمانی که کارم باهاش تموم شد drop بکنمش؟در موقع لزوم sp شود و سپس حذف شود بهترین بازدهی رو دارید
stored procedure همیشه و در هر شرایطی (99.9%) نسبت به ساختن query برتری داره و البته علت اون هم precompile بودن execution-plan اون هست.
برای اطلاعات بیشتر به :
BOL > SQL Server Achitecture > database architecture > logical database component > stored procedure
مراجعه فرمائید.
فکر کنم جناب ثباتی مطالب ارزنده تری بیان کنند.
هر که بر مرکب باطل نشیند ، در سراى پیشمانى فرودش مىآورند
زمانی که یک Query در SP قرار میگیره، برای بار اول اجرا شاید کمی کندتر باشه و دلیلش اینه که باید Compile بشه و براش Exec Plan بدست بیاد. ولی در دفعات بعدی اجرا، Exec Plan بدون درنگ مورد استفاده قرار میگیره.
Compile شدن برای ad-hoc Query یا همون Queryهای خارج از SP هم رخ میده ولی اگر Cache مورد نیاز باشه، Plan پاک میشه و جای خودش رو به سایر اطلاعات میده. لذا در دفعه بعدی اجرا باید دوباره Plan براش بدست بیاد. اما در مورد SP، این Plan روی دیسک ذخیره شده و هر وقت مورد نیاز باشه سریع بازیابی میشه.
فقط به یاد داشته باشید اگر اطلاعات زیاد ویرایش میشن و حجم اطلاعات شما رو به افزایش هست، تقریبا هفته ای یکبار از sp_recompile استفاده کنیم. چون Planهای ثبت شده برای SP ممکنه نابهینه بشن(در مقابل تغییر حجم اطلاعات). sp_recompile باعث میشه اولین بار بعد از صدور این دستور، SP مجددا Recompile بشه و بهینه ترین Plan بدست بیاد.
بله کامیار جان
من به تجربه این رو فهمیدم که اگر sp ها حذف شوند و دوباره ایجاد شوند خیلی کاراتر میشوند البته همان جور که آقای ثباتی فرمودند در صورتی که db,و حجم کار با اون خیلی زیاد باشه
دوست عزیزم
حذف SP و ساختن اون باعث افزایش سرعت نمیشه. تنها توجیهی که میشه کرد این هست که Planهای شما قدیمی شده باشند و با ساخت مجدد SPها باعث بشین Recompile صورت بگیره تا بهینه ترین Plan بدست بیاد. این کار توسط SP_Recompile هم قابل انجامه و منطقی نیست که شما هر چند وقت یکبار SPها رو از اول بسازین. فرض کنین یک بانک داره به طور 24 ساعته از طریق SQL Server به کاربرها سرویس میده. در این حالت عدم وجود حتی یک SP برای 1 ثانیه هم معضل خواهد بود. پس همیشه از SP_Recompile استفاده کنین.
آخرین ویرایش به وسیله AminSobati : دوشنبه 03 مرداد 1384 در 20:59 عصر
آقای ثباتی عزیز در مورد Ad-hoc Query صحبت کردین، امکان داره در مورد Ad-hoc یه مقدار بیشتر توضیح
بدین؟
(با عرض معذرت شاید خیلی به این موضوع ربطی نداشته باشه)
Ad-hoc Query یعنی Queryهایی که خارج از SP قرار دارن و به طور مستقیم به SQL Server ارسال میشن.