پیکربندی Instance در SQL Server 2019: sp_configure، Processor، Memory و Trace Flag | Pro SQL Server 2019 Administration

پیکربندی Instance در SQL Server 2019: sp_configure، Processor، Memory و Trace Flag

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

نظرات 0

پیکربندی Instance در SQL Server 2019: sp_configure، Processor، Memory و Trace Flag

Chapter 5 — Configuring the Instance (Part 1)

نویسنده: Peter A. Carter

زبان منبع: انگلیسی

محدوده: صفحات PDF 146 تا 164

تاریخ ترجمه: 2026-08-11

اعتبار ترجمه: ترجمه با کمک هوش مصنوعی

PAGE-146

© Peter A. Carter 2019 — P. A. Carter, Pro SQL Server 2019 Administration — doi.org/10.1007/978-1-4842-5089-1_5

فصل 5 — پیکربندی Instance

نصب و پیکربندی SQL Server با پایان موفقیت‌آمیز Setup تمام نمی‌شود. ملاحظات فراوان دیگری، هم درون Database Engine و هم خارج از آن و با استفاده از ابزارهایی مانند SQL Server Configuration Manager، باید بررسی شوند. در این فصل بسیاری از مهم‌ترین گزینه‌های پیکربندی در سطح Instance، از جمله فناوری Buffer Pool Extension و انتخاب‌های مهم مربوط به System Databaseها بررسی می‌شود. همچنین نحوه پیکربندی Instance برای کار با Firewall را خواهیم دید.

پیکربندی Instance

در سطح Instance تعداد زیادی Setting و Flag قابل تنظیم است. در بخش‌های بعدی مشاهده و تغییر این تنظیمات با ابزارهایی مانند sp_configure، sys.configurations، DBCC TRACEON و ALTER SERVER بررسی می‌شود.

استفاده از sp_configure

بسیاری از تنظیمات سطح Instance را می‌توان با Stored Procedure سیستمی sp_configure مشاهده و تغییر داد. این Procedure در مثال‌های متعدد کتاب استفاده می‌شود. اگر Procedure اولین Statement در Batch باشد، می‌توان آن را بدون EXEC اجرا کرد؛ ولی اگر Statement دیگری قبل از آن وجود داشته باشد، استفاده از EXEC الزامی است. اجرای sp_configure بدون Parameter یک Result Set پنج‌ستونی برمی‌گرداند که معنای ستون‌های آن در جدول 5-1 آمده است.

PAGE-147

برای تغییر مقدار یک Setting با sp_configure باید دو Parameter ارسال شود. Parameter اول configname با نوع VARCHAR(35) است و نام Setting را مشخص می‌کند. Parameter دوم configvalue از نوع Integer است و مقدار جدید Setting را تعیین می‌کند. تغییر Setting بلافاصله اعمال نمی‌شود؛ برای فعال‌شدن آن باید Database Engine Service Restart شود یا Instance دوباره Reconfigure شود.

برای Reconfigure دو گزینه وجود دارد: RECONFIGURE و RECONFIGURE WITH OVERRIDE. فرمان RECONFIGURE مقدار در حال اجرا را فقط زمانی تغییر می‌دهد که مقدار جدید از نظر SQL Server «معقول» باشد. مثلاً وقتی Contained Database روی Instance وجود دارد، اجازه غیرفعال‌کردن آن را نمی‌دهد. RECONFIGURE WITH OVERRIDE محدودیت‌های منطقی بیشتری را نادیده می‌گیرد، هرچند همچنان Min/Max مجاز Setting را کنترل می‌کند و عملیاتی که خطای جدی ایجاد کنند، مانند قرار دادن Min Server Memory بالاتر از Max Server Memory، را نمی‌پذیرد.

جدول 5-1 — Result Set بازگردانده‌شده توسط sp_configure
ستونشرح
Nameنام Setting در سطح Instance.
Minimumکمترین مقدار مجاز.
Maximumبیشترین مقدار مجاز.
Config_valueمقدار پیکربندی‌شده. اگر با Run_value متفاوت باشد، برای اعمال آن باید Instance Restart یا Reconfigure شود.
Run_valueمقداری که در حال حاضر واقعاً استفاده می‌شود.
PAGE-148

