redshift fall 2021 1200x630

سه تفاوت اصلی بین DISTKEY و SORTKEY در Redshift کدام‌اند؟

Amazon Redshift چیست و چگونه با DISTKEY و SORTKEY بهینه می‌شود؟

Amazon Redshift یک پایگاه داده ستونی قدرتمند است که برای مدیریت کارآمد مجموعه‌داده‌های عظیم شناخته می‌شود. با این حال، برای استفاده‌ی کامل از ظرفیت آن، لازم است مفاهیم DISTKEY و SORTKEY و تأثیر آن‌ها بر عملکرد کوئری را درک کنید.

این دو ابزار قدرتمند اساس بهینه‌سازی عملکرد کوئری، کاهش مصرف CPU و بازیابی سریع داده از کلاسترهای Redshift هستند. در این راهنما، DISTKEY و SORTKEY، نقش آن‌ها در توزیع داده، و نحوه‌ی استفاده‌ی مؤثر از آن‌ها برای افزایش سرعت و کارایی کوئری بررسی می‌شود.

چه چیزی Amazon Redshift را به یک راهکار قدرتمند انبار داده تبدیل می‌کند؟

Redshift یک سرویس انبار داده‌ی کاملاً مدیریت‌شده با ساختار MPP (پردازش موازی عظیم) است که داده‌ها را به صورت ستونی ذخیره می‌کند. داده‌ها به‌صورت فیزیکی در گره‌های محاسباتی (Compute Nodes) ذخیره می‌شوند که هر یک به بخش‌های کوچکتری به نام Node Slice تقسیم شده‌اند. هر Slice بخشی از داده را ذخیره می‌کند، و DISTKEY تعیین می‌کند که داده چگونه میان این گره‌ها توزیع شود.

به‌طور مشابه، SORTKEY ترتیب مرتب‌سازی داده‌ها را در هر گره کنترل می‌کند که موجب اجرای سریع‌تر کوئری‌ها می‌شود. با معرفی معماری RA3 Node، که منابع محاسباتی و ذخیره‌سازی را از هم جدا می‌کند، امکان مقیاس‌پذیری مستقل و ذخیره‌سازی مدیریتی ایجاد شده است که بهینه‌سازی خودکار جای‌گذاری داده‌ها در لایه‌های مختلف را ممکن می‌سازد.

این تحول معماری، نحوه‌ی تأثیر استراتژی‌های توزیع و مرتب‌سازی را بر عملکرد کلی تغییر داده و نیازمند رویکردهای جدیدی است که ویژگی‌های پویا و لایه‌ای ذخیره‌سازی را در نظر می‌گیرند. پیاده‌سازی‌های مدرن Redshift همچنین از معماری Serverless از طریق Amazon Redshift Serverless پشتیبانی می‌کنند که مدل قیمت‌گذاری مبتنی بر مصرف را معرفی کرده است و باعث می‌شود بهینه‌سازی نه تنها عملکردی بلکه مالی نیز باشد.

اجزای کلیدی برای بهینه‌سازی عملکرد

  • DISTKEY – تعیین‌کننده‌ی توزیع کلید میان گره‌ها
  • SORTKEY – مشخص‌کننده‌ی ترتیب مرتب‌سازی در هر Slice
  • Automatic Table Optimization (ATO) – سیستم مبتنی بر هوش مصنوعی برای تنظیم خودکار کلیدها
  • Zone Maps – ساختارهای متاداده در حافظه برای پرش از بلوک‌های غیرضروری هنگام اجرای کوئری‌ها

وقتی DISTKEY و SORTKEY با هم استفاده شوند، اجرای کوئری‌ها را بهینه کرده، زمان بازیابی داده را کاهش داده و عملکرد کلی را افزایش می‌دهند. قابلیت بهینه‌سازی خودکار، این تنظیمات را از پیکربندی‌های ایستا به راهکارهای پویا و هوشمند تبدیل کرده است.

DISTKEY چیست؟

DISTKEY ستونی در جدول است که تعیین می‌کند ردیف‌ها چگونه بین گره‌های محاسباتی توزیع شوند. ردیف‌هایی با مقدار یکسان در ستون DISTKEY روی یک Slice ذخیره می‌شوند، در حالی‌که مقادیر متفاوت در گره‌های مختلف پخش می‌شوند.
این کار باعث کاهش انتقال داده بین گره‌ها در هنگام انجام Join یا Aggregation می‌شود.

CREATE TABLE sales (
sale_id INT,
customer_id INT DISTKEY,
product_id INT,
sale_date DATE,
amount DECIMAL(۱۰,۲)
);

در این مثال، تمام ردیف‌هایی با customer_id یکسان روی یک گره خاص قرار می‌گیرند و عملیات Join روی این ستون بهینه می‌شود.

