آموزش DMV عملیاتی Rowgroupهای Columnstore با ۱۰ مثال عملی در SQL Server

آموزش DMV عملیاتی Rowgroupهای Columnstore

توسط admin | گروه SQL Server | 1405/05/05

نظرات 0

آموزش DMV عملیاتی Rowgroupهای Columnstore

تابع مدیریتی sys.dm_db_column_store_row_group_operational_stats شمارنده‌های عملیاتی Rowgroup مانند تعداد اسکن، قفل، انتظار و فعالیت‌های مرتبط را با فیلتر شناسه‌های پایگاه داده، شیء، ایندکس و پارتیشن ارائه می‌کند. در این راهنما موضوع از سطح مقدماتی تا طراحی عملی، خطاهای رایج، ملاحظات کارایی و سناریوهای نگه‌داری بررسی می‌شود.

مخاطب مقاله برنامه‌نویسان، مدیران پایگاه داده و تحلیل‌گرانی هستند که می‌خواهند Related DMVs: sys.dm_db_column_store_row_group_operational_stats را بدون تصمیم‌های حدسی در Microsoft SQL Server به‌کار بگیرند. بازگشت به راهنمای جامع کارایی Columnstore در SQL Server

تعریف و جایگاه موضوع

تابع مدیریتی sys.dm_db_column_store_row_group_operational_stats شمارنده‌های عملیاتی Rowgroup مانند تعداد اسکن، قفل، انتظار و فعالیت‌های مرتبط را با فیلتر شناسه‌های پایگاه داده، شیء، ایندکس و پارتیشن ارائه می‌کند.

این قابلیت را باید در کنار مفاهیم sys.dm_db_column_store_row_group_operational_stats، database_id، object_id و index_id تحلیل کرد. تصمیم درست تنها با مشاهده یک Query سریع حاصل نمی‌شود؛ بلکه نرخ رشد داده، الگوی DML، نحوه بارگذاری، محدودیت منابع و زمان نگه‌داری نیز باید وارد مدل تصمیم شوند.

نکته نسخه: این DMF در SQL Server 2016 و نسخه‌های بعدی ارائه شده و شمارنده‌ها از زمان راه‌اندازی/ایجاد ساختار ممکن است ریست شوند.

چرا این موضوع مهم است؟

در جداول تحلیلی بزرگ، تفاوت میان طراحی درست و اجرای صرف یک دستور می‌تواند به اختلاف قابل‌توجه در IO، CPU و زمان پاسخ منجر شود. DMV عملیاتی Rowgroup وقتی ارزش واقعی ایجاد می‌کند که با هدف کسب‌وکار، الگوی Query و ظرفیت زیرساخت هماهنگ باشد.

  • تحلیل عملیات
  • تشخیص Wait
  • مقایسه پارتیشن
  • پایش Scan
  • عیب‌یابی نگه‌داری

به همین دلیل لازم است معیار موفقیت پیش از پیاده‌سازی تعریف شود. برای نمونه می‌توان زمان گزارش ماهانه، تعداد Rowgroupهای کم‌حجم، درصد ردیف‌های حذف‌شده، حجم Log یا تعداد Segmentهای خوانده‌شده را به‌عنوان شاخص پایه ثبت کرد.

نقشه مفهومی DMV عملیاتی Rowgroupنمایش اجزای اصلی، رابطه Rowgroup و مسیر داده در موضوع Related DMVs: sys.dm_db_column_store_row_group_operational_statsنقشه مفهومی DMV عملیاتی RowgroupRelated DMVs: sys.dm_db_column_store_row_group_operational_stats1sys.dm_db_column_store_row_group_oورودی2database_idساختار مرکزی3object_idفراداده4index_idمرحله میانی5partition_numberپردازش6scan_countخروجی

این نمودار اجزای کلیدی «DMV عملیاتی Rowgroup» و ارتباط میان sys.dm_db_column_store_row_group_operational_stats، database_id و object_id را نشان می‌دهد.

نحو، اجزا و پارامترهای اصلی

نحو پایه زیر نقطه شروع است. نام شیء، Schema، پارتیشن و گزینه‌ها باید با محیط واقعی جایگزین شوند. در رشته‌های فارسی SQL از پیشوند N استفاده شده تا داده یونیکد درست ذخیره شود.

SELECT * FROM sys.dm_db_column_store_row_group_operational_stats(DB_ID(), NULL, NULL, NULL);

اجزای کلیدی

مفهومنقش در موضوعنکته عملی
sys.dm_db_column_store_row_group_operational_statsبخشی از معماری یا رفتار DMV عملیاتی Rowgroupدو Snapshot مقایسه کنید
database_idبخشی از معماری یا رفتار DMV عملیاتی Rowgroupشناسه‌ها را محدود کنید
object_idبخشی از معماری یا رفتار DMV عملیاتی Rowgroupهمراه با فیزیکی تحلیل کنید
index_idبخشی از معماری یا رفتار DMV عملیاتی Rowgroupزمان جمع‌آوری را ثبت کنید
partition_numberبخشی از معماری یا رفتار DMV عملیاتی Rowgroupمجوزها را مستند کنید
scan_countبخشی از معماری یا رفتار DMV عملیاتی Rowgroupدو Snapshot مقایسه کنید