در SQL Server 2019، نخستین بار که sp_configure را بدون Parameter اجرا می‌کنید 18 ردیف از گزینه‌های پایه Instance نمایش داده می‌شود. یکی از گزینه‌ها Show Advanced Options است. اگر آن را فعال و Instance را Reconfigure کنید، مطابق Listing 5-1 هنگام اجرای Procedure، 52 Setting پیشرفته دیگر نیز نمایش داده می‌شوند. تلاش برای تغییر گزینه پیشرفته قبل از فعال‌کردن Show Advanced Options با خطا مواجه می‌شود.

Listing 5-1 — نمایش Advanced Options

EXEC sp_configure 'show advanced options', 1
RECONFIGURE

همین اطلاعات را می‌توان از View سیستمی sys.configurations نیز دریافت کرد. این View دو ستون اضافی دارد: is_dynamic مشخص می‌کند Setting با RECONFIGURE قابل اعمال است (1) یا Restart لازم دارد (0)؛ و is_Advanced نشان می‌دهد Setting بدون فعال‌کردن Show Advanced Options قابل تنظیم است یا خیر.

پیکربندی Processor و Memory

یکی از اولین ملاحظات پیکربندی Instance، منابع Processor و Memory است. برای Processor دو موضوع اصلی مطرح است: Processor Affinity و MAXDOP یا Maximum Degree of Parallelism.

Processor Affinity

به‌طور پیش‌فرض Instance می‌تواند از همه Coreهای Processor موجود استفاده کند. Processor فیزیکی یا Socket/CPU شامل چند Core است. با Processor Affinity می‌توان Coreهای مشخصی را به Instance اختصاص داد تا فقط همان Coreها قابل استفاده باشند. یکی از دلایل این کار زمانی است که چند Instance روی یک Server اجرا می‌شوند و برای Processor Resource با یکدیگر رقابت می‌کنند. Processor Affinity با Settingی به نام affinity mask کنترل می‌شود.

PAGE-149

فرض کنید Server چهار Processor فیزیکی دارد و هرکدام دو Core دارند و Hyper-Threading نیز خاموش است؛ بنابراین هشت Core در اختیار SQL Server است. اگر چهار Instance داشته باشید، می‌توانید Coreهای 0 و 1 را به Instance 1، Coreهای 2 و 3 را به Instance 2، Coreهای 4 و 5 را به Instance 3 و Coreهای 6 و 7 را به Instance 4 اختصاص دهید تا Instanceها برای Resource رقابت نکنند. عیب این روش آن است که اگر یک Instance Idle باشد، Core اختصاص‌داده‌شده به آن بلااستفاده می‌ماند.

اگر Serviceهای دیگری مانند SQL Server Integration Services یا SSIS روی Server اجرا می‌شوند، ممکن است بخواهید یک Core را برای Windows و Applicationهای دیگر آزاد بگذارید. مثلاً اگر Instance 4 مخصوص ETL و SSIS Catalog است و Processor کمتری مصرف می‌کند، می‌توان فقط Core 6 را به آن داد و Core 7 را آزاد گذاشت. این طراحی در Figure 5-1 نشان داده شده است.

نکته: SSIS در Database Engine ادغام شده است، اما Packageهای SSIS هنگام اجرا در Process جداگانه DTSHost اجرا می‌شوند؛ بنابراین به Processor و Memory Configuration خود Instance مقید نیستند.

Figure 5-1 — نمودار Processor Affinity.

Figure 5-1 — شکل/تصویر منبع، صفحه PDF 149
PAGE-150

در استفاده از Processor Affinity برای Performance مهم است Coreهای یک Instance روی یک NUMA Node واحد قرار بگیرند. دسترسی Processor به Memory یک NUMA Node دیگر از طریق Interconnect انجام می‌شود و بسیار کندتر از دسترسی به Memory محلی همان Node است. در مثال Figure 5-1 اگر Instance 1 به Coreهای 0 و 7 اختصاص می‌یافت، مرز NUMA نقض و Performance کاهش پیدا می‌کرد.

هشدار: برخی محیط‌های Virtual از Over-subscribed Processor استفاده می‌کنند؛ یعنی Core بیشتری نسبت به Core فیزیکی Host به Guestها تخصیص می‌دهند. در این شرایط نباید Processor Affinity استفاده شود، زیرا مرزهای NUMA لزوماً رعایت نمی‌شوند.