Redshift مدرن می‌تواند با تحلیل سابقه‌ی Joinها، توزیع داده را به‌صورت خودکار بهینه کند. سیستم‌های پیشرفته‌تر نیز الگوهای توزیع داده را پایش کرده و در صورت نیاز پیشنهاد بازتوزیع ارائه می‌دهند.

انواع Distribution Style

نوع توضیح بهترین کاربرد
AUTO (پیش‌فرض) انتخاب خودکار بین KEY، EVEN، ALL بر اساس حجم داده زمانی که الگوهای دسترسی مشخص نیست
EVEN توزیع یکنواخت ردیف‌ها بین Sliceها، بدون نیاز به DISTKEY جداول موقت یا کم‌کاربرد
KEY ردیف‌های دارای مقدار DISTKEY یکسان روی یک Slice ذخیره می‌شوند جداول Fact/Dimension با Join زیاد
ALL کپی کامل جدول روی هر گره جداول کوچک در چند Join

SORTKEY چیست؟

SORTKEY ترتیب ذخیره‌سازی داده‌ها در هر Slice را مشخص می‌کند. این کار به Redshift اجازه می‌دهد هنگام اجرای کوئری، بخش‌های نامربوط داده را نادیده بگیرد (Block Skipping).

CREATE TABLE orders (
order_id INT,
order_date DATE SORTKEY,
customer_id INT,
total_amount DECIMAL(۱۰,۲)
);

در این مثال، کوئری‌هایی که بر اساس order_date فیلتر می‌شوند، فقط بخش مربوط را اسکن می‌کنند که باعث افزایش سرعت می‌شود.

Redshift اکنون از مرتب‌سازی چندبعدی استفاده می‌کند که داده‌ها را بر اساس الگوهای فیلتر سازمان‌دهی می‌کند، نه فقط بر اساس مقادیر فیزیکی ستون‌ها. این رویکرد باعث افزایش کارایی در بارهای کاری با فیلترهای تکرارشونده می‌شود.

انواع Sort Key

  • COMPOUND (پیش‌فرض): مرتب‌سازی ابتدا بر اساس ستون اول و سپس سایر ستون‌ها

  • INTERLEAVED: وزن مساوی برای تمام ستون‌ها؛ مناسب برای فیلترهای متغیر

  • AUTO: انتخاب خودکار بهترین روش بر اساس الگوی بار کاری

چگونه DISTKEY و SORTKEY با هم کار می‌کنند؟

DISTKEY داده‌های مرتبط را روی یک گره نگه می‌دارد و SORTKEY داده‌ها را برای کوئری‌های سریع‌تر مرتب می‌کند. تعامل این دو باعث جهش چشمگیر در عملکرد کوئری‌های پیچیده می‌شود.

ویژگی تمرکز بهبود در
DISTKEY توزیع داده بین گره‌ها سرعت Join و Aggregation
SORTKEY ترتیب داده در هر گره فیلترهای Range و عملکرد Join

چرا کلیدهای توزیع و مرتب‌سازی حیاتی‌اند؟

انتخاب درست این کلیدها انتقال داده را به حداقل رسانده، I/O دیسک را کاهش داده و سرعت واکشی را افزایش می‌دهد. در مدل‌های Serverless، بهینه‌سازی مستقیم بر هزینه‌ها اثر می‌گذارد.

DISTKEY

  • بهینه‌سازی Join با هم‌مکانی داده‌های مرتبط

  • کاهش ترافیک شبکه

  • جلوگیری از عدم توازن داده (Data Skew)

  • پشتیبانی از پردازش محلی به جای Cross-node Join

SORTKEY

  • بهبود فیلترهای Range

  • افزایش کارایی کوئری‌های تحلیلی

  • بهبود فشرده‌سازی داده‌ها

  • پشتیبانی از مرتب‌سازی چندبعدی

انتخاب بهینه ستون‌های کلیدی

برای DISTKEY، ستون‌هایی با مقادیر متمایز زیاد و استفاده مکرر در Join انتخاب کنید.
برای SORTKEY، ستون‌هایی که در فیلترها بیشتر استفاده می‌شوند (مثل تاریخ) انتخاب کنید.

Automatic Table Optimization (ATO) چیست؟

ATO به‌صورت مداوم الگوهای استفاده از جداول را بررسی کرده و با استفاده از هوش مصنوعی تنظیمات کلیدها را برای عملکرد بهینه تغییر می‌دهد. این سیستم بر اساس رشد داده و تغییرات بار کاری، تنظیمات را خودکار بهینه می‌کند.

الگوهای معماری پیشرفته برای عملکرد بهتر

  • Hub-and-Spoke Data Sharing

  • Multi-Cluster Workload Isolation

  • Lakehouse Integration با S3 و Spectrum

  • Serverless Deployment

  • تحلیل بلادرنگ با Streaming Ingestion

  • استقرار چندمنطقه‌ای برای Disaster Recovery