نوع خروجی بسته به موضوع ممکن است یک ساختار ایندکس، Plan اجرایی، مجموعه Rowgroup، شمارنده DMV یا مقدار عددی باشد. همیشه خروجی را با Metadata و Plan واقعی تأیید کنید؛ پیام موفقیت دستور به‌تنهایی نشان‌دهنده بهبود نیست.

فرایند تصمیم‌گیری و پیاده‌سازی

  1. Workload اصلی را مشخص کنید و Queryهای پرتکرار مرتبط با DMV عملیاتی Rowgroup را از Query Store یا مانیتورینگ استخراج کنید.
  2. وضعیت فعلی database_id و object_id را ثبت کنید تا خط پایه قابل مقایسه باشد.
  3. Syntax را در محیط آزمایشی اجرا کنید و اثر آن را روی نمونه‌برداری Delta و فیلتر دقیق بسنجید.
  4. سناریوهای بارگذاری، حذف، به‌روزرسانی، گزارش‌گیری و بازیابی خطا را جداگانه آزمایش کنید.
  5. پس از تأیید، اجرای Production را با پنجره تغییر، Rollback Plan و گزارش کنترلی انجام دهید.

این روش مرحله‌ای مانع آن می‌شود که یک بهبود محلی، هزینه پنهان در ETL یا عملیات تراکنشی ایجاد کند. همچنین مستندسازی خروجی‌های قبل و بعد، تصمیم‌های نگه‌داری آینده را قابل دفاع می‌سازد.

جریان اجرای DMV عملیاتی Rowgroupنمایش جریان ورودی تا خروجی و نقاط کنترلی مرتبط با Related DMVs: sys.dm_db_column_store_row_group_operational_statsجریان اجرای DMV عملیاتی RowgroupRelated DMVs: sys.dm_db_column_store_row_group_operational_stats1sys.dm_db_column_store_row_group_oداده ورودی2database_idتشخیص3object_idپردازش4index_idکنترل5partition_numberنتیجه6scan_countپایش

در این جریان، داده از مرحله ورودی عبور می‌کند، در نقطه‌های کنترلی مرتبط با database_id و index_id ارزیابی می‌شود و سپس نتیجه قابل پایش تولید می‌گردد.

۱۰ مثال عملی از ساده تا حرفه‌ای

مثال 1: نمای کلی DMV

در این مثال، «DMV عملیاتی Rowgroup» در سناریوی نمای کلی DMV بررسی می‌شود. Query به‌گونه‌ای نوشته شده که در یک محیط آزمایشی SQL Server قابل اجرا باشد و نتیجه آن با DMV، خروجی تجمیعی یا Metadata کنترل شود.

USE tempdb;
    DROP TABLE IF EXISTS dbo.FactSalesDemo;
    CREATE TABLE dbo.FactSalesDemo
    (
        SaleID bigint NOT NULL,
        OrderDate date NOT NULL,
        CustomerID int NOT NULL,
        ProductID int NOT NULL,
        Quantity smallint NULL,
        Amount decimal(18,2) NULL
    );

    INSERT INTO dbo.FactSalesDemo
    (
        SaleID, OrderDate, CustomerID, ProductID, Quantity, Amount
    )
    SELECT TOP (25000)
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
        DATEADD(day, -ABS(CHECKSUM(NEWID())) % 730, CONVERT(date, '20260727')),
        1 + ABS(CHECKSUM(NEWID())) % 5000,
        1 + ABS(CHECKSUM(NEWID())) % 800,
        1 + ABS(CHECKSUM(NEWID())) % 12,
        CONVERT(decimal(18,2), 10 + ABS(CHECKSUM(NEWID())) % 50000 / 10.0)
    FROM sys.all_objects AS a
    CROSS JOIN sys.all_objects AS b;

    CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactSalesDemo
    ON dbo.FactSalesDemo;

    SELECT * FROM sys.dm_db_column_store_row_group_operational_stats(DB_ID(), NULL, NULL, NULL);
شاخصخروجی نمونهتفسیر
object_id245575913شناسه نمونه شیء
state_descCOMPRESSEDوضعیت نمونه Rowgroup
sample_value101عدد نمایشی برای توضیح ستون

نکته فنی: هنگام استفاده از Related DMVs: sys.dm_db_column_store_row_group_operational_stats فقط به موفق‌بودن دستور اکتفا نکنید؛ نمونه‌برداری Delta را قبل و بعد اندازه بگیرید و اثر آن را روی Workload واقعی ثبت کنید.

مثال 2: فیلتر روی شیء هدف

در این مثال، «DMV عملیاتی Rowgroup» در سناریوی فیلتر روی شیء هدف بررسی می‌شود. Query به‌گونه‌ای نوشته شده که در یک محیط آزمایشی SQL Server قابل اجرا باشد و نتیجه آن با DMV، خروجی تجمیعی یا Metadata کنترل شود.

USE tempdb;
    DROP TABLE IF EXISTS dbo.FactSalesDemo;
    CREATE TABLE dbo.FactSalesDemo
    (
        SaleID bigint NOT NULL,
        OrderDate date NOT NULL,
        CustomerID int NOT NULL,
        ProductID int NOT NULL,
        Quantity smallint NULL,
        Amount decimal(18,2) NULL
    );

    INSERT INTO dbo.FactSalesDemo
    (
        SaleID, OrderDate, CustomerID, ProductID, Quantity, Amount
    )
    SELECT TOP (25000)
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
        DATEADD(day, -ABS(CHECKSUM(NEWID())) % 730, CONVERT(date, '20260727')),
        1 + ABS(CHECKSUM(NEWID())) % 5000,
        1 + ABS(CHECKSUM(NEWID())) % 800,
        1 + ABS(CHECKSUM(NEWID())) % 12,
        CONVERT(decimal(18,2), 10 + ABS(CHECKSUM(NEWID())) % 50000 / 10.0)
    FROM sys.all_objects AS a
    CROSS JOIN sys.all_objects AS b;

    CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactSalesDemo
    ON dbo.FactSalesDemo;

    SELECT object_id,index_id,partition_number,row_group_id,scan_count FROM sys.dm_db_column_store_row_group_operational_stats(DB_ID(),OBJECT_ID(N'dbo.FactSalesDemo'),NULL,NULL);
شاخصخروجی نمونهتفسیر
object_id245575913شناسه نمونه شیء
state_descCOMPRESSEDوضعیت نمونه Rowgroup
sample_value102عدد نمایشی برای توضیح ستون

نکته فنی: هنگام استفاده از Related DMVs: sys.dm_db_column_store_row_group_operational_stats فقط به موفق‌بودن دستور اکتفا نکنید؛ فیلتر دقیق را قبل و بعد اندازه بگیرید و اثر آن را روی Workload واقعی ثبت کنید.

مثال 3: اتصال به Metadata

در این مثال، «DMV عملیاتی Rowgroup» در سناریوی اتصال به Metadata بررسی می‌شود. Query به‌گونه‌ای نوشته شده که در یک محیط آزمایشی SQL Server قابل اجرا باشد و نتیجه آن با DMV، خروجی تجمیعی یا Metadata کنترل شود.

USE tempdb;
    DROP TABLE IF EXISTS dbo.FactSalesDemo;
    CREATE TABLE dbo.FactSalesDemo
    (
        SaleID bigint NOT NULL,
        OrderDate date NOT NULL,
        CustomerID int NOT NULL,
        ProductID int NOT NULL,
        Quantity smallint NULL,
        Amount decimal(18,2) NULL
    );

    INSERT INTO dbo.FactSalesDemo
    (
        SaleID, OrderDate, CustomerID, ProductID, Quantity, Amount
    )
    SELECT TOP (25000)
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
        DATEADD(day, -ABS(CHECKSUM(NEWID())) % 730, CONVERT(date, '20260727')),
        1 + ABS(CHECKSUM(NEWID())) % 5000,
        1 + ABS(CHECKSUM(NEWID())) % 800,
        1 + ABS(CHECKSUM(NEWID())) % 12,
        CONVERT(decimal(18,2), 10 + ABS(CHECKSUM(NEWID())) % 50000 / 10.0)
    FROM sys.all_objects AS a
    CROSS JOIN sys.all_objects AS b;

    CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactSalesDemo
    ON dbo.FactSalesDemo;

    SELECT object_id,index_id,SUM(scan_count) AS scans FROM sys.dm_db_column_store_row_group_operational_stats(DB_ID(),NULL,NULL,NULL) GROUP BY object_id,index_id;
شاخصخروجی نمونهتفسیر
object_id245575913شناسه نمونه شیء
state_descCOMPRESSEDوضعیت نمونه Rowgroup
sample_value103عدد نمایشی برای توضیح ستون

نکته فنی: هنگام استفاده از Related DMVs: sys.dm_db_column_store_row_group_operational_stats فقط به موفق‌بودن دستور اکتفا نکنید؛ هم‌بستگی با Wait Stats را قبل و بعد اندازه بگیرید و اثر آن را روی Workload واقعی ثبت کنید.

مثال 4: محاسبه شاخص سلامت

در این مثال، «DMV عملیاتی Rowgroup» در سناریوی محاسبه شاخص سلامت بررسی می‌شود. Query به‌گونه‌ای نوشته شده که در یک محیط آزمایشی SQL Server قابل اجرا باشد و نتیجه آن با DMV، خروجی تجمیعی یا Metadata کنترل شود.

USE tempdb;
    DROP TABLE IF EXISTS dbo.FactSalesDemo;
    CREATE TABLE dbo.FactSalesDemo
    (
        SaleID bigint NOT NULL,
        OrderDate date NOT NULL,
        CustomerID int NOT NULL,
        ProductID int NOT NULL,
        Quantity smallint NULL,
        Amount decimal(18,2) NULL
    );

    INSERT INTO dbo.FactSalesDemo
    (
        SaleID, OrderDate, CustomerID, ProductID, Quantity, Amount
    )
    SELECT TOP (25000)
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
        DATEADD(day, -ABS(CHECKSUM(NEWID())) % 730, CONVERT(date, '20260727')),
        1 + ABS(CHECKSUM(NEWID())) % 5000,
        1 + ABS(CHECKSUM(NEWID())) % 800,
        1 + ABS(CHECKSUM(NEWID())) % 12,
        CONVERT(decimal(18,2), 10 + ABS(CHECKSUM(NEWID())) % 50000 / 10.0)
    FROM sys.all_objects AS a
    CROSS JOIN sys.all_objects AS b;

    CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactSalesDemo
    ON dbo.FactSalesDemo;

    SELECT TOP (20) * FROM sys.dm_db_column_store_row_group_operational_stats(DB_ID(),NULL,NULL,NULL) ORDER BY scan_count DESC;