کاهش Contention با Affinity Mask در Cluster نیز صادق است. در Cluster دو Node به‌صورت Active/Active که هر Node یک Instance دارد، اگر هر Node هشت Core داشته باشد، می‌توان Instance 1 را روی Node 1 به Coreهای 0 تا 3 و Instance 2 را روی Node 2 به Coreهای 4 تا 7 محدود کرد. در Failover نیز Instanceها همان Coreها را مصرف می‌کنند و برای Resource با هم رقابت نخواهند کرد.

دلیل دوم استفاده از Processor Affinity کاهش سربار جابه‌جایی Threadها بین Processorها در سطح Operating System است. در Load سنگین، ثابت‌کردن SQL Server Threadها روی Coreهای مشخص می‌تواند Performance را بهبود دهد و حتی Taskهای عادی SQL Server را از Taskهای IO جدا کند.

برای مثال در Server دارای یک Processor دو Core، می‌توان Taskهای IO مانند Lazy Writer را روی Core 0 و سایر SQL Server Threadها را روی Core 1 قرار داد. برای IO از Setting دیگری به نام Affinity I/O Mask استفاده می‌شود. با فعال‌شدن آن یک Scheduler مخفی فقط برای Lazy Writer ساخته می‌شود. Affinity Mask و Affinity I/O Mask نباید روی یک Core تنظیم شوند، زیرا همان Contentionی ایجاد می‌شود که قصد حذف آن را داریم.

PAGE-151
هشدار: Affinity I/O Mask بسیار به‌ندرت لازم است. برای تفکیک Workload چند Instance معمولاً Affinity Mask کافی است. این Setting عمدتاً برای VLDBهای 32-bit مناسب بود؛ در Systemهای 64-bit با RAM بیشتر، IO Churn و Context Switching کمتر است.

Affinity Mask و Affinity I/O Mask هر دو از GUI در SQL Server Management Studio و از تب Processors در Instance Properties قابل تنظیم هستند.

Figure 5-2 — تب Processors.

Figure 5-2 — شکل/تصویر منبع، صفحه PDF 151
PAGE-152

Processor Affinity بر اساس Bitmap کار می‌کند. بنابراین برای تنظیم آن با sp_configure باید نمایش Integer مربوط به Bitmap محاسبه شود. به دلیل Signed بودن نوع 32-bit INT بعضی نمایش‌ها منفی هستند. جدول 5-2 مقدار هر Processor را نشان می‌دهد.

نکته: Calculatorهای متعددی برای تبدیل Binary به Signed Integer وجود دارند.
جدول 5-2 — Bitmapهای Processor Affinity، بخش اول
ProcessorBit MaskSigned Integer
00000 0000 0000 0000 0000 0000 0000 00011
10000 0000 0000 0000 0000 0000 0000 00102
20000 0000 0000 0000 0000 0000 0000 01004
30000 0000 0000 0000 0000 0000 0000 10008
40000 0000 0000 0000 0000 0000 0001 000016
50000 0000 0000 0000 0000 0000 0010 000032
60000 0000 0000 0000 0000 0000 0100 000064
70000 0000 0000 0000 0000 0000 1000 0000128
80000 0000 0000 0000 0000 0001 0000 0000256
90000 0000 0000 0000 0000 0010 0000 0000512
100000 0000 0000 0000 0000 0100 0000 00001024
110000 0000 0000 0000 0000 1000 0000 00002048
120000 0000 0000 0000 0001 0000 0000 00004096
130000 0000 0000 0000 0010 0000 0000 00008192
140000 0000 0000 0000 0100 0000 0000 000016384
150000 0000 0000 0000 1000 0000 0000 000032768
PAGE-153

روی Server دارای 32 Core تعداد ترکیب‌های ممکن برای Processor Affinity بسیار زیاد است. ادامه جدول 5-2 مقدار Processorهای 16 تا 31 را نشان می‌دهد.