تفاوت‌های عملی بین DISTKEY و SORTKEY

ویژگی DISTKEY SORTKEY
تعریف هنگام ساخت جدول هنگام ساخت جدول
نوع EVEN, KEY, ALL, AUTO COMPOUND, INTERLEAVED, AUTO
نگهداری بررسی Skew و توزیع داده بررسی درصد داده نامرتب
تأثیر عملکرد روی Join و شبکه روی اسکن و فیلتر
تأثیر هزینه کاهش هزینه شبکه کاهش مصرف محاسباتی در Serverless
اتوماسیون از تنظیم دستی تا کاملاً خودکار با ATO

بهترین شیوه‌ها

راهکار دلیل
انتخاب ستون با کاردینالیته بالا برای DISTKEY جلوگیری از Skew
هم‌ترازی DISTKEY بین جداول دارای Join مشترک کاهش ترافیک شبکه
استفاده از Timestamp در Sort Key بهینه‌سازی تحلیل‌های زمانی
استفاده از AUTO برای شروع اجازه به Redshift برای تصمیم‌گیری خودکار
بررسی EXPLAIN ANALYZE اطمینان از طرح کوئری بهینه
نظارت مستمر بر System Views تشخیص فرصت‌های بهینه‌سازی
هماهنگی کلیدها با الگوی بارگذاری داده کاهش Skew حین بارگذاری

خطاهای رایج

  • انتخاب ستون با مقادیر تکراری برای DISTKEY

  • فشرده‌سازی بیش از حد ستون‌های SORTKEY

  • فراموش کردن VACUUM پس از COPY یا DELETE

  • نادیده‌گرفتن تعامل تنظیمات خودکار و دستی

  • بی‌توجهی به تأثیر هزینه‌ها در Serverless

نحوه کار توزیع AUTO و ATO

در حالت AUTO، Redshift به‌صورت خودکار DISTKEY و SORTKEY را در صورت تشخیص بهبود عملکرد تنظیم می‌کند. برای جداول کوچک از ALL شروع کرده و سپس بر اساس رشد داده سبک مناسب را انتخاب می‌کند.

پایش و تنظیم خوشه‌ی Redshift

-- تشخیص توزیع نامتوازن
SELECT slice, COUNT(*) AS rows_in_slice
FROM stv_tbl_perm
WHERE name = 'sales_fact'
GROUP BY slice
ORDER BY slice;

— بررسی اجرای کوئری

SELECT query, label, total_exec_time / ۱۰۰۰۰۰۰ AS seconds, is_alert
FROM svl_query_summary
WHERE query = <query_id>;

— بررسی اقدامات بهینه‌سازی خودکار

SELECT * FROM svv_auto_worker_action WHERE table_name = ‘sales_fact’;

— بررسی درصد داده نامرتب

SELECT tablename, unsorted / ۱۰۴۸۵۷۶ AS unsorted_mb, sortkey1 AS leading_sort_key
FROM svv_table_info
WHERE unsorted > ۰
ORDER BY unsorted DESC;

پایش منظم تضمین می‌کند تنظیمات DISTKEY و SORTKEY با رشد داده سازگار بمانند.

چگونه عملکرد Redshift را حداکثر کنیم؟

با تنظیمات AUTO شروع کنید تا از یادگیری ماشینی برای بهینه‌سازی استفاده شود، عملکرد را پایش کنید و بر اساس الگوهای واقعی بار کاری تنظیمات را اصلاح کنید.
استراتژی‌های مناسب DISTKEY و SORTKEY پایه‌ی عملکرد بالا و هزینه‌ی پایین در استقرارهای مدرن Redshift هستند.

سؤالات متداول

آیا یک جدول می‌تواند چند SORTKEY داشته باشد؟

بله، از Compound برای فیلترهای سلسله‌مراتبی و از Interleaved برای فیلترهای متغیر استفاده کنید.

آیا می‌توان از یک ستون برای هر دو کلید استفاده کرد؟

بله، اگر ستون هم در Join و هم در Filter استفاده شود، این کار عملکرد را افزایش می‌دهد.

آیا Window Functionها از Sort Key بهره می‌برند؟

بله، در صورت هم‌ترازی PARTITION یا ORDER با SORTKEY.

هر چند وقت یک‌بار باید VACUUM اجرا شود؟

پس از COPY، DELETE یا UPDATE و همچنین به‌صورت دوره‌ای برای به‌روزرسانی آمار.

آیا ATO کلیدهای دستی را تغییر می‌دهد؟

خیر، مگر اینکه کلیدها در حالت AUTO تنظیم شده باشند.

انبار داده ابری (Cloud Data Warehouse) چیست؟
دستور INSERT INTO در Redshift چیست؟

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

سبد خرید
علاقه‌مندی‌ها
مشاهدات اخیر
دسته بندی ها