مقایسه عمکلرد procedure های حاوی TVP)Table Valued Parameters) در مقابل procedure هایی حاوی چندین متغیر (Regular Variables)

TVP یک ویژگی در SQL Server می باشد که به برنامه نویس این اجازه را می دهد که بدون نیاز به ایجاد جدول ثانویه و پارامتر های زیاد تنها با یک فراخوانی به چندین سطر و ستون از داده در یک stored procedure دسترسی داشته باشیم. در واقع تعداد دفعات مورد نیاز به فراخوانی این procedure برای داده هایی با مقدار بزرگ را تخمین می زند. در این مقاله نحوه ی عملکرد این ویژگی را با روش قدیمی لود کردن داده در چندین متغیر و فراخوانی چندین procedure مقایسه می کنیم.

تنظیمات یک جدول نمونه

برای اجرای چنین راهکاری یک جدول با نام test که حاوی چند متغیر است را ایجاد می نماییم. این امکان را برای ما فراهم می کند که داده ها ی خود را در متغیر های تست بدون هیچ سر باری بارگذاری نماییم. در procedure دیگری فقط از تعدادی متغیر استفاده می کنیم. در نمونه کد زیر شرح این کار را می بینیم:

تحلیل کاربرد این ویژگی در SQL Server

برای آزمودن این ویژگی ما نیاز به مجموعه داده‌ها با مقادیر مختلف داریم تا تفاوت اجرای procedure های حاوی این فاکتور را ببینیم. گرچه ما انتظار داریم که برای procedure هایی حاوی چندین سطر اجرای بهتری داشته باشیم. در ابتدا procedure هایی حاوی یک سطر را بررسی می‌کنیم. در ادامه به تحلیل آن برای ۱۰ و یا ۱۰۰ سطر می‌پردازیم.

در زیر کد مربوط به واردکردن تنها یک سطر را مشاهده می‌کنیم. اولین قدم قرار دادن این داده‌ها در TVP و نیز در داخل مجموعه‌ای از متغیرها است و در قدم بعدی procedure را اجرا می‌نماییم.

در حالتی که از متغیرها به‌عنوان پارامترهایی برای جایگذاری داده‌ها استفاده می‌کنیم، ما این متغیرها را قبل از هر فراخوانی procedure ها نمایش می‌دهیم و درنتیجه‌ی آن تعداد زیادی فراخوانی برای عمل واردکردن این داده‌ها داریم. لازم به ذکر است زمانی که از TVP استفاده می‌کنیم، تمامی داده‌ها را در TVP قرار می‌دهیم و تنها یک‌بار procedure را فراخوانی می کنیم.

با کمک sql profiler می توانیم ارزیابی این عملکرد ها را به تصویر بکشیم که شامل تعدادی پارامتر از قبیل cpu , read, write, duration می باشد. هنگامی که داده های ما بیشتر می شوند TVP اجرای سریع تری نسبت به regular variable ها دارد. گمان می رفت هر دو procedure برای یک سطر کارایی یکسانی داشته باشند، اما در چنین شرایطی procedure های نوع دوم کار خود را بهتر انجام می دهند. همچنین procedure ها حاوی TVP برای تعدادی سطر علاوه بر اینکه کار خود را بهتر انجام می دهند، مجبور نیستند تعداد خواندن بیشتری نسبت به procedure هایی با regular variable داشته باشند. با این وجود انتخاب راهکار مناسب برای شما به محیط و نوع داده وابسته می باشد.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *