راهنمای جامع دستورات، گزینهها و DMFهای Statistics در SQL Server
دامنه راهنما و نتیجهای که باید به دست آید
خانواده «Statistics Commands» مجموعهای از 20 موضوع مرتبط است که برای مدیریت چرخه عمر Statistics از ایجاد و Update تا نمونهبرداری، تنظیمات دیتابیس، پایش Properties و نگهداری پارتیشنها. استفاده میشود. مسئله اصلی این نیست که همه DMVها یا فرمانها اجرا شوند؛ هدف، انتخاب ابزار درست برای هر مرحله از مشاهده، تشخیص، اعتبارسنجی و اقدام است.
مخاطب این راهنما DBA، توسعهدهنده Backend و مسئول نگهداری است که با Queryهای T-SQL و ساختار Metadata آشناست. در پایان، خواننده میتواند اعضای خانواده را بر اساس نقش تفکیک کند، خروجی آنها را در یک Timeline مشترک قرار دهد و از تصمیم عجولانه بر پایه یک شاخص جلوگیری نماید. برای موضوع Statistics Commands در مجموعه 16، همین قاعده باید با داده همان Scope تطبیق داده شود.
این مقاله دید مجموعهمحور دارد و وارد همه جزئیات اجرایی هر عضو نمیشود؛ برای هر موضوع یک لینک مستقل با مثالها و کنترلهای Production در نظر گرفته شده است. ترتیب خانواده 16 در تخصیص شناسه و لینکها نیز بدون آمیختن با مجموعه دیگر حفظ شده است.
نقشه دسترسی سریع
- ابتدا نقش هر عضو و مرز داده آن را بشناسید.
- جدول مقایسه را برای انتخاب ابزار متناسب با سؤال بخوانید.
- مثالهای ترکیبی را بهعنوان الگوی Runbook آزمایش کنید.
- پیش از اقدام، خطاهای تفسیر و کنترل Performance را مرور نمایید.
تعریف مجموعه و مدل تصمیمگیری
این مجموعه در خانواده بصری «Performance / Tuning / Optimization» قرار میگیرد، زیرا اعضای آن داده یا فرمانی برای تحلیل Performance تولید میکنند. مدل پیشنهادی چهار گام دارد: Scope را محدود کنید، Snapshot بگیرید، سیگنال را با منبع دوم همبسته سازید و فقط سپس اقدام قابل بازگشت تعریف نمایید. در Runbook خانواده 16، تفسیر این بند به شواهد اختصاصی Statistics Commands وابسته است.
در خانواده 16، هر عضو باید نقش متفاوتی داشته باشد. یکی Baseline میسازد، دیگری جزئیات ساختاری یا عملیاتی میدهد و عضو بعدی نتیجه را به تصمیم نگهداری نزدیک میکند. اگر دو ابزار پاسخ یکسان میدهند، Query اضافی حذف و ابزار کمهزینهتر انتخاب میشود.
این تصویر، جایگاه Statistics Commands را با تمرکز بر CREATE_STATISTICS، UPDATE_STATISTICS و DROP_STATISTICS نشان میدهد؛ پنل عددی پایین شکل برای جداکردن مشاهده خام از تصمیم اجرایی طراحی شده است.
دستهبندی اعضا و مسیر مطالعه
1. CREATE STATISTICS
CREATE STATISTICS در این خانواده مسئول این بخش از تحلیل است: آمار ستونی یا چندستونی مستقل از ایندکس ایجاد میکند تا Cardinality Estimator توزیع داده را دقیقتر تخمین بزند. نقش آن با موضوع «statistics_name» آغاز میشود و برای رسیدن به تصمیم باید با WHERE filter_predicate یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل CREATE STATISTICS با مثالهای اختصاصی و چکلیست اجرا
2. UPDATE STATISTICS
UPDATE STATISTICS در این خانواده مسئول این بخش از تحلیل است: Histogram و Density آمار موجود را با نمونهبرداری جدید بازسازی میکند تا تخمین ردیفها با تغییرات داده هماهنگ شود. نقش آن با موضوع «statistics_target» آغاز میشود و برای رسیدن به تصمیم باید با SAMPLE یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل UPDATE STATISTICS با مثالهای اختصاصی و چکلیست اجرا
3. DROP STATISTICS
DROP STATISTICS در این خانواده مسئول این بخش از تحلیل است: یک یا چند Statistics مستقل را حذف میکند؛ آمار متصل به ایندکس با DROP STATISTICS قابل حذف مستقیم نیست. نقش آن با موضوع «statistics_name» آغاز میشود و برای رسیدن به تصمیم باید با auto_created یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل DROP STATISTICS با مثالهای اختصاصی و چکلیست اجرا
4. sp_updatestats
sp_updatestats در این خانواده مسئول این بخش از تحلیل است: در پایگاه داده جاری روی جدولهای کاربر پیمایش میکند و آمار واجد شرایط را با UPDATE STATISTICS تازه میسازد. نقش آن با موضوع «database_scope» آغاز میشود و برای رسیدن به تصمیم باید با resample یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل sp_updatestats با مثالهای اختصاصی و چکلیست اجرا
5. DBCC SHOW_STATISTICS
DBCC SHOW_STATISTICS در این خانواده مسئول این بخش از تحلیل است: جزئیات Statistics شامل زمان Update، تعداد Rows، Sample، Density Vector و گامهای Histogram را نمایش میدهد. نقش آن با موضوع «STAT_HEADER» آغاز میشود و برای رسیدن به تصمیم باید با HISTOGRAM یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل DBCC SHOW_STATISTICS با مثالهای اختصاصی و چکلیست اجرا
6. STATS_DATE
STATS_DATE در این خانواده مسئول این بخش از تحلیل است: تاریخ و زمان آخرین تولید Blob آماری برای object_id و stats_id را برمیگرداند. نقش آن با موضوع «object_id» آغاز میشود و برای رسیدن به تصمیم باید با last_updated یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل STATS_DATE با مثالهای اختصاصی و چکلیست اجرا
7. Statistics Options:FULLSCAN
Statistics Options:FULLSCAN در این خانواده مسئول این بخش از تحلیل است: تمام ردیفهای جدول یا پارتیشن هدف را برای ساخت Statistics میخواند و خطای Sample را حذف میکند. نقش آن با موضوع «FULLSCAN» آغاز میشود و برای رسیدن به تصمیم باید با histogram_quality یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Statistics Options:FULLSCAN با مثالهای اختصاصی و چکلیست اجرا
8. Statistics Options:SAMPLE
Statistics Options:SAMPLE در این خانواده مسئول این بخش از تحلیل است: درصد یا تعداد ردیف نمونه را هنگام ساخت یا Update آمار تعیین میکند تا تعادل میان هزینه و دقت برقرار شود. نقش آن با موضوع «SAMPLE PERCENT» آغاز میشود و برای رسیدن به تصمیم باید با sampling_rate یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Statistics Options:SAMPLE با مثالهای اختصاصی و چکلیست اجرا
9. Statistics Options:RESAMPLE
Statistics Options:RESAMPLE در این خانواده مسئول این بخش از تحلیل است: Statistics را با نرخ نمونه ذخیرهشده قبلی بازسازی میکند و برای حفظ سیاست Sample موجود مفید است. نقش آن با موضوع «RESAMPLE» آغاز میشود و برای رسیدن به تصمیم باید با previous_rate یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Statistics Options:RESAMPLE با مثالهای اختصاصی و چکلیست اجرا
10. Statistics Options:NORECOMPUTE
Statistics Options:NORECOMPUTE در این خانواده مسئول این بخش از تحلیل است: به SQL Server میگوید Statistics مشخص را بهطور خودکار Recompute نکند و مسئولیت تازگی را به برنامه نگهداری بسپارد. نقش آن با موضوع «NORECOMPUTE» آغاز میشود و برای رسیدن به تصمیم باید با no_recompute یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Statistics Options:NORECOMPUTE با مثالهای اختصاصی و چکلیست اجرا
11. Statistics Options:INCREMENTAL = ON
Statistics Options:INCREMENTAL = ON در این خانواده مسئول این بخش از تحلیل است: Statistics را به اجزای پارتیشنی تقسیم میکند تا Update یک پارتیشن بدون اسکن کامل همه پارتیشنها ممکن شود. نقش آن با موضوع «INCREMENTAL» آغاز میشود و برای رسیدن به تصمیم باید با partition statistics یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Statistics Options:INCREMENTAL = ON با مثالهای اختصاصی و چکلیست اجرا
12. Statistics Options:PERSIST_SAMPLE_PERCENT = ON
Statistics Options:PERSIST_SAMPLE_PERCENT = ON در این خانواده مسئول این بخش از تحلیل است: نرخ Sample انتخابشده را در Metadata Statistics نگه میدارد تا Updateهای بعدی بتوانند همان درصد را حفظ کنند. نقش آن با موضوع «PERSIST_SAMPLE_PERCENT» آغاز میشود و برای رسیدن به تصمیم باید با SAMPLE یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Statistics Options:PERSIST_SAMPLE_PERCENT = ON با مثالهای اختصاصی و چکلیست اجرا
13. Statistics Options:AUTO_DROP = ON
Statistics Options:AUTO_DROP = ON در این خانواده مسئول این بخش از تحلیل است: به Statistics دستی اجازه میدهد هنگام تغییر Schema مزاحم، مشابه Auto Statistics مدیریت و در صورت نیاز حذف شود. نقش آن با موضوع «AUTO_DROP» آغاز میشود و برای رسیدن به تصمیم باید با user_created statistics یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Statistics Options:AUTO_DROP = ON با مثالهای اختصاصی و چکلیست اجرا
14. Statistics Options:MAXDOP
Statistics Options:MAXDOP در این خانواده مسئول این بخش از تحلیل است: حداکثر درجه موازیسازی عملیات ساخت یا بهروزرسانی Statistics را برای همان دستور کنترل میکند. نقش آن با موضوع «MAXDOP» آغاز میشود و برای رسیدن به تصمیم باید با CPU budget یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Statistics Options:MAXDOP با مثالهای اختصاصی و چکلیست اجرا
15. Database Options:AUTO_CREATE_STATISTICS
Database Options:AUTO_CREATE_STATISTICS در این خانواده مسئول این بخش از تحلیل است: به Optimizer اجازه میدهد هنگام نیاز Query، Statistics تکستونی خودکار روی ستون Predicate یا Join بسازد. نقش آن با موضوع «AUTO_CREATE_STATISTICS» آغاز میشود و برای رسیدن به تصمیم باید با single-column statistics یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Database Options:AUTO_CREATE_STATISTICS با مثالهای اختصاصی و چکلیست اجرا
16. Database Options:AUTO_UPDATE_STATISTICS
Database Options:AUTO_UPDATE_STATISTICS در این خانواده مسئول این بخش از تحلیل است: هنگام عبور تغییرات داده از Threshold داخلی، Statistics موردنیاز Query را بهصورت خودکار Update میکند. نقش آن با موضوع «AUTO_UPDATE_STATISTICS» آغاز میشود و برای رسیدن به تصمیم باید با synchronous update یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Database Options:AUTO_UPDATE_STATISTICS با مثالهای اختصاصی و چکلیست اجرا
17. Database Options:AUTO_UPDATE_STATISTICS_ASYNC
Database Options:AUTO_UPDATE_STATISTICS_ASYNC در این خانواده مسئول این بخش از تحلیل است: Query محرک را با Statistics موجود Compile میکند و Update خودکار آمار را در پسزمینه قرار میدهد. نقش آن با موضوع «AUTO_UPDATE_STATISTICS_ASYNC» آغاز میشود و برای رسیدن به تصمیم باید با compile latency یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Database Options:AUTO_UPDATE_STATISTICS_ASYNC با مثالهای اختصاصی و چکلیست اجرا
18. Database Options:AUTO_CREATE_STATISTICS INCREMENTAL
Database Options:AUTO_CREATE_STATISTICS INCREMENTAL در این خانواده مسئول این بخش از تحلیل است: به دیتابیس اجازه میدهد Auto Statistics روی جداول پارتیشنبندیشده را در صورت پشتیبانی بهشکل Incremental بسازد. نقش آن با موضوع «AUTO_CREATE_STATISTICS» آغاز میشود و برای رسیدن به تصمیم باید با partitioned table یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Database Options:AUTO_CREATE_STATISTICS INCREMENTAL با مثالهای اختصاصی و چکلیست اجرا
19. Statistics DMFs:sys.dm_db_stats_properties
Statistics DMFs:sys.dm_db_stats_properties در این خانواده مسئول این بخش از تحلیل است: ویژگیهای عملی Statistics شامل last_updated، rows، rows_sampled، steps، unfiltered_rows و modification_counter را بازمیگرداند. نقش آن با موضوع «last_updated» آغاز میشود و برای رسیدن به تصمیم باید با rows_sampled یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Statistics DMFs:sys.dm_db_stats_properties با مثالهای اختصاصی و چکلیست اجرا
20. Statistics DMFs:sys.dm_db_incremental_stats_properties
Statistics DMFs:sys.dm_db_incremental_stats_properties در این خانواده مسئول این بخش از تحلیل است: ویژگی Statistics Incremental را به تفکیک partition_number شامل last_updated، rows، rows_sampled و modification_counter برمیگرداند. نقش آن با موضوع «partition_number» آغاز میشود و برای رسیدن به تصمیم باید با rows یا یک منبع مستقل اعتبارسنجی گردد.
آموزش کامل Statistics DMFs:sys.dm_db_incremental_stats_properties با مثالهای اختصاصی و چکلیست اجرا
جدول مقایسه تصمیممحور اعضای مجموعه
| موضوع یا تابع | کاربرد اصلی | خروجی یا نکته کلیدی | لینک آموزش کامل |
|---|
| CREATE STATISTICS | آمار ستونی یا چندستونی مستقل از ایندکس ایجاد میکند تا Cardinality Estimator توزیع داده را دقیقتر تخمین بزند. | statistics_name / column_list | مشاهده آموزش کامل |
| UPDATE STATISTICS | Histogram و Density آمار موجود را با نمونهبرداری جدید بازسازی میکند تا تخمین ردیفها با تغییرات داده هماهنگ شود. | statistics_target / FULLSCAN | مشاهده آموزش کامل |
| DROP STATISTICS | یک یا چند Statistics مستقل را حذف میکند؛ آمار متصل به ایندکس با DROP STATISTICS قابل حذف مستقیم نیست. | statistics_name / user_created | مشاهده آموزش کامل |
| sp_updatestats | در پایگاه داده جاری روی جدولهای کاربر پیمایش میکند و آمار واجد شرایط را با UPDATE STATISTICS تازه میسازد. | database_scope / modification_counter | مشاهده آموزش کامل |
| DBCC SHOW_STATISTICS | جزئیات Statistics شامل زمان Update، تعداد Rows، Sample، Density Vector و گامهای Histogram را نمایش میدهد. | STAT_HEADER / DENSITY_VECTOR | مشاهده آموزش کامل |
| STATS_DATE | تاریخ و زمان آخرین تولید Blob آماری برای object_id و stats_id را برمیگرداند. | object_id / stats_id | مشاهده آموزش کامل |
| Statistics Options:FULLSCAN | تمام ردیفهای جدول یا پارتیشن هدف را برای ساخت Statistics میخواند و خطای Sample را حذف میکند. | FULLSCAN / sample_percent=100 | مشاهده آموزش کامل |
| Statistics Options:SAMPLE | درصد یا تعداد ردیف نمونه را هنگام ساخت یا Update آمار تعیین میکند تا تعادل میان هزینه و دقت برقرار شود. | SAMPLE PERCENT / SAMPLE ROWS | مشاهده آموزش کامل |
| Statistics Options:RESAMPLE | Statistics را با نرخ نمونه ذخیرهشده قبلی بازسازی میکند و برای حفظ سیاست Sample موجود مفید است. | RESAMPLE / persisted_sample | مشاهده آموزش کامل |
| Statistics Options:NORECOMPUTE | به SQL Server میگوید Statistics مشخص را بهطور خودکار Recompute نکند و مسئولیت تازگی را به برنامه نگهداری بسپارد. | NORECOMPUTE / auto update | مشاهده آموزش کامل |
| Statistics Options:INCREMENTAL = ON | Statistics را به اجزای پارتیشنی تقسیم میکند تا Update یک پارتیشن بدون اسکن کامل همه پارتیشنها ممکن شود. | INCREMENTAL / partitioned table | مشاهده آموزش کامل |
| Statistics Options:PERSIST_SAMPLE_PERCENT = ON | نرخ Sample انتخابشده را در Metadata Statistics نگه میدارد تا Updateهای بعدی بتوانند همان درصد را حفظ کنند. | PERSIST_SAMPLE_PERCENT / persisted_sample_percent | مشاهده آموزش کامل |
| Statistics Options:AUTO_DROP = ON | به Statistics دستی اجازه میدهد هنگام تغییر Schema مزاحم، مشابه Auto Statistics مدیریت و در صورت نیاز حذف شود. | AUTO_DROP / schema change | مشاهده آموزش کامل |
| Statistics Options:MAXDOP | حداکثر درجه موازیسازی عملیات ساخت یا بهروزرسانی Statistics را برای همان دستور کنترل میکند. | MAXDOP / parallel scan | مشاهده آموزش کامل |
| Database Options:AUTO_CREATE_STATISTICS | به Optimizer اجازه میدهد هنگام نیاز Query، Statistics تکستونی خودکار روی ستون Predicate یا Join بسازد. | AUTO_CREATE_STATISTICS / auto_created | مشاهده آموزش کامل |
| Database Options:AUTO_UPDATE_STATISTICS | هنگام عبور تغییرات داده از Threshold داخلی، Statistics موردنیاز Query را بهصورت خودکار Update میکند. | AUTO_UPDATE_STATISTICS / modification threshold | مشاهده آموزش کامل |
| Database Options:AUTO_UPDATE_STATISTICS_ASYNC | Query محرک را با Statistics موجود Compile میکند و Update خودکار آمار را در پسزمینه قرار میدهد. | AUTO_UPDATE_STATISTICS_ASYNC / background update | مشاهده آموزش کامل |
| Database Options:AUTO_CREATE_STATISTICS INCREMENTAL | به دیتابیس اجازه میدهد Auto Statistics روی جداول پارتیشنبندیشده را در صورت پشتیبانی بهشکل Incremental بسازد. | AUTO_CREATE_STATISTICS / INCREMENTAL | مشاهده آموزش کامل |
| Statistics DMFs:sys.dm_db_stats_properties | ویژگیهای عملی Statistics شامل last_updated، rows، rows_sampled، steps، unfiltered_rows و modification_counter را بازمیگرداند. | last_updated / rows | مشاهده آموزش کامل |
| Statistics DMFs:sys.dm_db_incremental_stats_properties | ویژگی Statistics Incremental را به تفکیک partition_number شامل last_updated، rows، rows_sampled و modification_counter برمیگرداند. | partition_number / last_updated | مشاهده آموزش کامل |
ارتباط دادهها از Baseline تا اقدام
برای این مجموعه، Snapshotها باید با یک Capture ID مشترک ذخیره شوند. نام دیتابیس، زمان محلی و UTC، نسخه SQL Server، وضعیت سرویس و Scope Query کنار خروجی قرار میگیرد تا مقایسه میان CREATE STATISTICS و Statistics DMFs:sys.dm_db_incremental_stats_properties از نظر زمانی معتبر باشد.
مرحله بعد تبدیل سیگنال به فرضیه است. برای نمونه، عدد بزرگ فقط میگوید کجا نگاه کنیم؛ علت با Plan، Query Text، نوع Storage، تغییرات داده یا تنظیم Maintenance روشن میشود. این تفکیک مانع آن است که ابزار مشاهده به ماشین تولید تغییرات خودکار تبدیل شود. کاربرد این اصل در Statistics Commands با معیارهای ویژه مجموعه 16 سنجیده میشود.
در نمودار دوم، مسیر CREATE_STATISTICS تا SP_UPDATESTATS بهصورت مرحلهای ترسیم شده تا ورودی، تبدیل و خروجی Statistics Commands در یک نگاه قابل دنبالکردن باشد.
شش مثال ترکیبی و مستقل برای خانواده
مثال ترکیبی 1: ساخت نمای پایه برای خانواده ابزارها
این مثال ترکیبی از اعضای خانواده «راهنمای جامع دستورات، گزینهها و DMFهای Statistics در SQL Server» استفاده میکند تا یک سؤال سطحبالا را بدون کپیکردن مثالهای مقالههای فرزند پاسخ دهد.
CREATE STATISTICS ST_Sales_RegionDate ON dbo.Sales(RegionCode,OrderDate) WHERE StatusCode=1 WITH FULLSCAN;
| مرحله | نمونه خروجی | کاربرد |
|---|
| P16-1 | 208 | Baseline |
نکته این سناریو، ترکیب کنترلشده منابع خانواده 16 است؛ نتیجه باید قبل از هر تغییر با Workload و Plan واقعی تطبیق داده شود.
مثال ترکیبی 2: محدودکردن تحلیل به موارد قابل اقدام
این مثال ترکیبی از اعضای خانواده «راهنمای جامع دستورات، گزینهها و DMFهای Statistics در SQL Server» استفاده میکند تا یک سؤال سطحبالا را بدون کپیکردن مثالهای مقالههای فرزند پاسخ دهد. در مجموعه 16، این تصمیم برای Statistics Commands باید جدا از خانوادههای دیگر ثبت شود.
UPDATE STATISTICS dbo.Sales ST_Sales_RegionDate WITH SAMPLE 50 PERCENT, PERSIST_SAMPLE_PERCENT=ON;
| مرحله | نمونه خروجی | کاربرد |
|---|
| P16-2 | 221 | Threshold |
نکته این سناریو، ترکیب کنترلشده منابع خانواده 16 است؛ نتیجه باید قبل از هر تغییر با Workload و Plan واقعی تطبیق داده شود. برای Statistics Commands، اجرای این توصیه در خانواده 16 نیازمند Baseline مخصوص همان موضوع است.
مثال ترکیبی 3: اتصال دو منبع برای ایجاد Context
این مثال ترکیبی از اعضای خانواده «راهنمای جامع دستورات، گزینهها و DMFهای Statistics در SQL Server» استفاده میکند تا یک سؤال سطحبالا را بدون کپیکردن مثالهای مقالههای فرزند پاسخ دهد. این نکته در تحلیل خانواده 16 با محور Statistics Commands بهصورت مستقل ارزیابی میشود.
DBCC SHOW_STATISTICS(N'dbo.Sales',N'ST_Sales_RegionDate') WITH STAT_HEADER,HISTOGRAM;
| مرحله | نمونه خروجی | کاربرد |
|---|
| P16-3 | 234 | Correlation |
نکته این سناریو، ترکیب کنترلشده منابع خانواده 16 است؛ نتیجه باید قبل از هر تغییر با Workload و Plan واقعی تطبیق داده شود. برای موضوع Statistics Commands در مجموعه 16، همین قاعده باید با داده همان Scope تطبیق داده شود.
مثال ترکیبی 4: تبدیل Metadata به گزارش تصمیم
این مثال ترکیبی از اعضای خانواده «راهنمای جامع دستورات، گزینهها و DMFهای Statistics در SQL Server» استفاده میکند تا یک سؤال سطحبالا را بدون کپیکردن مثالهای مقالههای فرزند پاسخ دهد. در Runbook خانواده 16، تفسیر این بند به شواهد اختصاصی Statistics Commands وابسته است.
SELECT s.name,STATS_DATE(s.object_id,s.stats_id) AS last_updated,sp.rows,sp.rows_sampled,sp.modification_counter
FROM sys.stats AS s OUTER APPLY sys.dm_db_stats_properties(s.object_id,s.stats_id) AS sp
WHERE s.object_id=OBJECT_ID(N'dbo.Sales');
| مرحله | نمونه خروجی | کاربرد |
|---|
| P16-4 | 247 | Decision |
نکته این سناریو، ترکیب کنترلشده منابع خانواده 16 است؛ نتیجه باید قبل از هر تغییر با Workload و Plan واقعی تطبیق داده شود. کاربرد این اصل در Statistics Commands با معیارهای ویژه مجموعه 16 سنجیده میشود.
مثال ترکیبی 5: بررسی سناریوی نسخه یا قابلیت خاص
این مثال ترکیبی از اعضای خانواده «راهنمای جامع دستورات، گزینهها و DMFهای Statistics در SQL Server» استفاده میکند تا یک سؤال سطحبالا را بدون کپیکردن مثالهای مقالههای فرزند پاسخ دهد. در مجموعه 16، این تصمیم برای Statistics Commands باید جدا از خانوادههای دیگر ثبت شود.
SELECT name,is_auto_create_stats_on,is_auto_update_stats_on,is_auto_update_stats_async_on
FROM sys.databases WHERE database_id=DB_ID();
| مرحله | نمونه خروجی | کاربرد |
|---|
| P16-5 | 260 | Compatibility |
نکته این سناریو، ترکیب کنترلشده منابع خانواده 16 است؛ نتیجه باید قبل از هر تغییر با Workload و Plan واقعی تطبیق داده شود. برای Statistics Commands، اجرای این توصیه در خانواده 16 نیازمند Baseline مخصوص همان موضوع است.
مثال ترکیبی 6: تهیه خروجی نهایی برای Runbook
این مثال ترکیبی از اعضای خانواده «راهنمای جامع دستورات، گزینهها و DMFهای Statistics در SQL Server» استفاده میکند تا یک سؤال سطحبالا را بدون کپیکردن مثالهای مقالههای فرزند پاسخ دهد. این نکته در تحلیل خانواده 16 با محور Statistics Commands بهصورت مستقل ارزیابی میشود.
SELECT s.name,isp.partition_number,isp.last_updated,isp.rows,isp.modification_counter
FROM sys.stats AS s CROSS APPLY sys.dm_db_incremental_stats_properties(s.object_id,s.stats_id) AS isp
WHERE s.object_id=OBJECT_ID(N'dbo.FactSales') AND s.is_incremental=1;
| مرحله | نمونه خروجی | کاربرد |
|---|
| P16-6 | 273 | Runbook |
نکته این سناریو، ترکیب کنترلشده منابع خانواده 16 است؛ نتیجه باید قبل از هر تغییر با Workload و Plan واقعی تطبیق داده شود. برای موضوع Statistics Commands در مجموعه 16، همین قاعده باید با داده همان Scope تطبیق داده شود.
سناریوهای واقعی استفاده
در Incident، ابتدا ارزانترین عضو خانواده 16 برای محدودکردن دامنه اجرا میشود. اگر سیگنال پایدار بود، ابزار جزئیات روی همان Object فراخوانی و خروجی با Query Store یا Plan متناظر میشود. این مسیر زمان جمعآوری را کوتاه و بار تشخیص را کنترل میکند.
در Capacity Planning، Snapshotهای هفتگی از معیارهای اصلی نگهداری و با Deploymentها علامتگذاری میشوند. تغییر روند پس از Release مهمتر از یک عدد مطلق است و کمک میکند بودجه سختافزار یا بازطراحی قبل از اشباع واقعی برنامهریزی گردد. در Runbook خانواده 16، تفسیر این بند به شواهد اختصاصی Statistics Commands وابسته است.
در آموزش تیم، هر عضو به یک سؤال مشخص متصل میشود. فراگیر باید توضیح دهد چه چیزی را مشاهده کرده، چه چیزی را هنوز نمیداند و کدام منبع دوم برای رد یا تأیید فرضیه لازم است؛ این تمرین از حفظ Syntax مفیدتر است. کاربرد این اصل در Statistics Commands با معیارهای ویژه مجموعه 16 سنجیده میشود.
هشدار مجموعهای
هیچ عضو «Statistics Commands» بهتنهایی دستور تغییر Production صادر نمیکند. شمارنده موقت، تخمین Optimizer یا درصد Fragmentation باید با بازه زمانی، اندازه شیء، هزینه نوشتن و SLA ترکیب شود. اجرای خودکار DDL یا Maintenance از روی یک Snapshot، کنترل کیفیت این خانواده را نقض میکند.
اشتباهات رایج در استفاده ترکیبی
- ترکیب دادههای قبل و بعد از Restart بدون ثبت مرز Reset؛ اصلاح: زمان شروع موتور و Capture ID ذخیره شود.
- مقایسه دیتابیسهای با حجم و Workload متفاوت با Threshold یکسان؛ اصلاح: Baseline محلی و واحد مشترک تعریف گردد.
- اجرای ابزار عمیق روی همه اشیا؛ اصلاح: ابتدا با Query سبک فهرست کوتاه ساخته شود.
- کپیکردن Recommendation به DDL؛ اصلاح: همپوشانی، هزینه نگهداری و Plan در محیط آزمایش سنجیده شود.
- نداشتن مالک و تاریخ بازبینی؛ اصلاح: هر Finding به Ticket، مسئول و معیار بستهشدن متصل گردد.
Performance مجموعه و هزینه جمعآوری
خود فرآیند مانیتورینگ باید Budget داشته باشد. در خانواده 16 Queryهای Catalog و DMV با Top، Predicate و Projection محدود اجرا میشوند؛ فرمانهای اسکن یا Update نیز در پنجره جدا و با اندازهگیری Reads، CPU و مدت اجرا قرار میگیرند.
تعداد Snapshot بیشتر لزوماً دید بهتر ایجاد نمیکند. تناوب باید با سرعت تغییر سیگنال هماهنگ باشد: شمارنده سریع ممکن است هر چند دقیقه، Metadata پایدار روزانه و اسکن فیزیکی فقط پس از عبور از شرط اندازه یا رخداد نگهداری جمعآوری شود. در مجموعه 16، این تصمیم برای Statistics Commands باید جدا از خانوادههای دیگر ثبت شود.
برای گزارش، داده خام کوتاهمدت و Aggregation بلندمدت جدا نگهداری شود. Retention نامحدود، Indexهای مخزن مانیتورینگ و گزارشهای Sort سنگین میتوانند هزینهای بیشتر از سود تشخیص ایجاد کنند. برای Statistics Commands، اجرای این توصیه در خانواده 16 نیازمند Baseline مخصوص همان موضوع است.
Best Practices برای پیادهسازی سازمانی
- هر Query را به یک سؤال عملی و یک مالک متصل کنید.
- Capture ID و Timestamp مشترک برای همه منابع یک تحلیل بسازید.
- نسخه SQL Server و مجوزهای لازم را در ابتدای Runbook ثبت نمایید.
- مرحله مشاهده را از مرحله تغییر جدا و Approval مستقل تعریف کنید.
- معیار قبل/بعد، زمان انتظار مشاهده اثر و Rollback را پیش از اجرا بنویسید.
- پس از هر Incident، Queryها و Thresholdها را با شواهد جدید بازبینی کنید.
نمای سوم، رابطه UPDATE_STATISTICS، DBCC_SHOW_STATISTICS و STATS_DATE را در کنار شاخصهای تصمیم نمایش میدهد و مشخص میکند کدام مسیر برای Performance یا رفع خطا اولویت دارد.
مزایا، محدودیتها و مرز استفاده
مزیت این خانواده، پوشش چند زاویه از مسئله مدیریت چرخه عمر Statistics از ایجاد و Update تا نمونهبرداری، تنظیمات دیتابیس، پایش Properties و نگهداری پارتیشنها. است. کنارهمگذاشتن اعضا امکان میدهد نتیجه یک ابزار با ابزار دیگر کنترل شود و تصمیم از حالت تکمنبعی خارج گردد.
محدودیت مهم، ناهمگونی زمان و ماندگاری دادههاست. برخی شمارندهها با Restart صفر میشوند، بعضی خروجی لحظهایاند و فرمانهای Statistics یا DBCC اثر اجرایی دارند. گزارش بدون Timestamp و Context از نظر تحلیلی ناقص است. این نکته در تحلیل خانواده 16 با محور Statistics Commands بهصورت مستقل ارزیابی میشود.
این مجموعه برای اجرای کور در Incident، ساخت خودکار ایندکس یا تغییر سراسری تنظیمات مناسب نیست. وقتی Baseline ندارید، نخست باید مشاهده کمخطر و ثبت شواهد را انجام دهید و تغییر را به مرحله بعد منتقل کنید. برای موضوع Statistics Commands در مجموعه 16، همین قاعده باید با داده همان Scope تطبیق داده شود.
سؤالات متداول مجموعه
از میان اعضای Statistics Commands از کدام مورد شروع کنیم؟
شروع به مسئله بستگی دارد. برای Baseline نخست «CREATE STATISTICS» و برای تکمیل Context سپس «UPDATE STATISTICS» را بخوانید؛ مقاله مادر ترتیب مفهومی را میدهد اما انتخاب عملی باید از سؤال Workload آغاز شود.
آیا اجرای همه ابزارهای خانواده 16 در یک Job مناسب است؟
خیر، هزینه و Scope اعضا متفاوت است. DMV سبک را میتوان با تناوب بیشتر ثبت کرد، ولی فرمان یا اسکن پرهزینه باید پنجره جدا، فیلتر هدفمند و شرط توقف داشته باشد. در Runbook خانواده 16، تفسیر این بند به شواهد اختصاصی Statistics Commands وابسته است.
برای پروژه کوچک چند عضو این مجموعه کافی است؟
معمولاً یک ابزار Baseline، یک ابزار جزئیات و یک معیار اعتبارسنجی کافی است. در این خانواده میتوان CREATE STATISTICS را با Statistics DMFs:sys.dm_db_incremental_stats_properties ترکیب کرد و با رشد سیستم پوشش را توسعه داد.
خروجی این خانواده چگونه در گزارش مدیریتی استفاده شود؟
اعداد خام به زبان ریسک و اقدام تبدیل میشوند: شیء متاثر، شدت، زمان مشاهده، مالک، پیشنهاد آزمایش و معیار موفقیت. گزارش مدیریتی نباید ستونهای فنی را بدون تفسیر نمایش دهد. کاربرد این اصل در Statistics Commands با معیارهای ویژه مجموعه 16 سنجیده میشود.
تفاوت مقاله مادر با مقالههای فرزند چیست؟
این صفحه رابطه ابزارها، ترتیب استفاده و تصمیم ترکیبی را توضیح میدهد؛ صفحات فرزند Syntax، ستونها، ده مثال و خطاهای همان موضوع را عمیق بررسی میکنند. در مجموعه 16، این تصمیم برای Statistics Commands باید جدا از خانوادههای دیگر ثبت شود.
چه زمانی مشاوره تخصصی برای این مجموعه منطقی است؟
وقتی تحلیل به تغییر ایندکس، تنظیم Statistics، DDL یا عملیات گسترده منتهی میشود، بازبینی یک متخصص SQL Server میتواند ریسک Regression را کم کند. تهیه Snapshotهای این راهنما جلسه مشاوره را عملی و قابل اندازهگیری میسازد. برای Statistics Commands، اجرای این توصیه در خانواده 16 نیازمند Baseline مخصوص همان موضوع است.
خطای رایج در ترکیب اعضای Statistics Commands چیست؟
رایجترین خطا، کنارهمگذاشتن Snapshotهایی با زمان و Scope متفاوت است. همه منابع باید Timestamp مشترک یا بازه قابل تطبیق داشته باشند و Reset شدن شمارندهها ثبت شود. این نکته در تحلیل خانواده 16 با محور Statistics Commands بهصورت مستقل ارزیابی میشود.
چگونه هزینه Performance گزارش جامع را کنترل کنیم؟
Queryها را مرحلهای اجرا کنید، ابتدا Top و فیلتر اندازه بگذارید، سپس فقط برای موارد مشکوک وارد اسکن عمیق شوید. ذخیره خروجی کوچک و تحلیل Offline معمولاً از تکرار Query سنگین بهتر است. برای موضوع Statistics Commands در مجموعه 16، همین قاعده باید با داده همان Scope تطبیق داده شود.
بهترین Practice برای تبدیل خروجی خانواده به اقدام چیست؟
هر اقدام باید یک فرضیه، شواهد از حداقل دو عضو، معیار قبل/بعد، مالک و Rollback داشته باشد. بدون این پنج جزء، خروجی در حد Recommendation غیرقطعی باقی میماند. در Runbook خانواده 16، تفسیر این بند به شواهد اختصاصی Statistics Commands وابسته است.
سازگاری نسخهای اعضای خانواده چگونه کنترل شود؟
وجود DMV یا Option، نام مجوز و ستونهای قابل اتکا را با نسخه هدف بررسی کنید. Script باید نسخه را ثبت و برای قابلیتهای جدید مسیر جایگزین یا پیام روشن داشته باشد. کاربرد این اصل در Statistics Commands با معیارهای ویژه مجموعه 16 سنجیده میشود.
سؤالات مصاحبه برای نقش DBA و Performance Engineer
چگونه ابزار نخست خانواده را انتخاب میکنید؟
ابزار نخست باید کمهزینهترین منبعی باشد که Scope مسئله را محدود میکند؛ سپس فقط برای موارد منتخب سراغ جزئیات یا فرمان سنگین میروم. این پاسخ در خانواده 16 باید با یکی از اعضای واقعی مجموعه مثال زده شود.
چرا Timestamp مشترک مهم است؟
زیرا همبستگی دو منبع با زمان متفاوت میتواند علت و معلول ساختگی ایجاد کند. Capture ID مشترک مرز تحلیل را حفظ میکند. این پاسخ در خانواده 16 باید با یکی از اعضای واقعی مجموعه مثال زده شود.
چه زمانی یک Finding به اقدام تبدیل میشود؟
وقتی از دو منبع مستقل پشتیبانی شود، منفعت قابل اندازهگیری داشته باشد و Rollback و مالک آن مشخص باشد. این پاسخ در خانواده 16 باید با یکی از اعضای واقعی مجموعه مثال زده شود.
چگونه Threshold تعیین میکنید؟
از Baseline همان سیستم، SLA و هزینه اقدام استفاده میکنم؛ عدد عمومی فقط نقطه شروع آزمایش است. این پاسخ در خانواده 16 باید با یکی از اعضای واقعی مجموعه مثال زده شود.
چرا خودکارسازی کامل خطرناک است؟
زیرا بسیاری از خروجیها پیشنهاد یا Snapshot موقتاند و Context طراحی، Constraint، هزینه نوشتن و فصل کاری را نمیبینند. این پاسخ در خانواده 16 باید با یکی از اعضای واقعی مجموعه مثال زده شود.
پس از تغییر چه چیزی را ثبت میکنید؟
زمان اجرا، Script دقیق، Metricهای قبل/بعد، Planهای متاثر و تصمیم نگهداری یا بازگشت را در Ticket و مخزن فنی ذخیره میکنم. این پاسخ در خانواده 16 باید با یکی از اعضای واقعی مجموعه مثال زده شود.
چکلیست نهایی خانواده
- تعداد و نام اعضای همین مجموعه را با ورودی کنترل کنید.
- برای هر عضو نقش Baseline، جزئیات، اعتبارسنجی یا اقدام را تعیین نمایید.
- Slug و لینک همه صفحات فرزند را پیش از انتشار آزمایش کنید.
- Capture ID، Timestamp و نسخه SQL Server را در خروجیها نگه دارید.
- Queryهای عمیق را فقط روی فهرست کوتاه و در زمان کنترلشده اجرا کنید.
- هر Recommendation را با Plan و هزینه نگهداری اعتبارسنجی نمایید.
- تغییر Production را با Approval، Backup و Rollback اجرا کنید.
- اثر تغییر را با همان معیارهای Baseline دوباره بسنجید.
جمعبندی و مسیر ادامه مطالعه
برای استفاده حرفهای از «Statistics Commands»، ابزارها را یک زنجیره تصمیم ببینید: مشاهده کمهزینه، محدودکردن Scope، تحلیل جزئی، اعتبارسنجی مستقل و اقدام قابل بازگشت. این رویکرد از انباشتهشدن گزارشهای بدون نتیجه جلوگیری میکند.
صفحات تخصصی همین خانواده در ادامه قرار دارند و هرکدام مثالها و کنترلهای متفاوتی ارائه میکنند: در مجموعه 16، این تصمیم برای Statistics Commands باید جدا از خانوادههای دیگر ثبت شود.
خدمات برنامهنویسی و پایگاه داده
برنامهنویسی در اصفهان؛ قبول سفارشهای برنامهنویسی و پایگاه داده با شماره 09131253620، همراه با انجام پروژه، آموزش برنامهنویسی و آموزش SQL Server.
مجموعهای معتبر با سابقه فعالیت حرفهای از سال ۱۳۷۵ شمسی تاکنون در طراحی سامانههای نرمافزاری، پایگاه داده، وبسایت و راهکارهای سازمانی فعالیت میکند.
برای سفارش پروژه، مشاوره یا آموزش تخصصی از طریق ایتا، واتساپ و تماس مستقیم با +989131253620 اقدام کنید یا صفحه تماس با ما را ببینید.