جدول 5-2 — Bitmapهای Processor Affinity، ادامه
ProcessorBit MaskSigned Integer
160000 0000 0000 0001 0000 0000 0000 000065536
170000 0000 0000 0010 0000 0000 0000 0000131072
180000 0000 0000 0100 0000 0000 0000 0000262144
190000 0000 0000 1000 0000 0000 0000 0000524288
200000 0000 0001 0000 0000 0000 0000 00001048576
210000 0000 0010 0000 0000 0000 0000 00002097152
220000 0000 0100 0000 0000 0000 0000 00004194304
230000 0000 1000 0000 0000 0000 0000 00008388608
240000 0001 0000 0000 0000 0000 0000 000016777216
250000 0010 0000 0000 0000 0000 0000 000033554432
260000 0100 0000 0000 0000 0000 0000 000067108864
270000 1000 0000 0000 0000 0000 0000 0000134217728
280001 0000 0000 0000 0000 0000 0000 0000268435456
290010 0000 0000 0000 0000 0000 0000 0000536870912
300100 0000 0000 0000 0000 0000 0000 00001073741824
311000 0000 0000 0000 0000 0000 0000 0000-2147483648
PAGE-154
جدول 5-3 — نمونه Affinity Maskها
Processorهای هم‌ترازBit MaskSigned Integer
0 و 10000 0000 0000 0000 0000 0000 0000 00113
0،1،2،30000 0000 0000 0000 0000 0000 0000 111115
8 و 90000 0000 0000 0000 0000 0011 0000 0000768
8،9،10،110000 0000 0000 0000 0000 1111 0000 00003840
30 و 311100 0000 0000 0000 0000 0000 0000 0000-1073741824
28،29،30،311111 0000 0000 0000 0000 0000 0000 0000-268435456

از آنجا که Affinity Mask و نوع Integer حداکثر محدوده 2^32 دارند، برای Serverهای 33 تا 64 Processor باید Affinity64 Mask و Affinity64 I/O Mask نیز تنظیم شوند تا Processorهای اضافه پوشش داده شوند.

همه Settingهای این بخش با sp_configure قابل تنظیم‌اند. Listing 5-2 Instance را به Coreهای 0 تا 3 اختصاص می‌دهد.

Listing 5-2 — تنظیم Processor Affinity

EXEC sp_configure 'affinity mask', 15
RECONFIGURE

حتی با Maskهای 64-bit این روش فقط 64 Core اول را پوشش می‌دهد، در حالی که SQL Server تا 256 Logical Processor را پشتیبانی می‌کند. بنابراین نسخه‌های جدید روش بهتری با ALTER SERVER CONFIGURATION ارائه کرده‌اند. این فرمان می‌تواند Instance را به CPUهای مشخص یا کل Processorهای NUMA Nodeهای مشخص متصل کند و تغییرات آن نیز در sys.configurations منعکس می‌شود.

PAGE-155

Listing 5-3 — ALTER SERVER CONFIGURATION

ALTER SERVER CONFIGURATION
    SET PROCESS AFFINITY CPU=0 TO 3
ALTER SERVER CONFIGURATION
    SET PROCESS AFFINITY NUMANODE=0, 4

MAXDOP

MAXDOP حداکثر تعداد Coreهایی را تعیین می‌کند که هر اجرای مستقل Query می‌تواند استفاده کند. شاید در نگاه اول تصور شود Parallelism بیشتر همیشه بهتر است، اما چنین نیست. برخی Queryهای Data Warehouse از Parallelism زیاد سود می‌برند، ولی بسیاری از Workloadهای OLTP با Parallelism کمتر بهتر اجرا می‌شوند. اگر Query روی Threadهای زیاد تقسیم شود و یک Thread بسیار دیرتر تمام شود، سایر Threadها برای Synchronize شدن منتظر می‌مانند و Wait Typeهایی مانند CXPACKET زیاد دیده می‌شود.

در بسیاری از OLTP Systemها انتخاب Parallelism بالا توسط Query Optimizer می‌تواند نشانه Missing/Fragmented Index یا Statistics قدیمی باشد. رفع این مشکلات معمولاً بیش از بالا بردن Degree of Parallelism به Performance کمک می‌کند.