شاخصخروجی نمونهتفسیر
object_id245575913شناسه نمونه شیء
state_descCOMPRESSEDوضعیت نمونه Rowgroup
sample_value104عدد نمایشی برای توضیح ستون

نکته فنی: هنگام استفاده از Related DMVs: sys.dm_db_column_store_row_group_operational_stats فقط به موفق‌بودن دستور اکتفا نکنید؛ هزینه جمع‌آوری را قبل و بعد اندازه بگیرید و اثر آن را روی Workload واقعی ثبت کنید.

مثال 5: گروه‌بندی تحلیلی

در این مثال، «DMV عملیاتی Rowgroup» در سناریوی گروه‌بندی تحلیلی بررسی می‌شود. Query به‌گونه‌ای نوشته شده که در یک محیط آزمایشی SQL Server قابل اجرا باشد و نتیجه آن با DMV، خروجی تجمیعی یا Metadata کنترل شود.

USE tempdb;
    DROP TABLE IF EXISTS dbo.FactSalesDemo;
    CREATE TABLE dbo.FactSalesDemo
    (
        SaleID bigint NOT NULL,
        OrderDate date NOT NULL,
        CustomerID int NOT NULL,
        ProductID int NOT NULL,
        Quantity smallint NULL,
        Amount decimal(18,2) NULL
    );

    INSERT INTO dbo.FactSalesDemo
    (
        SaleID, OrderDate, CustomerID, ProductID, Quantity, Amount
    )
    SELECT TOP (25000)
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
        DATEADD(day, -ABS(CHECKSUM(NEWID())) % 730, CONVERT(date, '20260727')),
        1 + ABS(CHECKSUM(NEWID())) % 5000,
        1 + ABS(CHECKSUM(NEWID())) % 800,
        1 + ABS(CHECKSUM(NEWID())) % 12,
        CONVERT(decimal(18,2), 10 + ABS(CHECKSUM(NEWID())) % 50000 / 10.0)
    FROM sys.all_objects AS a
    CROSS JOIN sys.all_objects AS b;

    CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactSalesDemo
    ON dbo.FactSalesDemo;

    SELECT partition_number,SUM(scan_count) AS scans FROM sys.dm_db_column_store_row_group_operational_stats(DB_ID(),OBJECT_ID(N'dbo.FactSalesDemo'),NULL,NULL) GROUP BY partition_number;
شاخصخروجی نمونهتفسیر
object_id245575913شناسه نمونه شیء
state_descCOMPRESSEDوضعیت نمونه Rowgroup
sample_value105عدد نمایشی برای توضیح ستون

نکته فنی: هنگام استفاده از Related DMVs: sys.dm_db_column_store_row_group_operational_stats فقط به موفق‌بودن دستور اکتفا نکنید؛ Query Store را قبل و بعد اندازه بگیرید و اثر آن را روی Workload واقعی ثبت کنید.

مثال 6: بررسی علت یا نوع انتقال

در این مثال، «DMV عملیاتی Rowgroup» در سناریوی بررسی علت یا نوع انتقال بررسی می‌شود. Query به‌گونه‌ای نوشته شده که در یک محیط آزمایشی SQL Server قابل اجرا باشد و نتیجه آن با DMV، خروجی تجمیعی یا Metadata کنترل شود.

USE tempdb;
    DROP TABLE IF EXISTS dbo.FactSalesDemo;
    CREATE TABLE dbo.FactSalesDemo
    (
        SaleID bigint NOT NULL,
        OrderDate date NOT NULL,
        CustomerID int NOT NULL,
        ProductID int NOT NULL,
        Quantity smallint NULL,
        Amount decimal(18,2) NULL
    );

    INSERT INTO dbo.FactSalesDemo
    (
        SaleID, OrderDate, CustomerID, ProductID, Quantity, Amount
    )
    SELECT TOP (25000)
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
        DATEADD(day, -ABS(CHECKSUM(NEWID())) % 730, CONVERT(date, '20260727')),
        1 + ABS(CHECKSUM(NEWID())) % 5000,
        1 + ABS(CHECKSUM(NEWID())) % 800,
        1 + ABS(CHECKSUM(NEWID())) % 12,
        CONVERT(decimal(18,2), 10 + ABS(CHECKSUM(NEWID())) % 50000 / 10.0)
    FROM sys.all_objects AS a
    CROSS JOIN sys.all_objects AS b;

    CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactSalesDemo
    ON dbo.FactSalesDemo;

    SELECT object_id,index_id,row_group_id,scan_count FROM sys.dm_db_column_store_row_group_operational_stats(DB_ID(),NULL,NULL,NULL) WHERE scan_count>0;
شاخصخروجی نمونهتفسیر
object_id245575913شناسه نمونه شیء
state_descCOMPRESSEDوضعیت نمونه Rowgroup
sample_value106عدد نمایشی برای توضیح ستون

