خانه SQL Server آیا Select Into به صورت Batch اجرا می شود؟ چرا؟ SQL Server دستورات SQL نوشته شده توسط: حمید فرد تاریخ انتشار: ۲۳ شهریور ۱۳۹۴ آخرین بروزرسانی: 23 دی 1403 زمان مطالعه: 8 دقیقه ۰ (۰) دستور Select Into، بیشتر مدیران و توسعه دهنده گان پایگاه داده SQL Server در این تفکر هستند که چون دستور Select Into به صورت Bulk Operation اجرا می شود پس این دستور به صورت Batch اجرا می شود. خیر! این تفکر کاملا اشتباه است. دستور Select Into به دلیل آنکه SQL Server کمترین تراکنش را در Transaction Log فایل برای دستورات Bulk ذخیره می کند به همین دلیل این دستور از سرعت بالایی در مقایسه با دستور معمولی Insert بر خوردار است. دستور Select Into توجه داشته باشید که SQL Server فقط تراکنشهایی که در رابطه با Data Page ها باشد ذخیره می کند و در زمانی که از Transaction Log فایل پشتیبان گرفته شود تمامی Data Page هایی که در عملیات Bulk تغییر داده شده باشند در فایل پشتیبان ذخیره می شود (خارج از این بحث). دستور Select Into تمامی رکوردهای جدول منبع را به صورت یک به یک خوانده و به صورت یک به یک در جدول جدید وارد می کند. پس در نتیجه این عملیات به صورت Batch اجرا نمی شوند. تصویر زیر داده های ذخیره شده در فایل تراکنش بعد از دستور معمولی Insert را نشان می دهد. همانطور که مشاهده می کنید قبل و بعد از عملیات LOP_INSERT_ROW ، عملیاتی همچون LOP_BEGIN_XACT و LOP_COMMIT_XACT وجود دارد. این نشان می دهد که هر یک از عملیات Insert یک به یک در فایل تراکنش ذخیره می شود. سخن پایانی حال زمان آن رسیده که به داده های فایل تراکنش بعد از اجرا Select Into نگاهی بیاندازیم. همانطور که مشاهده می کنید، عملیاتی همیچون LOP_BEGIN_XACT، LOP_INSERT_ROW، LOP_COMMIT_XACT وجود ندارد. در حقیقت این عملیات در پشتضمینه اجرا می شود ولی به دلیل رفتار SQL Server در مقابل عملیات Bulk این تراکنشهای ذخیره نمی شوند. ولی همانطور که مشاهده می کنید تمامی عملیات درباره Data Page ها تماما در فایل تراکنش ذخیره شده است. پیشنهاد می شود که Select Into در زمان Off-Peak سیستم اجرا شود به دلیل داشتن ستیز (Contention) بر بروی IAM, PFS, GAM و SGAM. شما می توانید نوع اجرا دستور را که به صورت ROW است از Execution Plan مشاهده کنید. ما در نیک آموز منتظر نظرات ارزشمند شما درباره این مقاله هستیم. چه رتبه ای میدهید؟ میانگین ۰ / ۵. از مجموع ۰ اولین نفر باش معرفی نویسنده مقالات 6 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده حمید فرد معرفی محصول ایمان باقری آموزش کوئری نویسی در sql server 2.190.000 تومان مقالات مرتبط ۰۲ آبان SQL Server ابزار Database Engine Tuning Advisor؛ مزایا، کاربردها و روش استفاده تیم فنی نیک آموز ۱۵ مهر SQL Server معرفی Performance Monitor ابزار مانیتورینگ SQL Server تیم فنی نیک آموز ۱۱ مهر SQL Server راهنمای جامع مانیتورینگ بکاپ ها در SQL Server تیم فنی نیک آموز ۰۸ مهر SQL Server Resource Governor چیست؟ آشنایی با نحوه پیکربندی و اهمیت های آن تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ مسعود طاهری ۲۳ / ۰۶ / ۹۴ - ۰۱:۲۸ عالی بود پاسخ به دیدگاه مسعود طاهری ۲۴ / ۰۶ / ۹۴ - ۰۷:۴۸ سلام در تکمیل این مقاله خوب لینک زیر اطلاعات تکمیل کننده ای هم به دوستان ارائه می کند http://sqlblog.com/blogs/kalen_delaney/archive/2011/03/15/what-gets-logged-for-select-into.aspx پاسخ به دیدگاه مجتبی شهریور ۲۳ / ۰۶ / ۹۴ - ۰۱:۲۸ سلام مقالتون را خوندم عالی بود جدا از تشکر ار حضرتعال از تیم محترم نیک آموز هم متشکرم بخاطر فراهم کردن حضور افرادی با سطح علمی شما با مقالات خوبتون در سایت پاسخ به دیدگاه Hamid J. Fard ۲۴ / ۰۶ / ۹۴ - ۰۵:۴۳ ممنون مجتبی جان. به امید دیدار. پاسخ به دیدگاه Hamid J. Fard ۲۴ / ۰۶ / ۹۴ - ۰۵:۰۵ بازهم شما؟ (شوخی کردم) Isolation Level روی Select Into تاثیر می ذاره به دلیل اینکه این دستور باید یک جدول یا یک سری جداول رو بخونه. و اینکه بابت Lock این دستور Page ها و Extent ها را Lock می کند نه رکوردها را. البته شما می تونید با دستور With NoLock داده های قفل شده توسط Select Into رو بخوانید یا داده های قفل شده در جداول دیگر را. به این عکس یه نگاهی بنداز. این رو برای شما آماده کردم. همانطور که میبینید. تمامی Page ها و بعضی از Extent ها قفل شده اند. پاسخ به دیدگاه مسعود طاهری ۲۴ / ۰۶ / ۹۴ - ۰۷:۴۸ سلام در تکمیل این مقاله خوب لینک زیر اطلاعات تکمیل کننده ای هم به دوستان ارائه می کند http://sqlblog.com/blogs/kalen_delaney/archive/2011/03/15/what-gets-logged-for-select-into.aspx پاسخ به دیدگاه 1 2