برای Data Warehouse باید MAXDOPهای مختلف Test شود. MAXDOP در Query Level نیز با Query Hint قابل تنظیم است. در اکثر موارد مقدار Instance-level باید کمترین مقدار از این سه باشد:

  • 8
  • تعداد Coreهای قابل مشاهده برای Instance
  • تعداد Coreهای موجود در یک NUMA Node
PAGE-156

مقدار پیش‌فرض MAXDOP برابر 0 است؛ یعنی Query فقط به تعداد Coreهای قابل مشاهده توسط Instance محدود می‌شود. در GUI می‌توان گزینه Max Degree of Parallelism را در تب Advanced از Server Properties تنظیم کرد؛ Figure 5-3 مقدار 8 را نشان می‌دهد.

Figure 5-3 — تب Advanced.

MAXDOP از طریق sp_configure نیز قابل تنظیم است.

Figure 5-3 — شکل/تصویر منبع، صفحه PDF 156
PAGE-157

Listing 5-4 — پیکربندی MAXDOP با sp_configure

EXEC sys.sp_configure 'max degree of parallelism', 8
RECONFIGURE

در کنار کاهش MAXDOP می‌توان Thresholdی را که Query Optimizer در آن Parallel Plan را به Serial Plan ترجیح می‌دهد افزایش داد. مقدار پیش‌فرض Cost Threshold for Parallelism معادل Cost تخمینی 5 است و می‌توان آن را بین 0 و 32767 تنظیم کرد. در بسیاری از محیط‌ها حدود 30 مقدار عملی محسوب می‌شود، اما کاملاً Workload-specific است و باید Test شود. اگر MAXDOP برابر 1 باشد یا فقط یک Core در اختیار Instance باشد، این گزینه نادیده گرفته می‌شود. Listing 5-5 مقدار Threshold را به 10 افزایش می‌دهد.

Listing 5-5 — Cost Threshold for Parallelism

EXEC sp_configure 'cost threshold for parallelism', 10
RECONFIGURE

Min و Max Server Memory

Settingهای Min Server Memory (MB) و Max Server Memory (MB) مقدار Memory در دسترس SQL Server Memory Pool را کنترل می‌کنند. این Pool اجزای مختلفی دارد و برخی از بزرگ‌ترین اجزا در جدول 5-4 معرفی شده‌اند.

PAGE-158

در بسیاری از محیط‌ها ممکن است Min و Max Server Memory با یک مقدار تنظیم شوند تا سربار Dynamic Memory Management کاهش یابد. اما در Server دارای چند Instance، Dynamic Management می‌تواند مفید باشد تا Instance با Workload سنگین‌تر در هر لحظه Resource بیشتری مصرف کند. در Active/Active Cluster باید احتیاط بیشتری کرد؛ اگر برای هر Node Memory را مانند Stand-alone تنظیم کنید و Lock Pages in Memory نیز فعال باشد، Failover ممکن است باعث شود Node باقی‌مانده RAM کافی برای همه Instanceها نداشته باشد و Crash کند.

صرف‌نظر از طراحی محیط، همیشه باید Memory کافی برای Operating System باقی بماند.

جدول 5-4 — اجزای SQL Server Memory Pool
جزءشرح
Buffer cacheData Pageها و Index Pageها را پیش و پس از خواندن از Disk یا نوشتن روی Disk نگهداری می‌کند. حتی Pageای که در Cache نیست ابتدا وارد Buffer Cache می‌شود و سپس از Memory تحویل Query می‌شود.
Procedure cacheExecution Planهای Stored Procedure، Ad hoc Query، Prepared Statement و Trigger را نگهداری می‌کند. Optimizer ابتدا بررسی می‌کند Plan مناسب از قبل وجود دارد یا خیر.
Log cacheLog Recordها را قبل از نوشته‌شدن در Transaction Log نگهداری می‌کند.
Log poolHash Tableای که فناوری‌های HA/DR و توزیع Data مانند AlwaysOn، Mirroring و Replication را قادر می‌کند سریع به Log Recordهای لازم دسترسی یابند.
CLRکد .NET داخل Instance. در نسخه‌های قدیمی خارج از Memory Pool بود، اما از SQL Server 2012 با پشتیبانی Allocationهای تک‌Page و Multi-page داخل Memory Pool قرار گرفت.
PAGE-159