نکته فنی: هنگام استفاده از Related DMVs: sys.dm_db_column_store_row_group_operational_stats فقط به موفق‌بودن دستور اکتفا نکنید؛ نمونه‌برداری Delta را قبل و بعد اندازه بگیرید و اثر آن را روی Workload واقعی ثبت کنید.

مثال 7: شناسایی موارد نیازمند توجه

در این مثال، «DMV عملیاتی Rowgroup» در سناریوی شناسایی موارد نیازمند توجه بررسی می‌شود. Query به‌گونه‌ای نوشته شده که در یک محیط آزمایشی SQL Server قابل اجرا باشد و نتیجه آن با DMV، خروجی تجمیعی یا Metadata کنترل شود.

USE tempdb;
    DROP TABLE IF EXISTS dbo.FactSalesDemo;
    CREATE TABLE dbo.FactSalesDemo
    (
        SaleID bigint NOT NULL,
        OrderDate date NOT NULL,
        CustomerID int NOT NULL,
        ProductID int NOT NULL,
        Quantity smallint NULL,
        Amount decimal(18,2) NULL
    );

    INSERT INTO dbo.FactSalesDemo
    (
        SaleID, OrderDate, CustomerID, ProductID, Quantity, Amount
    )
    SELECT TOP (25000)
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
        DATEADD(day, -ABS(CHECKSUM(NEWID())) % 730, CONVERT(date, '20260727')),
        1 + ABS(CHECKSUM(NEWID())) % 5000,
        1 + ABS(CHECKSUM(NEWID())) % 800,
        1 + ABS(CHECKSUM(NEWID())) % 12,
        CONVERT(decimal(18,2), 10 + ABS(CHECKSUM(NEWID())) % 50000 / 10.0)
    FROM sys.all_objects AS a
    CROSS JOIN sys.all_objects AS b;

    CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactSalesDemo
    ON dbo.FactSalesDemo;

    SELECT GETDATE() AS sample_time,* FROM sys.dm_db_column_store_row_group_operational_stats(DB_ID(),OBJECT_ID(N'dbo.FactSalesDemo'),NULL,NULL);
شاخصخروجی نمونهتفسیر
object_id245575913شناسه نمونه شیء
state_descCOMPRESSEDوضعیت نمونه Rowgroup
sample_value107عدد نمایشی برای توضیح ستون

نکته فنی: هنگام استفاده از Related DMVs: sys.dm_db_column_store_row_group_operational_stats فقط به موفق‌بودن دستور اکتفا نکنید؛ فیلتر دقیق را قبل و بعد اندازه بگیرید و اثر آن را روی Workload واقعی ثبت کنید.

مثال 8: گزارش سطح پارتیشن

در این مثال، «DMV عملیاتی Rowgroup» در سناریوی گزارش سطح پارتیشن بررسی می‌شود. Query به‌گونه‌ای نوشته شده که در یک محیط آزمایشی SQL Server قابل اجرا باشد و نتیجه آن با DMV، خروجی تجمیعی یا Metadata کنترل شود.

USE tempdb;
    DROP TABLE IF EXISTS dbo.FactSalesDemo;
    CREATE TABLE dbo.FactSalesDemo
    (
        SaleID bigint NOT NULL,
        OrderDate date NOT NULL,
        CustomerID int NOT NULL,
        ProductID int NOT NULL,
        Quantity smallint NULL,
        Amount decimal(18,2) NULL
    );

    INSERT INTO dbo.FactSalesDemo
    (
        SaleID, OrderDate, CustomerID, ProductID, Quantity, Amount
    )
    SELECT TOP (25000)
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
        DATEADD(day, -ABS(CHECKSUM(NEWID())) % 730, CONVERT(date, '20260727')),
        1 + ABS(CHECKSUM(NEWID())) % 5000,
        1 + ABS(CHECKSUM(NEWID())) % 800,
        1 + ABS(CHECKSUM(NEWID())) % 12,
        CONVERT(decimal(18,2), 10 + ABS(CHECKSUM(NEWID())) % 50000 / 10.0)
    FROM sys.all_objects AS a
    CROSS JOIN sys.all_objects AS b;

    CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactSalesDemo
    ON dbo.FactSalesDemo;

    SELECT o.name,i.name,s.scan_count FROM sys.dm_db_column_store_row_group_operational_stats(DB_ID(),NULL,NULL,NULL) s JOIN sys.objects o ON s.object_id=o.object_id JOIN sys.indexes i ON s.object_id=i.object_id AND s.index_id=i.index_id;
شاخصخروجی نمونهتفسیر
object_id245575913شناسه نمونه شیء
state_descCOMPRESSEDوضعیت نمونه Rowgroup
sample_value108عدد نمایشی برای توضیح ستون

نکته فنی: هنگام استفاده از Related DMVs: sys.dm_db_column_store_row_group_operational_stats فقط به موفق‌بودن دستور اکتفا نکنید؛ هم‌بستگی با Wait Stats را قبل و بعد اندازه بگیرید و اثر آن را روی Workload واقعی ثبت کنید.

مثال 9: یافتن الگوی کم‌بازده

