خانه SQL Server آیا Select Into به صورت Batch اجرا می شود؟ چرا؟ SQL Server نوشته شده توسط: حمید فرد ۲۳ شهریور ۱۳۹۴ زمان مطالعه: 8 دقیقه ۰ (۰) مقدمه بیشتر مدیران و توسعه دهنده گان پایگاه داده SQL Server در این تفکر هستند که چون دستور Select Into به صورت Bulk Operation اجرا می شود پس این دستور به صورت Batch اجرا می شود. خیر! این تفکر کاملا اشتباه است. دستور Select Into به دلیل آنکه SQL Server کمترین تراکنش را در Transaction Log فایل برای دستورات Bulk ذخیره می کند به همین دلیل این دستور از سرعت بالایی در مقایسه با دستور معمولی Insert بر خوردار است. توجه داشته باشید که 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 مشاهده کنید. چه رتبه ای میدهید؟ میانگین ۰ / ۵. از مجموع ۰ اولین نفر باش برچسب ها # Database Engine# Select Into# SQL Server# آموزش SQL Server معرفی نویسنده مقالات 6 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده حمید فرد پروفایل نویسنده معرفی محصول احمدرضا صدیقی دوره آموزش برنامه نویسی جاوا استاندارد 1.990.000 تومان مقالات مرتبط ۰۶ اردیبهشت SQL Server پایگاه داده برداری چیست؟ بررسی کاربردها، نحوه کار و آینده Vector Database تیم فنی نیک آموز ۰۲ اردیبهشت SQL Server تاثیر ایندکس های Computed-Column روی دستور DBCC CHECKDB تورج عزیزی ۲۶ فروردین SQL Server دستور SELECT TOP در SQL Server تیم فنی نیک آموز ۱۹ فروردین SQL Server راهنمای پیکربندی Authentication و Authorization در SQL Server به بهترین روش تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ مسعود طاهری ۲۳ / ۰۶ / ۹۴ - ۰۱:۲۸ عالی بود پاسخ به دیدگاه مسعود طاهری ۲۴ / ۰۶ / ۹۴ - ۰۷:۴۸ سلام در تکمیل این مقاله خوب لینک زیر اطلاعات تکمیل کننده ای هم به دوستان ارائه می کند 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