اگر تنها یک Instance دارید و Application دیگری مانند SSIS روی Server اجرا نمی‌شود، معمولاً Min و Max Memory را روی کمترین مقدار حاصل از دو فرمول زیر قرار می‌دهند:

  • RAM - 2GB
  • (RAM / 8) * 7

برای چند Instance این مقدار باید بر اساس نیاز بین آن‌ها تقسیم شود. اگر Applicationهای دیگری روی Server هستند، Memory موردنیاز آن‌ها نیز باید به نیاز Operating System اضافه شود. هر دو Setting Min و Max Server Memory از تب Memory در Server Properties قابل تنظیم هستند.

Figure 5-4 — تب Memory.

Figure 5-4 — شکل/تصویر منبع، صفحه PDF 159
PAGE-160

Min و Max Memory را می‌توان با T-SQL و sp_configure نیز تنظیم کرد. Listing 5-6 دو فرمول قبلی را محاسبه کرده و مقدار مناسب را روی هر دو Setting اعمال می‌کند.

Listing 5-6 — پیکربندی Min و Max Server Memory

DECLARE @MemOption1 INT = (SELECT physical_memory_kb/1024 - 2048 FROM sys.dm_os_sys_info)
DECLARE @MemOption2 INT = (SELECT ((physical_Memory_kb/1024)/8) * 7 FROM sys.dm_os_sys_info)
IF @MemOption1 <= 0
BEGIN
    EXEC sys.sp_configure 'min server memory (MB)', @MemOption2
    EXEC sys.sp_configure 'max server memory (MB)', @MemOption2
    RECONFIGURE
END
ELSE IF @MemOption2 < @MemOption1
BEGIN
    EXEC sys.sp_configure 'min server memory (MB)', @MemOption2
    EXEC sys.sp_configure 'max server memory (MB)', @MemOption2
    RECONFIGURE
END
ELSE
BEGIN
    EXEC sys.sp_configure 'min server memory (MB)', @MemOption1
    EXEC sys.sp_configure 'max server memory (MB)', @MemOption1
    RECONFIGURE
END

Trace Flagها

Trace Flagها Switchهایی در SQL Server هستند که Behavior یا Functionality را روشن و خاموش می‌کنند. می‌توان آن‌ها را در Session Level یا به‌صورت Global با DBCC TRACEON اعمال کرد. همه Trace Flagها Session-level نیستند؛ مثلاً Trace Flag 634 Thread پس‌زمینه مربوط به فشرده‌سازی دوره‌ای Rowgroupهای Columnstore را خاموش می‌کند و ذاتاً Setting مربوط به یک Session خاص نیست.

PAGE-161

Listing 5-7 Trace Flag 634 را Global و Trace Flag 1211 را فقط برای Session جاری فعال می‌کند. 1211 Lock Escalation را بر اساس Memory Pressure یا تعداد Lockها غیرفعال می‌کند. سپس DBCC TRACESTATUS وضعیت Flagها را نشان می‌دهد و DBCC TRACEOFF آن‌ها را به حالت Default برمی‌گرداند. Parameter برابر -1 Scope را Global می‌کند.

Listing 5-7 — تنظیم Trace Flag با DBCC TRACEON

DBCC TRACEON(634, -1)
DBCC TRACEON(1211)
DBCC TRACESTATUS
DBCC TRACEOFF(634, -1)
DBCC TRACEOFF(1211)
هشدار: Trace Flag 1211 فقط برای نمایش نحوه کار DBCC TRACEON در این مثال آمده است. می‌تواند تعداد بسیار زیادی Lock ایجاد کند و حتی به دلیل کمبود Memory برای Lock Allocation موجب Error شود؛ با احتیاط شدید استفاده شود.

Figure 5-5 Result مربوط به اجرای Script را، در حالتی که Trace Flag دیگری تغییر نکرده، نشان می‌دهد. DBCC TRACEON و DBCC TRACEOFF Result Set ندارند و فقط Message مربوط به موفقیت یا Error نمایش می‌دهند.

Figure 5-5 — نتایج DBCC TRACESTATUS.

Figure 5-5 — شکل/تصویر منبع، صفحه PDF 161
PAGE-162