در این مثال، «DMV عملیاتی Rowgroup» در سناریوی یافتن الگوی کم‌بازده بررسی می‌شود. Query به‌گونه‌ای نوشته شده که در یک محیط آزمایشی SQL Server قابل اجرا باشد و نتیجه آن با DMV، خروجی تجمیعی یا Metadata کنترل شود.

USE tempdb;
    DROP TABLE IF EXISTS dbo.FactSalesDemo;
    CREATE TABLE dbo.FactSalesDemo
    (
        SaleID bigint NOT NULL,
        OrderDate date NOT NULL,
        CustomerID int NOT NULL,
        ProductID int NOT NULL,
        Quantity smallint NULL,
        Amount decimal(18,2) NULL
    );

    INSERT INTO dbo.FactSalesDemo
    (
        SaleID, OrderDate, CustomerID, ProductID, Quantity, Amount
    )
    SELECT TOP (25000)
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
        DATEADD(day, -ABS(CHECKSUM(NEWID())) % 730, CONVERT(date, '20260727')),
        1 + ABS(CHECKSUM(NEWID())) % 5000,
        1 + ABS(CHECKSUM(NEWID())) % 800,
        1 + ABS(CHECKSUM(NEWID())) % 12,
        CONVERT(decimal(18,2), 10 + ABS(CHECKSUM(NEWID())) % 50000 / 10.0)
    FROM sys.all_objects AS a
    CROSS JOIN sys.all_objects AS b;

    CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactSalesDemo
    ON dbo.FactSalesDemo;

    SELECT SUM(scan_count) AS total_scans FROM sys.dm_db_column_store_row_group_operational_stats(DB_ID(),NULL,NULL,NULL);
شاخصخروجی نمونهتفسیر
object_id245575913شناسه نمونه شیء
state_descCOMPRESSEDوضعیت نمونه Rowgroup
sample_value109عدد نمایشی برای توضیح ستون

نکته فنی: هنگام استفاده از Related DMVs: sys.dm_db_column_store_row_group_operational_stats فقط به موفق‌بودن دستور اکتفا نکنید؛ هزینه جمع‌آوری را قبل و بعد اندازه بگیرید و اثر آن را روی Workload واقعی ثبت کنید.

مثال 10: ساخت Snapshot پایش

در این مثال، «DMV عملیاتی Rowgroup» در سناریوی ساخت Snapshot پایش بررسی می‌شود. Query به‌گونه‌ای نوشته شده که در یک محیط آزمایشی SQL Server قابل اجرا باشد و نتیجه آن با DMV، خروجی تجمیعی یا Metadata کنترل شود.

USE tempdb;
    DROP TABLE IF EXISTS dbo.FactSalesDemo;
    CREATE TABLE dbo.FactSalesDemo
    (
        SaleID bigint NOT NULL,
        OrderDate date NOT NULL,
        CustomerID int NOT NULL,
        ProductID int NOT NULL,
        Quantity smallint NULL,
        Amount decimal(18,2) NULL
    );

    INSERT INTO dbo.FactSalesDemo
    (
        SaleID, OrderDate, CustomerID, ProductID, Quantity, Amount
    )
    SELECT TOP (25000)
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
        DATEADD(day, -ABS(CHECKSUM(NEWID())) % 730, CONVERT(date, '20260727')),
        1 + ABS(CHECKSUM(NEWID())) % 5000,
        1 + ABS(CHECKSUM(NEWID())) % 800,
        1 + ABS(CHECKSUM(NEWID())) % 12,
        CONVERT(decimal(18,2), 10 + ABS(CHECKSUM(NEWID())) % 50000 / 10.0)
    FROM sys.all_objects AS a
    CROSS JOIN sys.all_objects AS b;

    CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactSalesDemo
    ON dbo.FactSalesDemo;

    SELECT * FROM sys.dm_db_column_store_row_group_operational_stats(DB_ID(),OBJECT_ID(N'dbo.FactSalesDemo'),1,1);
شاخصخروجی نمونهتفسیر
object_id245575913شناسه نمونه شیء
state_descCOMPRESSEDوضعیت نمونه Rowgroup
sample_value110عدد نمایشی برای توضیح ستون

نکته فنی: هنگام استفاده از Related DMVs: sys.dm_db_column_store_row_group_operational_stats فقط به موفق‌بودن دستور اکتفا نکنید؛ Query Store را قبل و بعد اندازه بگیرید و اثر آن را روی Workload واقعی ثبت کنید.

خطاهای رایج

خطاهای زیر در پروژه‌های واقعی مرتبط با Related DMVs: sys.dm_db_column_store_row_group_operational_stats دیده می‌شوند. شدت هر خطا به حجم داده و نسخه SQL Server وابسته است، اما اصل کنترل برای همه محیط‌ها یکسان است.

  • فرض ماندگاری دائمی Counters
  • جمع‌زدن بدون Delta زمانی
  • نادیده گرفتن NULL wildcard
  • پرس‌وجوی سراسری بی‌دلیل
  • تفسیر Lock بدون Context

مهم‌ترین هشدار: فرض ماندگاری دائمی Counters. پیش از هر تغییر گسترده، Backup/Restore آزمایشی، ظرفیت Log و امکان بازگشت را بررسی کنید.

