در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

مقایسه فنی Stream Aggregate و Hash Match

توابع Aggregate مانند SUM, AVG, COUNT و غیره در Query های ما بسیار دیده می شوند. در SQL Server دو روش متفاوت برای بازیابی و انجام عملیات تابعی وجود دارد که یکی Stream Aggregate و دیگری Hash Match نام دارند. در این پست می خواهیم به اتفاق نوع انتخاب یکی یا هر دو روش توسط SQL Server را بررسی کنیم.به صورت پایه ای. هر Query که اجراء می شود از یک سری عملیات خاصی باید گذارنده شود که این عملیات شامل Parsing, Algebrizer, Query Optimizer, Query Executor است.SQL Server در زمان محدودی باید بهترین Execution Plan را از طریق بررسی Statistics ها پیدا کند. Statistics تعداد رکوردهای داخل هر جدول را با مقدار آن ذخیره می کند. توجه داشته باشید که یک فرمولی برای انتخاب عاملان انجام توابع وجود دارد. بگذارید با این دستور شروع کنیم Select Count(*) From Tempdata این دستور برای اجراء از Stream Aggregate استفاده می کند به این دلیل که جدول منبع یک جدول با حجم متوسط است و البته اینکه دستور Group By استفاده نشده است. پس در این حالت Query Optimizer تمامی رکوردهای جدول را در یک گروه قرار می دهد. به شکل زیر توجه کنید.

مقایسه فنی Stream Aggregate و Hash Match

شکل ۱

حالا در Query بالا ما دستور Group By GroupID را اضافه می کنیم که این دستور باعث می شود Query Optimizer یک عملیات Sort قبل از عملیات Stream Aggregate قرار دهد به این دلیل که داده های Build در Stream Aggregate باید به صورت مرتب چیده شده باشند. دستور Stream Aggregate به این صورت عمل می کند که داده های ورودی باید مرتب باشند و بعد رکورد اول خوانده می شود و بعد رکورد دوم. اگر رکورد دوم در یک گروه با رکورد قبلی بود مقدار آنها را با هم در یک گروه قرار می دهد اگر در یک گروه نبودند برای رکورد جدید یک گروه تشکیل می دهد.

مقایسه فنی Stream Aggregate و Hash Match

شکل ۲

حالا ما سعی در اضافه کردن رکوردهای جدول داریم ولی این کار را به صورت فیزیکی انجام نمی دهیم بلکه به طوری SQL Server Query Optimizer را گول می زنیم.در حال حاضر ۱۰۰ میلیون رکورد داخل جدول است و ما Select Count(*) From Tempdata Group By GroupID را اجراء می کنیم. همانطور که در شکل زیر می بینید Query Optimizer به دلیل حجم زیاد رکوردها از Hash Match استفاده کرده به این دلیل که مرتب کردن جدول به مراتب هزینه بردار تر از عملیات Hash است.

مقایسه فنی Stream Aggregate و Hash Match

شکل ۳

حالا زمان آن رسیده که هوش Query Optimizer را بسنجیم با اضافه کردن دستور Order By. همانطور که در شکل زیر مشاهده می کنید باز هم Query Optimizer از عملگر Hash Match استفاده کرده ولی در آخر نتیجه عملگر را مرتب می کند. چرا که مرتب کردن داده های نتیجه خیلی کم هزینه تر از مرتب کردن داده های جدول است.

مقایسه فنی Stream Aggregate و Hash Match

شکل ۴

در ذهن داشته باشید که عمگر Hash Match هزینه بسیار بالایی دارد و اجرای آن برای جداول کوچک به صرفه نیست.

#بالا_بردن_performance_در_sql_سرور #بالا_بردن_سرعت_query_گرفتن #مقایسه_stream_aggregate_و_hash_match #کاربرد_stream_aggregate_در_sql_سرور #کاربرد_hash_match_در_sql_سرور #تفاوت_stream_aggregate_و_hash_match #بالا_بردن_کارایی_در_sql_سرور #performance_tunning_در_sql_سرور
عنوان
1 آیا NonClustered Columnstore Index گزینه مناسبی است؟ رایگان
2 مقایسه فنی Stream Aggregate و Hash Match رایگان
3 بهینه سازی بازدهی پایگاه داده SQL Server با Hypothetical Index رایگان
4 بازیابی داده های سالم از پایگاه داده خراب رایگان
5 تغییر در Optimizer Engine برای غیر فعال کردن مرتب سازی JOIN ها رایگان
6 اهمیت اجراء دستور DBCC CheckDB قبل از گرفتن فایل پشتیبان رایگان
7 اهمیت استراتژی پشتیبانگیری و بازیابی پایگاه داده در SQL Server رایگان
8 محدودیتهای بازدهی و راه حل آنها در SQL Server رایگان
9 مستلزمات برای طراحی Index در SQL Server رایگان
زمان و قیمت کل 0″ 0
2 نظر
حسن ضرابی

با سلام خدمت استاد عزیزم

من یک سئوال داشتم اگر در Execution Plan درصد hash match بیشتر باشد query ما سریع تر هست یا درصد table scan کدام سریعتر هستند

جناب مهندس شما به عکس زیر نگاه بکنید :

وب سایت توسینسو

در عکس بالا اگر دقت کرده باشید table_scan 74 درصد درج شده است اما در hash match 26 درصد درج شده است البته من نزدیک 13500000 میلیون رکورد دارم خواستم بدونم کدام بهتر و سریع تر هستند؟

ممنونم مهندس جان که راهنمایی می کنید.

حمید ج. فرد

hash match به دلیل وجود parallelism است. شما می توانید برای بهینه کردن این کوری یک nonclustered index بسازید (البته بر روی یک ستون) و در کوری خود به جای * از نام ستون استفاده کنید تا بهینه شود.

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....