محدودیت DBCC TRACEON حتی در Scope سراسری این است که Settingها موقت‌اند و بعد از Restart باقی نمی‌مانند. برای تغییر دائمی باید Startup Parameter برابر -T را روی SQL Server Service تنظیم کرد.

Startup Parameterها در SQL Server Configuration Manager قابل تنظیم‌اند. با انتخاب Database Engine Service و تب Startup Parameters می‌توان Parameter اضافه یا حذف کرد. Figure 5-6 نمونه تنظیم Trace Flag 809 را نشان می‌دهد؛ اثر این Flag در بخش Hybrid Buffer Pool توضیح داده می‌شود.

Figure 5-6 — Startup Parameters.

Figure 5-6 — شکل/تصویر منبع، صفحه PDF 162
PAGE-163

اگر Instance روی Windows Server Core باشد یا بخواهید Configuration را Script کنید، PowerShell Listing 5-8 همان نتیجه را می‌دهد. Instance Name و Trace Flag در دو Variable اول مشخص می‌شوند و در صورت نیاز می‌توان آن‌ها را Parameterize کرد. Script ابتدا Registry Path مربوط به Startup Parameterها را پیدا می‌کند، تعداد Argumentهای موجود را می‌شمارد تا شماره بعدی تعیین شود و سپس Argument جدید را با Trace Flag لازم اضافه می‌کند.

Listing 5-8 — پیکربندی Trace Flag در Windows Server Core

# Define initial variables
$InstanceName = "PROSQLADMINCORE"
$TraceFlag = "809"
# Configure full service name to be inserted into Registry path
$Instance = "MSSQL12.$InstanceName"
#Create full registry path
$RegistryPath = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL ServerMSSQL12.$InstanceName\MSSQLServer\Parameters"
# Gather all properties from the Registry path
$Properties = Get-ItemProperty $RegistryPath
# Count the number of SQLArg properties that already exist so that the next 
# number in sequence can be determined
$Arguments = $Properties.psobject.properties | ?{$_.Name -like 'SQLArg*'} | 
select Name, Value
# Create the name of the new argument based on the next argument number in sequence
$NewArgument = "SQLArg"+($Arguments.Count)
PAGE-164

ادامه Listing 5-8

# Construct the complete value of the argument
$FullTraceFlag = "-T$TraceFlag"
# Set the trace flag
Set-ItemProperty -Path $RegistryPath -Name $NewArgument -Value $FullTraceFlag

Trace Flagهای زیادی را می‌توان Startup Parameter کرد و بیشتر آن‌ها فقط در شرایط بسیار خاص مفیدند. چند مورد کاربرد عمومی‌تری دارند.

نکته: در نسخه‌های قدیمی SQL Server، Trace Flagهای T1117 و T1118 بسیار رایج بودند. T1117 باعث می‌شد Fileهای یک Filegroup با نرخ مشابه Grow کنند و T1118 همه Extentها را Uniform می‌کرد. این قابلیت‌ها اکنون گزینه‌های مستند در سطح Database هستند؛ بنابراین T1117 و T1118 دیگر اثری ندارند و نباید استفاده شوند.

Trace Flag 3042

در Backup Compression، SQL Server با الگوریتم Preallocation درصدی از اندازه Database را از ابتدا برای Backup File رزرو می‌کند که Performance را بهتر می‌کند. اگر حفظ فضای Disk روی Backup Volume مهم‌تر باشد، Trace Flag 3042 این رفتار را غیرفعال می‌کند تا File فقط در صورت نیاز Grow شود.

Trace Flag 3226

به‌طور پیش‌فرض هر Backup موفق Message‌ای در SQL Server Error Log ثبت می‌کند. در Log Backupهای بسیار مکرر این پیام‌ها Noise زیادی ایجاد می‌کنند و Troubleshooting را دشوار می‌سازند. Trace Flag 3226 پیام Backup موفق را Suppress می‌کند و Log کوچک‌تر و قابل مدیریت‌تری به‌دست می‌دهد. روش دیگر این است که با sys.xp_readerrorlog Log را خوانده، Result را در Table ذخیره و فقط Eventهای مهم را Filter کنید.

امتیاز کاربران به این مقاله

☆☆☆☆☆

0 نفر امتیاز داده اند. میانگین: 0.0 از 5

 

0 نظر

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

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

0 / 500