ملاحظات کارایی و پایش

برای ارزیابی DMV عملیاتی Rowgroup حداقل پنج محور باید هم‌زمان دیده شود: نمونه‌برداری Delta, فیلتر دقیق, هم‌بستگی با Wait Stats, هزینه جمع‌آوری, Query Store. اندازه‌گیری تنها زمان اجرا ممکن است نتیجه گمراه‌کننده بدهد، زیرا Cache گرم، Parallelism، Memory Grant و بار هم‌زمان روی نتیجه اثر دارند.

معیارچرا مهم است؟روش پیشنهادی
نمونه‌برداری Deltaاثر مستقیم بر کیفیت یا هزینه DMV عملیاتی Rowgroup دارددو Snapshot مقایسه کنید
فیلتر دقیقاثر مستقیم بر کیفیت یا هزینه DMV عملیاتی Rowgroup داردشناسه‌ها را محدود کنید
هم‌بستگی با Wait Statsاثر مستقیم بر کیفیت یا هزینه DMV عملیاتی Rowgroup داردهمراه با فیزیکی تحلیل کنید
هزینه جمع‌آوریاثر مستقیم بر کیفیت یا هزینه DMV عملیاتی Rowgroup داردزمان جمع‌آوری را ثبت کنید
Query Storeاثر مستقیم بر کیفیت یا هزینه DMV عملیاتی Rowgroup داردمجوزها را مستند کنید

یک Snapshot منفرد برای تصمیم بلندمدت کافی نیست. داده پایش را در چند بازه کاری، پس از ETL و در ساعات اوج جمع‌آوری کنید تا روند واقعی مشخص شود.

سناریوی عملی و بهینه‌سازی DMV عملیاتی Rowgroupمقایسه روش نامناسب و بهترین روش برای کارایی و نگه‌داری Related DMVs: sys.dm_db_column_store_row_group_operational_statsسناریوی عملی و بهینه‌سازی DMV عملیاتی RowgroupRelated DMVs: sys.dm_db_column_store_row_group_operational_stats1sys.dm_db_column_store_row_group_oروش ضعیف2database_idاثر3object_idریسک4index_idبهترین روش5partition_numberبهبود6scan_countکنترل

این سناریو تفاوت میان اجرای بدون پایش و اجرای مبتنی بر Best Practice را برای DMV عملیاتی Rowgroup مقایسه می‌کند؛ معیارهای اصلی شامل نمونه‌برداری Delta و فیلتر دقیق هستند.

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

  • دو Snapshot مقایسه کنید
  • شناسه‌ها را محدود کنید
  • همراه با فیزیکی تحلیل کنید
  • زمان جمع‌آوری را ثبت کنید
  • مجوزها را مستند کنید

Best Practice به‌معنای اجرای یک نسخه ثابت برای همه سرورها نیست. باید توصیه‌ها را با اندازه داده، Edition، Compatibility Level، معماری HA/DR و محدودیت پنجره نگه‌داری تطبیق داد.

پرسش‌های متداول

DMV عملیاتی Rowgroup دقیقاً چه مشکلی را حل می‌کند؟

تابع مدیریتی sys.dm_db_column_store_row_group_operational_stats شمارنده‌های عملیاتی Rowgroup مانند تعداد اسکن، قفل، انتظار و فعالیت‌های مرتبط را با فیلتر شناسه‌های پایگاه داده، شیء، ایندکس و پارتیشن ارائه می‌کند. انتخاب آن باید براساس نوع بارکاری و معیارهای قابل اندازه‌گیری انجام شود.

برای شروع یادگیری Related DMVs: sys.dm_db_column_store_row_group_operational_stats چه پیش‌نیازی لازم است؟

آشنایی با Execution Plan، ایندکس‌ها و دستورات پایه T-SQL کافی است. سپس باید مفاهیم database_id و object_id را روی یک پایگاه داده آزمایشی مشاهده کنید.

آیا DMV عملیاتی Rowgroup برای همه پروژه‌های تجاری مناسب است؟

خیر. سودمندی آن به حجم داده، نسبت خواندن به نوشتن، SLA گزارش‌ها و هزینه نگه‌داری وابسته است. ارزیابی فنی یا مشاوره SQL Server پیش از استقرار می‌تواند از هزینه‌های بازطراحی جلوگیری کند.

هزینه پیاده‌سازی DMV عملیاتی Rowgroup چگونه برآورد می‌شود؟

برآورد باید شامل تحلیل Workload، طراحی آزمایش، زمان مهاجرت، پایش پس از اجرا و آموزش تیم باشد. اندازه جدول و حساسیت توقف سرویس نیز روی زمان انجام پروژه اثر مستقیم دارد.

تفاوت DMV عملیاتی Rowgroup با یک ایندکس یا روش عمومی چیست؟

روش عمومی معمولاً فقط ساختار یا دستور را می‌بیند، اما این موضوع روی sys.dm_db_column_store_row_group_operational_stats، index_id و رفتار واقعی موتور تمرکز دارد. مقایسه باید با Plan، IO، CPU و مدت اجرا انجام شود.

چه زمانی برای اجرای پروژه یا دریافت خدمات مرتبط با Related DMVs: sys.dm_db_column_store_row_group_operational_stats مناسب است؟

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

