PDA

View Full Version : Recompile Stored Procedures



kaveh57
شنبه 19 خرداد 1386, 00:07 صبح
با سلام
لطفا اگر کسی در مورد خاصیت With Recompile که در تعریف Sp ها استفاده میشه
اطلاعاتی داره مرا راهنمایی کنه.
منظورم: create procedur with recompile
وجود Recompile چه دلیلی دارد؟
ممنون

aidinwashere
شنبه 19 خرداد 1386, 00:14 صبح
The WITH RECOMPILE clause is helpful when the parameters supplied to the procedure will not be typical, and when a new execution plan should not be cached or stored in memory.

kaveh57
شنبه 19 خرداد 1386, 00:17 صبح
The WITH RECOMPILE clause is helpful when the parameters supplied to the procedure will not be typical, and when a new execution plan should not be cached or stored in memory.


من این متن را در داخل sql help خوندم. اگر منظورش را فهمیدید به من هم بگید

AminSobati
شنبه 19 خرداد 1386, 09:49 صبح
دوست عزیزم،
وقتی برای اولین بار یک SP اجرا میشه، با توجه به مقادیری که برای پارامترها به SP میفرستین، کامپایل صورت میگیره و یک Execution Plan بدست میاد. این Plan برای دفعه های بعدیه اجرا مورد استفاده قرار میگیره و نیازی به کامپایل دیگه نیست. اما Planی که بدست اومده، ممکنه برای اون پارامتره دفعه اول مناسب بوده باشه و در دفعات بعدیه اجرا، مقادیری که ارسال میشه به نحوی متفاوت باشند که Plan موجود کارآیی نداشته باشه.
فرضا این SP:


create proc sp1
@country nvarchar(10)
as
select * from orders
where country=@country
go


اگر شما یک ایندکس روی فیلد Country داشته باشید، و تقریبا 50 درصد سفارشهای شما از کشور Germany باشه، و در مرتبه اول اجرا، شما Germany رو به SP ارسال کنین، به احتمال زیاد Query Optimizer تصمیم میگیره جدول رو Scan کنه تا نتیجه Query بدست بیاد. این شیوه اجرای Query در قالب همون Plan ثبت میشه. حالا در دفعات بعدی اجرا، اگر کسی کشور UK که فرضا فقط چند سفارش ازش دارین رو درخواست کنه، به جای Scan، عملا Bookmark Lookup میتونه بسیار سریعتر نتیجه Query رو بدست بیاره در حالی که چون Plan قبلا ثبت شده، کامپایل مجددا صورت نخواهد گرفت و همون روش اول استفاده میشه.
در اینجا Recompile داخل SP میتونه مفید باشه از این لحاظ که مجددا Plan بدست بیاد.
اصطلاحا مقادیری که کاربرها عمدتا اون رو ارسال میکنن به SP بهش Typical گفته میشه (که احتمالا شیوه اجرای مشترک داشته باشند) و مقادیری که میتونن از لحاظ شیوه اجرا خیلی متفاوت باشن، Atypical میگیم.
البته اینطور تصور نکنید که همیشه قرار دادن WITH RECOMPILE در SP خوب هستش، چون برای SPهای سنگین خوده زمانه کامپایل و باری که روی CPU میگذاره میتونه مسئله ساز باشه.

kaveh57
شنبه 19 خرداد 1386, 18:57 عصر
آقای AminSobati از توجه شما بسیار ممنونم
اگر امکان دارد در مورد موارد زیر کمی بیشتر توضیح دهید
1- Bookmark Lookup
2- Query Optimizer

AminSobati
یک شنبه 20 خرداد 1386, 15:43 عصر
1) زمانی که رکوردهای مورد نظر در ایندکس پیدا میشه اما برای بدست آوردن سایر فیلدها نیاز هست که به اصل جدول هم رجوع بشه، این رجوع اصطلاحا Bookmark Lookup نامیده میشه.

2) هوش مصنوعی SQL Server که Queryها رو تحلیل میکنه و روشه بهینه برای اجرای Query رو بدست میاره

kaveh57
یک شنبه 20 خرداد 1386, 22:03 عصر
آقای AminSobati باز هم ممنون
لطفا در مورد ایندکس گزاری و ضرورت استفاده از ایندکس ها توضیح دهید.

AminSobati
یک شنبه 20 خرداد 1386, 23:28 عصر
من در مورد ایندکس چندین پست داشتم، جستجو کنین لطفا