قالب وردپرس قالب وردپرس آموزش وردپرس قالب فروشگاهی وردپرس وردپرس
خانه / مقالات / SQL / بررسی TVP از دیدگاه پرفورمنس

بررسی TVP از دیدگاه پرفورمنس

بررسی TVP از دیدگاه پرفورمنسReviewed by سالار on Oct 22Rating: 5.0

سلام به همه ی همراهان

وقتی در SQL Server 2008 امکان استفاده از جنس Table یا به عبارت بهتر Table Valued Parameter معرفی شد، برنامه نویسها برای ارسال سطرهای اطلاعات به دیتابیس توانستند کدهای کوتاه تر و خواناتری بنویسند. کافیست DataTable و ستونهای مورد نیاز را در اپلیکیشن تعریف نموده و به تعداد دلخواه سطر اضافه نمایید. اکنون با پروسیجری که مجهز به TVP گشته همه چیز آماده است تا فراخونی انجام شود.
اما آنچه که در پشت صحنه رخ میداد مورد توجه قرار نداشت. با گذشت اندک زمان از معرفی این قابلیت، برخی کاربران راجع به ارسال اطلاعات به سمت SQL Server گلایه داشتند که فرایند کند است. برخی دیگر کاملا راضی بودند! این امر سبب شد ۷ سال پیش بررسی فنی در خصوص استفاده از TVP انجام دهیم که نتیجه از این قرار است:
ارسال رکوردها به سمت SQL Server با مفهومی مانند Streaming متفاوت است. دیتابیس ناچار است برای هر سطر، دستور Insert را استفاده نماید. فرایندی که .NET Framework هنگام کار با TVP انجام میدهد دو مرحله دارد.
ابتدا سمت دیتابیس بصورت اتوماتیک متغیری از نوع جدول تعریف شده و سطرهایی که از کلاینت میرسند در آن Insert میگردند. سپس این متغیر مانند پارمتر به پروسیجر ارسال میشود. مانند مثال زیر:

DECLARE @x TABLE (FirstName NVARCHAR(50), LastName NVARCHAR(50))

INSERT @x VALUES(N’aa’, N’bb’)
INSERT @x VALUES(N’cc’, N’dd’)

EXEC MyProc @p1=@x

کاربرانی که در این روش با کندی مواجه میشوند به دلیل آن است که تعداد سطرهایشان بالاست و Insert های زیادی تولید میگردد. اما نکته جالب اینجاست که دلیل طول کشیدن، انجام Insertها نیست! بلکه کامپایل شدن Batch بیشترین زمان را به خود اختصاص میدهد. برای آزمایش، در مثال فوق قسمت EXEC را حذف نموده و به کمک Copy/Paste تعداد Insertها را به پنجاه هزار سطر برسانید. اجرای این Batch در سیستم من حدود ۲۰ ثانیه زمان نیاز دارد. اگر مجددا بدون هیچ تغییری آنرا اجرا کنم، به ۵ ثانیه میرسد. نتیجه اینکه خود Insertها به ۵ ثانیه زمان نیاز دارد اما ۱۵ ثانیه صرف کامپایل Batch میگردد!
وقتی در دفعات بعدی اجرا شما شاهد زمان کوتاهتری هستید بدلیل آن است که پلن Batch در حافظه موجود بوده و تنها اجرای آن اتفاق میافتد. اگر کوچکترین تغییری در Batch حتی به اندازه افزودن یک Space ایجاد نمایم، مجددا کامپایل مورد نیاز بوده و زمان ۲۰ ثانیه ای صرف میگردد.
وقتی با دستور زیر، ۵ دستور حجیم موجود در Plan Cache درخواست شود، به احتمال زیاد Batch ما جزو آنهاست:

SELECT top 5 sql, sqlbytes FROM syscacheobjects
ORDER BY sqlbytes DESC

سناریوی ارسال اطلاعات دسته ای به SQL Server در بسیاری از اپلیکیشن ها رایج است. فرضا بصورت مداوم فایلی از اطلاعات با فرمت خاص به اپلیکیشن داده شده و پس از پالایش و جدا سازی اطلاعات مورد نیز در جدول Insert میگردد.
در پست بعدی روشهای جایگزین بررسی خواهند شد.

شاد باشید و خوش فکر…
امین ثباتی

مطلب پیشنهادی

بدون ثبت نام به وب سایت و انجمن‌ ها وارد شوید

بدون ثبت نام به وب سایت و انجمن‌ ها وارد شویدReviewed by سالار on Jul …

پاسخ دهید

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

 
در خبرنامه ما عضو شوید

در خبرنامه ما عضو شوید

در خبرنامه ما عضو شوید تا بهترین پست هفته مارو در ایمیل خودتون دریافت کنید :)

تبریک ! شما عضو خبرنامه ما شدید