رایج‌ترین خطا در استفاده از DMV عملیاتی Rowgroup چیست؟

یکی از خطاهای پرتکرار «فرض ماندگاری دائمی Counters» است. خطای دیگر تصمیم‌گیری بدون مقایسه قبل و بعد و بدون توجه به نسخه SQL Server است.

DMV عملیاتی Rowgroup چه اثری بر Performance دارد؟

اثر اصلی از مسیر نمونه‌برداری Delta، فیلتر دقیق و هم‌بستگی با Wait Stats دیده می‌شود. نتیجه می‌تواند بسیار مثبت یا در Workload نامناسب منفی باشد، بنابراین تست کنترل‌شده ضروری است.

بهترین روش عملی برای DMV عملیاتی Rowgroup چیست؟

از یک محیط آزمایشی مشابه Production شروع کنید، دو Snapshot مقایسه کنید و شناسه‌ها را محدود کنید را اجرا کنید و معیارها را در Query Store یا سامانه پایش ثبت نمایید.

سازگاری Related DMVs: sys.dm_db_column_store_row_group_operational_stats با نسخه‌های SQL Server چگونه است؟

این DMF در SQL Server 2016 و نسخه‌های بعدی ارائه شده و شمارنده‌ها از زمان راه‌اندازی/ایجاد ساختار ممکن است ریست شوند. پیش از انتشار در Production، Syntax و گزینه‌های قابل پشتیبانی را روی همان Edition، Version و Compatibility Level بررسی کنید.

سؤالات مصاحبه

پاسخ مناسب به پرسش‌های زیر باید علاوه بر تعریف، شامل سناریو، Trade-off، معیار اندازه‌گیری و نمونه T-SQL باشد.

  1. تفاوت sys.dm_db_column_store_row_group_operational_stats و database_id را با یک سناریوی واقعی توضیح دهید.
  2. برای سنجش اثر Related DMVs: sys.dm_db_column_store_row_group_operational_stats چه شاخص‌هایی را قبل و بعد ثبت می‌کنید؟
  3. در چه شرایطی «فرض ماندگاری دائمی Counters» باعث افت کارایی می‌شود؟
  4. چگونه با استفاده از object_id و index_id مشکل را عیب‌یابی می‌کنید؟
  5. در طراحی یک Job سازمانی برای DMV عملیاتی Rowgroup چه کنترل خطا و Rollback در نظر می‌گیرید؟
  6. چرا توصیه «دو Snapshot مقایسه کنید» برای محیط Production مهم است؟

چک‌لیست نهایی

  1. نسخه و Compatibility Level برای Related DMVs: sys.dm_db_column_store_row_group_operational_stats کنترل شد.
  2. خط پایه IO، CPU، Duration و فضای مصرفی ثبت شد.
  3. Query و Syntax در محیط آزمایشی اجرا شد.
  4. اثرات DML و ETL جداگانه سنجیده شد.
  5. خروجی DMV یا Metadata پس از اجرا بررسی شد.
  6. Rollback Plan و ظرفیت Log مشخص شد.
  7. گزارش مقایسه قبل و بعد ذخیره شد.
  8. Job یا رویه نگه‌داری دارای شرط و کنترل خطا است.

جمع‌بندی

DMV عملیاتی Rowgroup زمانی مفید است که از حالت یک دستور منفرد خارج و به یک فرایند اندازه‌گیری‌شده تبدیل شود. تابع مدیریتی sys.dm_db_column_store_row_group_operational_stats شمارنده‌های عملیاتی Rowgroup مانند تعداد اسکن، قفل، انتظار و فعالیت‌های مرتبط را با فیلتر شناسه‌های پایگاه داده، شیء، ایندکس و پارتیشن ارائه می‌کند. در عمل باید با نسخه SQL Server، شکل داده و هدف گزارش‌گیری سازگار شود.

برای مطالعه ارتباط این موضوع با سایر اجزای Columnstore، راهنمای جامع کارایی Columnstore در SQL Server را ببینید.

خدمات برنامه‌نویسی و پایگاه داده

برنامه‌نویسی در اصفهان

قبول سفارش‌های برنامه‌نویسی و پایگاه داده: 09131253620

انجام پروژه‌های برنامه‌نویسی، آموزش برنامه‌نویسی و آموزش پایگاه داده SQL Server با رویکرد حرفه‌ای، مستندسازی مناسب و قابلیت توسعه انجام می‌شود.

مجموعه‌ای معتبر با سابقه فعالیت حرفه‌ای از سال ۱۳۷۵ شمسی

از سال ۱۳۷۵ شمسی تاکنون در زمینه طراحی و اجرای پروژه‌های برنامه‌نویسی، پایگاه داده، سیستم‌های تحت وب، وب‌سایت و راهکارهای نرم‌افزاری فعالیت می‌کنیم.

برای سفارش پروژه‌های برنامه‌نویسی و پایگاه داده، سیستم‌های تحت وب، وب‌سایت و راهکارهای نرم‌افزاری جدید، با شماره تلفن همراه 09131253620 تماس حاصل فرمایید.

ایتا، واتساپ و تماس مستقیم: +989131253620

تماس با ما

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر