مقدمه:
در این قسمت میخواهیم ادامه کتاب Pro Sql server 2019 را بررسی کنیم . دو فصل اخر کتاب بیشتر بر روی قابلیت هایی اشاره می کند که می توانیم در SQL SERVER استفاده کنیم. لذا شناخت دقیق این قابلیت ها به ما در نحوه صحیح پیاده سازی آنها کمک بسیار خواهد کرد. این بخش می خواهیم فصل سوم کتاب به همراه سرفصل های آن را مورد بررسی قرار دهیم :
- Part III: Security, Resilience, and Scaling Workloads
- Chapter 10: SQL Server Security Model
- Chapter 11: Encryption
- Chapter 12: Backups and Restores
- Chapter 13: High Availability and Disaster Recovery Concepts
- Chapter 14: Implementing AlwaysOn Availability Groups
- Chapter 15: Implementing Log Shipping
- Chapter 16: Scaling Workloads
در فصل دهم میخوانیم:
این فصل که با هدف معرفی انواع سطوح دسترسی، به عنوان بخش سوم کتاب شروع میشود ، عمدتا با مباحث سطوح دسترسی ها و شناخت دقیق ساختار سلسله مراتبی آن آشنا می شویم. در بحث دسترسیها با توجه به مدلهای مختلفی که در SQL SERVER شاهد هستیم، میتوانید سطوح دسترسی کاربران از سطح سرور تا سطح ابجکتهایی که کاربر با ان قرار هست کار کند را تخصیص دهید. مبحث دسترسیها در این کتاب به شکل درختی توضیح داده است که فهم آن به اسانی صورت گیرد. همچنین پس از این که این سطوح دسترسی به کاربر مورد نظر مشخص شد، میتوانید از قابلیت Audit برای بررسی کلیه فعالیتهای انجام شده توسط کاربر مطلع شوید. در ادامه کتاب به این موضوع پرداخته است که تنظیمات مرتبط با بحث Audit که مرتبط با Eventهای مختلف هست به شکل اعمال میشود. در ادامه یکی از گزارشاتی که برای اسیبپذیریهای احتمالی در SQL SERVER هست و تحت عنوان گزارشی به اسم Vulnerability Assessment است، میتوانید متوجه این اسیبپذیریها شوید و در جهت رفع ان اقدام کنید. مطالعه این فصل از این جهت با اهمیت هست که با مباحث امنیت در دیتابیس به خوبی آشنا شوید و از اعمال دسترسیهای اضافی در سطح سرور جلوگیری کنید. با توجه به این که در این فصل مبحث Audit به صورت اجمالی بررسی شده و صرفا چند مثال ساده از ان ارایه شده است، نیاز هست که شناخت دقیقتری نسبت به Eventها و دستهبندی هر یک از انها داشته باشیم. این دستهبندی در سایت ماکروسافت به شکل زیر مطرح شده است:
- Audit Add DB User Event Class
- Audit Add Login to Server Role Event Class
- Audit Add Member to DB Role Event Class
- Audit Add Role Event Class
- Audit Addlogin Event Class
- Audit App Role Change Password Event Class
- Audit Backup and Restore Event Class
- Audit Broker Conversation Event Class
- Audit Broker Login Event Class
- Audit Change Audit Event Class
- Audit Change Database Owner Event Class
- Audit Database Management Event Class
- Audit Database Mirroring Login Event Class
- Audit Database Object Access Event Class
- Audit Database Object GDR Event Class
- Audit Database Object Management Event Class
- Audit Database Object Take Ownership Event Class
- Audit Database Operation Event Class
- Audit Database Principal Impersonation Event Class
- Audit Database Principal Management Event Class
- Audit Database Scope GDR Event Class
- Audit DBCC Event Class
- Audit Fulltext Event Class
- Audit Login Change Password Event Class
- Audit Login Change Property Event Class
- Audit Login Event Class
- Audit Login Failed Event Class
- Audit Login GDR Event Class
- Audit Logout Event Class
- Audit Object Derived Permission Event Class
- Audit Schema Object Access Event Class
- Audit Schema Object GDR Event Class
- Audit Schema Object Management Event Class
- Audit Schema Object Take Ownership Event Class
- Audit Server Alter Trace Event Class
- Audit Server Object GDR Event Class
- Audit Server Object Management Event Class
- Audit Server Object Take Ownership Event Class
- Audit Server Operation Event Class
- Audit Server Principal Impersonation Event Class
- Audit Server Principal Management Event Class
- Audit Server Scope GDR Event Class
- Audit Server Starts and Stops Event Class
- Audit Statement Permission Event Class
به عنوان مثال زمانی که آیتم Audit Database Object Management Event Class مورد بررسی قرار میگیرد ، می توانیم کلیه عملیات مرتبط CREATE, ALTER, or DROP را که توسط کاربر یا گروه خاصی اجرا می شود را مشاهده کنیم . هر کدام از این مواردی که در لیست بالا اشاره شد شامل توضیحات مختلفی هست که میتوانید در سایت ماکروسافت ، توضیحات هر یک را مطالعه فرمایید .
در فصل یازدهم میخوانیم :
مبحث رمزنگاری در دیتابیس یکی از مباحث جذابی هست که باید مورد توجه مدیران دیتابیس قرار بگیرد . سناریو ایی را در نظر بگیرید که ، فایل های دیتابیس شما برداشته می شود و در سرور جدید Restore می شود . اطلاعاتی را در نظر بگیرید که از درجه اهمیت بالایی برخوردار هستند و نمی خواهید که افراد مختلف به ان دسترسی داشته باشند یا فقط به بخشی از ان دسترسی داشته باشند . کلیه این موارد و روش هایی که می توانید برای بالا بردن امنیت اطلاعات دیتابیس ، در نظر بگیرید در این فصل توضیح داده شده است . شروع این مبحث در این فصل بدین شکل بوده است که سلسله مراتب رمزنگاری در سطوح مختلف در ابتدا توضیح داده شده است . سپس با استفاده از اسکریپت های مختلف ، هر کدام از روش هایی که در سطوح مختلف برای بالابردن امنیت اطلاعات مطرح شده ، پیاده سازی شده است .
در فصل دوازدهم میخوانیم:
یکی از مهمترین وظایف هر مدیر پایگاه داده، این هست که درک درست و اصولی نسبت به مباحث Backup/Restore داشته باشد. در بحث Backup/Restore یکی از مهمترین مباحث، درک درست از حالت Recovery model دیتابیس هست. حالتهای مختلف در این قسمت، عمدتاممکن است در سناریوهای مختلف مورد استفاده قرار گیرد. بر فرض، شرکتی از نرمافزار فروش و حسابداری استفاده میکند و شرکت دیگر بر مبنای تراکنشهای بانکی، اطلاعات خود را ذخیره میکند. شناخت این حالتها در پیادهسازی یک استراتژی مناسب برای این بحث به ما کمک فراوانی خواهد کرد. نویسنده در ادامه کتاب، روشهای مختلف Backup/Restore را مورد بررسی قرار میدهد. تصور کنید که شرکتی دارید که بیش از ۱۰ سال از یک نرمافزار حسابداری استفاده میکند. اصولا تفکیک اطلاعات در سالهای مختلف و Backup گرفتن از اطلاعات قدیمی و ارشیو شده، به صورت روزانه کار اصولی و درستی نیست. به این دلیل که حجم اطلاعات بسیار زیاد شده است و باید این تفکیک اطلاعات حتی در این بحث، با شناخت درستی انجام شود. از طرفی تصور کنید که بخشی از اطلاعات فقط در یک Page، اسیب دیده است و میخواهیم دقیق همان بخش را مورد بررسی قرار دهیم و اطلاعات ان را Restore کنیم. کلیه این مراحلی که در سطوح مختلف، به ازای File groupها، Pageها و یا Object ها میتوانیم این عملیات را انجام دهیم در این فصل مورد بررسی قرار گرفته است. همچنین در اواخر کتاب، نویسنده استراتژی مناسب و اصولی نسبت به تهیه پلنهای بکاپ را مورد بررسی قرار داده است.
یکی از مزیتهای اصلی این کتاب، که در فصلهای قبل نیز به ان اشاره شد، این هست که در هر مرحله، صرفا مباحث به شکل تئوری مورد بررسی قرار نگرفته است. هر مبحث به همراه اسکریپت های مختلف و مثالهای متنوع مورد بررسی قرار گرفته است. لذا در این فصل نیز، شاهد این موضوع هستیم که به عنوان مثال زمانی که مدلهای مختلف Restore کردن دیتابیس را دنبال میکنیم، سینتکسهای ان را میتوانیم مستقیم اجرا کنیم و با خروجی هر یک از دستورات به خوبی اشنا شویم. همچنین بحث Backup / Restore شامل پارامترهای مختلفی هست که به ما این امکان را میدهد در شرایط مختلفی از هر یک به خوبی استفاده کنیم. به عنوان مثال دیتابیسهایی را در نظر بگیرید که بیش از یک ترابایت اطلاعات در خود ذخیره دارند. پلن بکاپ گیری برای این دیتابیسها باید به گونه ایی باشد که در سریعترین زمان ممکن بکاپهای لازم در دیتابیس گرفته شود و از طرفی در سریعترین زمان ممکن نیز Restore کردن اطلاعات ان انجام شود. این که به چه شکل، این زمان را مدیریت کنیم و بیزینس ما با مشکل رو به رو نشود، از جمله مفاهیمی است که بخشی از انها در این کتاب اشاره شده است.
در فصل سیزدهم میخوانیم:
همواره در بیزینسهای بزرگ، یکی از چالشهای که برای مدیران دیتابیس مطرح هست، بحث سرپا ماندن و به عبارتیعدم Down شدن سرورهای عملیاتی هست. به همین دلیل، سیاستهای مختلفی برای پیادهسازی این موضوع در SQL SERVER وجود دارد که بتوانید، در کوتاهترین زمان ممکن، از سرورهای جایگزین برای ثبت و انجام تراکنشها اقدام کنید تا در فرصت مناسب، مشکلی که برای سرور اول پیش امده بود را برطرف سازید. این موضوعات تحت عنوان High Availability and Disaster Recovery شناخته میشود و میتوانید سناریوهای پیادهسازی و دلایلی که حتما باید در سازمانهای بزرگ این کار انجام میشود را در این فصل مطالعه کنید. دقت داشته باشید که مباحث HA به روشهای مختلفی، میتواند پیادهسازی شود. در این کتاب عمدتا این موارد به شکل تئوری مطرح شده است چرا که بسیار جزییات ریز و دقیقی را باید در سرورهای ثانویه و پیادهسازی این موارد، دنبال کنید.
در فصل چهاردهم میخوانیم:
این فصل در راستای توضیحاتی که در قسمت قبل مطرح شد ، پیاده سازی یکی از روش های HA را به شما توضیح می دهد . این روش ، بسیار روش منعطف و کارامدی در مبحث HA هست و تحت عنوان AlwaysOn Availability Groups شناخته می شود . در این روش ، کپی دیتابیس به صورت انلاین و کاملا سینک شده بر روی یک یا چند سرور مختلف اعمال می شود تا در صورت بروز مشکل برای سرور اصلی ، بدون هیچ وقفه ایی ، سرور ثانویه در مدار قرار بگیرد که سرویس دهی به کاربران مختلف ، همراه با وقفه نباشد . همچنین لزوما بدین شکل نیست که کلیه این سرور ها حتما باید از زیر ساخت ماکروسافت استفاده کرده باشد . می توانید سرور های ثانویه خود را در بستر لینوکس پیاده سازی کنید که راهنمای ان در بخش انتهایی کتاب امده است .
در فصل پانزدهم میخوانیم :
یکی از روش های دیگری که در مبحث disaster recovery می توانیم پیاده سازی کنیم ، استفاده از Log Shipping هست . در واقع همان طور که از اسم آن مشخص هست ، در این روش ملاک سینک شدن اطلاعات در سرور های مختلف ، بر اساس لاگ ثبت شده در LDF هست . قبل از مطالعه این بخش ، نیاز هست که درک خوبی نسبت به روش های بکاپ گیری و مدل های مختلف ان داشته باشید ، سپس این فصل را مطالعه کنید . کلیه روش هایی که برای مباحث HA مورد بررسی قرار گرفته است ، باید مانیتور و نگهداری شود . لذا ماکروسافت ، علاوه بر پیاده سازی روش های مختلف ابزار های مختلفی برای مانیتور کردن وضعیت سرور ها در اختیار شما قرار داده است که می توانید از View های سیستمی که در قسمت های قبل معرفی شد نیز استفاده کنید .
در فصل شانزدهم میخوانیم:
در این فصل تمرکز نویسنده بر روی سه موضوع database snapshots, replication, and AlwaysOn Availability Groups هست . در واقع این فصل بدین شکل معرفی شده است که بر اساس مقیاس پذیری عمودی و افقی بتوانیم Workload های مختلف بر روی سرور ایجاد کنیم . بخش عمده این فصل با تمرکز بیشتری موضوع replication را مورد بررسی قرار می دهد و انواع مختلفی که برای این قابلیت می توان پیاده سازی کرد را بررسی می کند . نویسنده در مورد کاربرد هر کدام از این موارد ، و این که در چه سناریو هایی مورد استفاده قرار میگیرد ، به همراه اسکریپت های مختلف ، حالت های ان را بررسی می کند . به عنوان مثال ، یکی از کاربرد هایی که در این فصل در این خصوص معرفی می شود ، برای زمانی هست که بخواهید ، سیستم های گزارش گیری داشته باشید و یا کلاینت ها های مختلف در نقاط جغرافیایی مختلف بخواهند از سرور مرکزی اطلاعاتی را دریافت کرده یا به ان ارسال کنند .
در این بخش میخواهیم فصل چهارم کتاب به همراه سرفصل های آن را مورد بررسی قرار دهیم . تمرکز اصلی این فصل بر روی مباحث Performance ایی در دیتابیس هست . البته این سرفصل ها هر کدام به تنهایی ، شامل منابع و رفرنس های مختلفی هست و عمدتا نکات مختلفی در بر دارند . لذا پیشنهاد می شود که علاوه بر مباحثی که در این قسمت مطرح می شود نسبت به سایر کتاب هایی که در رابطه با Tuning کوئری ها و بعضا تنظیمات سرور جهت افزایش Performance هست غافل نشوید .
- Part IV: Performance and Maintenance
- Chapter 17: SQL Server Metadata
- Chapter 18: Locking and Blocking
- Chapter 19: Extended Events
- Chapter 20: Query Store
- Chapter 21: Distributed Replay
- Chapter 22: Automating Maintenance Routines
- Chapter 23: Policy-Based Management
- Chapter 24: Resource Governor
در فصل هفدهم میخوانیم:
در این فصل با مفهومی به اسم متادیتا اشنا می شویم. اگر بخواهیم به صورت خلاصه این مفهوم را توضیح دهیم می توان بدین شکل گفت که دیتایی که در خصوص دیتا موجود اطلاعات تکمیلی به ما ارایه می دهد . اگر به خاطر داشته باشید در مبحث Query Store این موضوع مورد بررسی قرار گرفت که Catalog views هایی وجود داشتند که امار پلن ها ، اجرای کوئری ها ، متن کوئری ها و غیره را به ما ارایه می دادند .
- Catalog views
- Information schema views
- Dynamic management views and functions
- System functions
- System stored procedures
نویسنده در ادامه این موضوع هر یک از این مفاهیم را با جزییات بیشتری توضیح داده است . به عنوان مثال در مبحث Catalog views برای هر قابلیتی که در SQL SERVER وجود دارد موارد مرتبط با تشریح می کند . البته بررسی هر کدام از این موارد بسیار زیاد هست . لذا مهمترین ها در هر قسمت ارایه شده است
- AlwaysOn Availability Groups
- Change data capture
- Change tracking
- Common language runtime (CLR)
- Database mirroring
- Databases
- Execution
- Extended events
- FILESTREAM and FileTable
- Full-text search and semantic search
- Geo-Replication
- Indexes
- I/O
- Memory-optimized tables
- Objects
- Query notifications
- Replication
- Resource Governor
- Security
- Server
- Service broker
- Spatial
- SQL Data Warehouse and PDW
- SQL Server operating system
- Stretch Databases
- Transactions
در ادامه بحث ، کاربرد متا دیتا تشریح شده است که در چه زمان هایی می توانیم از ان ها استفاده کنیم . به عنوان مثال زمانی که بخواهیم به منظور Troubleshooting and Performance Tuning بر روی سرور کار کنیم با چه DMV های سیستمی می توانیم اطلاعات جامع و کاملی به دست آوردیم . لذا مطالعه این بخش دید بسیار دقیقی به شما ارایه خواهد کرد که از امکاناتی که در اختیار دارید برای بررسی مسائل و موضوعات مختلف بهره مند شوید .
در فصل هجدهم میخوانیم:
به صورت کلی ، مفهوم Blocking در دیتابیس ها امری طبیعی هست و جزو ماهیت دیتابیس هست . در واقع نمیتوان به این شکل گفت که این مشکل به صورت کلی قابل برطرف شدن هست . میتوانیم با انجام کارهایی زمان فریز شدن یک ابجکت را کمتر کنیم تا منابع ان در اختیار سایر قسمت ها قرار بگیرد . در این فصل مفاهیم مرتبط با این موضوع ارایه شده است که بسته به سناریو ایی که در حال استفاده از ان هستیم رفتار دیتابیس را به چه شکل تعیین کنیم . زمانی برای ما مهم هست که عملیات نوشتن نسبت به خواندن تقدم بالایی پیدا کند و زمانی برعکس ، عملیات خواندن باید با اولویت بالاتری اجرایی شود . زمانی هست که بدون هیچ حالت سختگیرانه ایی بیزینس را پیش میبریم و عملیات خواندن و نوشتن ، نسبت به یکدیگر اولویت بالایی ندارند . برای این موضوع 5 حالت داریم که هر یک رفتار Engine را به سمت خاصی هدایت می کند . همچنین در این بحث ، نکات مهمی در خصوص انواع Locking وجود دارد که نیاز هست حتما سلسله مراتب هر یک را به خوبی درک کنید با با انواع حالت ان به خوبی اشنا شوید . البته این فصل خیلی مختصر در این خصوص صحبت کرده است و به صورت دقیق بعضی قسمت ها را توضیح نداده است . به همین دلیل پیشنهاد می شود در کنار این فصل ، کتاب Expert SQL Server Transactions and Locking را حتما مطالعه فرمایید . در این کتاب ، قبل از ورود به مبحث Locking ، ابتدا ساختار جداول و جداول سیستمی و ایندکس ها به همراه موارد دیگر که جزو پیشنیاز های این مبحث هستند به خوبی بررسی شده است سپس این مفاهیم تشریح می شود . همچنین اسکریپت هایی که برای پیدا کردن Locking می توانید اجرا کنید در این کتاب به خوبی بررسی شده است . لینک دسترسی به اسکریپت های این کتاب در انتهای این مقاله در دسترس شما قرار خواهد گرفت .
نویسنده این کتاب، در کتاب دیگری که مباحث مرتبط با Locking را مورد بررسی قرار داده است، تاکید زیادی بر روی این موضوع داشته است که عمدتا مشکلات مرتبط با بحث Locking بر رویعدم درست نوشتن کوئری و یا حتیعدم شناخت مناسب از ان فرایند است. این موضوع را در مثالهای مختلفی به شما نشان میدهد که استفاده از هر ستونی در قسمت فیلترهای کوئری ممکن است منجر به خواندن کل اطلاعات و درگیر شدن آن در حافظه باشد. به همین دلیل در این بین مشکلاتی را شاهد هستید که دیتا خوانده شده به هیچ عنوان نباید در حین خواندن دستخوش تغییر شود. به همین دلیل بعد از این که این کتاب را مطالعه کردید نیاز هست که مباحث مرتبط با SQL SERVER Performance tuning را نیز دنبال کنید و با ساختار درست نوشتن کوئریها به خوبی اشنا شوید. بعضا تحلیل پلنهای اجرایی دید بسیار شفافی از پلنهای اجرایی به ما ارایه خواهد کرد. لذا میتوانید مقاله بررسی کتابهای تخصصی (قسمت اول) که به تازگی در سایت نیک اموز منتشر شده است را مطالعه بفرمایید تا با ساختار آن کتاب نیز به خوبی آشنا شوید. پس همان طور که شاهد هستید، این موضوع وابستگیهای مختلفی به قسمتهای مختلف دیتابیس دارد و باید با پیش نیازهای آن به خوبی آشنا باشید که در حین تحلیل کردن این موضوعات، عملا دچار بن بست نشوید!
نکته دیگر در خصوص ابزار هایی هست که می توانید برای پیدا کردن این گونه مشکلات استفاده کنید . در این کتاب به صورت جزیی این ابزار ها و قابلیت هایی که در اختیار دارید معرفی شده است ولی در مقاله های مختلف عمدتا به این روش ها می توانید این مشکلات را پیدا کنید :
- sp_who2 System Stored Procedure
- dm_exec_requests DMV
- dm_os_waiting_tasks
- SQL Server Management Studio Activity Monitor
- SQL Server Management Studio Reports
- SQL Server Profiler
ذکر این نکته برای تکمیل این قسمت نیاز هست که علاوه بر روش هایی که در بالا معرفی شده است ، اسکریپت های بسیار خوب و کاربردی برای پیدا کردن این گونه مشکلات توسط اساتید برجسته این حوزه نوشته شده است . به عنوان مثال usp_who5 از جمله اسکریپت های هست که اطلاعات بسیار جامع و دقیقی بابت این مشکلات به شما ارایه می دهد . زمانی که این SP را اجرا کنید اطلاعات زیر را به شما نمایش خواهد داد . همان طور که مشاهده می کنید جامعیت اطلاعاتی که در این اسکریپت هست بسیار می تواند برای ما در تشخیص نوع مشکل کارساز باشد.
- SPID
- Database_Name
- Running
- Blocking
- Status
- Object_Name
- Command
- Threads
- SQL_Statement_Batch
- SQL_Statement_Current
- Isolation_Level
- Wait_Time
- Wait_Type
- Last_Wait_Type
- Elapsed_Time
- CPU_Total
- CPU_Current
- Logical_Reads_Total
- Logical_Reads_Current
- Physical_Reads_Total
- Physical_Reads_Current
- Writes_Total
- Writes_Current
- Last_Row_Count
- Allocated_Memory_MB
- Pages_Used
- Transactions
- Transaction_ID
- Transaction_Time
- Transaction_Type
- Transaction_State
- Nesting_Level
- TempDB_Session_Total_MB
- TempDB_Session_Current_MB
- TempDB_Task_Total_MB
- TempDB_Task_Current_MB
- Log_Database_Count
- Log_Records_All
- Log_Reserved_MB_All
- Log_Used_MB_All
- Log_Details
- Lock_Timeout_Seconds
- Lock_Details
- Deadlock_Priority
- SQL_Statement_Batch_XML
- SQL_Statement_Current_XML
- SQL_Handle
- Query_Plan
- Plan_Handle
- Since_SPID_Login
- Since_Last_Batch_Start
- Since_Last_Batch_End
- Command_Pct
- Command_Completion
- Command_Time_Left
- Host_Name
- Login_ID
- Login_Name
- Application_Description
- System_Process
برای دسترسی به این اسکریپت می توانید از طریق لینک زیر اقدام کنید :
https://github.com/amanrajbits/sql/blob/master/Stored_Procedure/usp_who5.sql
در این اسکریپت ، پارامتر های مختلفی برای تنظیم کردن هست که می توانید بر اساس آن مشخص کنید که خروجی مورد نظر شما تحت شرایط خاص ، به شکل نمیاش داده شود .
در فصل نوزدهم میخوانیم:
همان طور که از اسم فصل مشخص هست ، نویسنده به مبحثی در خصوص Extended Events پرداخته است . این موضوع روش جایگزین برای SQL SERVER Profiler به حساب می اید . چرا که سربار استفاده از ان به شدت کاهش یافته و بر اساس یک معماری اصولی و ساختار یافته ایی Event ها را جمع اوری و ذخیره می کند . شروع کتاب بدین شکل هست که Extended Events ها شامل اجزایی هستند که هر کدام پیش نیاز وجود دیگر اجزا به حساب می اید . این اجزا شامل موارد زیر هستند :
- Packages
- Events
- Targets
- Actions
- Predicates
در این فصل، برای این که بیشتر با انواع Event ها اشنایی پیدا کنید ، مثال های بسیار خوبی در خصوص مهمترین Event ها ارایه شده است که می توانید در سرور های عملیاتی از ان به خوبی استفاده کنید . همچنین گروه بندی کردن Event ها و انتخاب هر یک بسته به فیلتر هایی که باید برای ان در نظر گرفته شود و محل ذخیره سازی هر یک از Event ها بسته به Target ایی که برای آن مشخص می کنید. در این فصل مثال های متنوعی ارایه شده است . در مبحث Extended Events ها بیش از 900 Event مختلف وجود دارد که در زمینه های مختلف طبقه بندی شده اند . لذا حتما اسکریپت ها و مثال هایی که در این فصل ارایه شده است را اجرا کنید تا مفاهیم این بخش به خوبی برای شما نمایان شود .
در فصل بیستم میخوانیم:
ویژگی Query store یکی از قابلیت های بی نظیری هست که از نسخه SQL SERVER 2016 شاهد ان هستیم . با استفاده از این ویژگی، میتوانید الگویهایی را کشف کنید که باعث اختلال در عملکرد سیستم میشود. اما قبل از این که به صورت جزییتر وارد این مبحث شویم نیاز هست که برخی از تعاریف را با دقت بررسی کنیم که ایا قابلیتهایی فعلی که در نسخههای قبل نیز وجود داشته است، چه نقاط قوت و ضعفی نسبت به این ویژگی دارند و چرا ماکروسافت تاکید دارد که استفاده از این قابلیت در برطرف مشکلات سیستم نسبت به سایر روشها از اولویت بالاتری برخوردار هست . ماهیت جمع آوری و ذخیرهسازی اطلاعاتی که توسط Query store ذخیره میشود بر اساس یک Baseline است. اما نکته ایی که هست، در خصوص جمع آوری دیتا و اطلاعات، این هست که این ذخیره و جمع آوری دیتاها باید با یک معماری خوبی طراحی شده باشد که حداقل سربار را بر روی سیستم تحمیل کند .
استفاده از Query Store تنظیمات خاصی دارد که باید به درستی انجام شود. همچنین گزارشاتی که به شما ارایه میدهد، که بتوانید در کوتاهترین زمان، مشکلات کوئریها را پیدا کنید. با توجه به این که در این فصل به صورت مختصر این موضوع ارایه شده است و این مبحث بسیار جزییات زیادی به همراه دارد لذا میتوانید از مقالههایی که قبلا در سایت نیک اموز منتشر شده است برای تکمیل محتوای این بخش استفاده کنید. در هر مقاله بخشی از قابلیتهایی این موضوع اشاره شده است که میتوانید از سناریوهای عملیاتی از آن به خوبی استفاده کنید: در مقالههای زیر، علاوه بر این که این قابلیت با جزییات کامل معرفی شده است، مبحث پلنهای اجرایی نیز مورد بررسی قرار گرفته است. پلنهای اجرایی جزو لاینفک Query Store محسوب میشود. در واقع اساس و پایه این تکنولوژی برای این هست که که بر اساس جمع آوری دادههایی که از کوئریهای اجرا شده حاصل میشود، بتوانیم تحلیلهای مناسبی بر روی پلنهای اجرایی داشته باشیم. البته لازم به ذکر هست که ابن گونه پلنها به شکل پلنهای تخمینی مشاهده میشود. یکی از مهمترین موضوعاتی که در مقالات قبلی بدان اشاره شد استفاده از Catalog Viewهایی هست که صرفا برای Query Store میتوانیم داشته باشیم. این Viewها به صورت زیر هستند:
- database_query_store_options (Transact-SQL)
- query_context_settings (Transact-SQL)
- query_store_plan (Transact-SQL)
- query_store_query (Transact-SQL)
- query_store_query_text (Transact-SQL)
- query_store_wait_stats (Transact-SQL)
- query_store_runtime_stats (Transact-SQL)
- query_store_runtime_stats_interval (Transact-SQL)
- query_store_query_hints (Transact-SQL)
کلیه این موارد به صورت کامل در مقالاتی که خدمت شما ارایه شد ، توضیحات هر بخش را به صورت مستقل داراست . لذا صرفا به محتوای این فصل از کتاب نباید بسنده کرد چرا که درحد معرفی به ان پرداخته شده و جزییات هر کدام از این موارد ، اشاره نشده است .
فصل بیست و یکم میخوانیم:
همان طور که در طبقه بندی این سرفصل ها مشاهده کردید ، این فصل نیز جزو فصل های مرتبط با مباحث Performance tuning هست . در این فصل قابلیت Distributed Replay توضیح داده شده است . به صورت خلاصه اگر بخواهیم این قابلیت را معرفی کنیم ، به این شکل می توان گفت که سرویسی هست که برای توزیع بار و تست و ارزیابی عملکرد سرور مقصد مورد استفاده قرار میگیرد . برای کانفیگ و پیاده سازی این سرویس باید سرویس آن به صورت مجزا نصب و راه اندازی شده ، سپس تنظیمات مرتبط با کلاینت ها و سرور مقصد انجام شود . در این بین نیز کنترلری وجود دارد که برای تقسیم این بار از سمت کلاینت ها بر روی سرور مقصد مورد استفاده قرار میگیرد . این قابلیت از نسخه 2012 در SQL SERVER وجود دارد و مبنای معرفی ان بر این اساس بود که چنین قابلیتی بعضا در پروفایلر نیز وجوود داشت ولی به دلیل سربار بسیار بالایی که پروفایلر در محیط های عملیاتی از خود بر جا می گذارد ، این قابلیت ارایه شد که با کمترین سربار بتوانید تست های لازم در خصوص Performance یا عیب یابی سیستم های عملیاتی را انجام دهید . هدف این فصل عمدتا بر روی این موضوع هست که mission-critical workload را بتوانیم به صورت عینی و واقعی شبیه سازی کنیم . لذا این قابلیت این امکان را برای شما به همراه خواهد داشت که Stress test را بر روی این محیط های عملیاتی اجرا کنید .
در این خصوص سایت نیک اموز تحت عنوان مقاله مجزایی ، کلیه مراحل نصب و پیاده سازی و استقرار Distributed Replay را قدم به قدم با تنظیمات هر بخش معرفی کرده است که می توانید از طریق لینک زیر نیز با نحوه کارکرد و مزایایی که برای شما به همراه دارد به خوبی اشنا شوید .
https://nikamooz.com/distributed-replay/
در فصل بیست و دوم میخوانیم:
نویسنده در این فصل بر روی یکی از سرویسهای SQL SERVER تمرکز کرده است و قابلیتهایی که این قسمت میتوانید در اختیار ما قرار دهد را نشان داده است. دستهبندی و طبقهبندی جابها که در این سرویس مشاهده میکنید به شرح زیر هستند. هدف این فصل این نبوده که هر کدام از این سرویسها رو مورد بررسی قرار دهد. بلکه چند قابلیت مهم و کاربردی که میتوانیم در این سرویس استفاده کنیم به ما نشان داده خواهد شد. هدف از ارایه این فصل بدین شکل بوده که کارهای روتین یک DBA به صورت خودکار انجام شود و بتوانید با روشهای مختلفی نسبت به بخشهای مختلف سیستم به موقع اگاهی لازم را کسب کنید.
- SSIS packages
- T-SQL commands
- PowerShell scripts
- Operating system commands
- Replication Distributor tasks
- Replication Merge Agent tasks
- Replication Queue Reader Agent tasks
- Replication Snapshot Agent tasks
- Replication Transaction Log Reader tasks
- Analysis Services commands
- Analysis Services queries
پس از معرفی بخش هایی از لیست بالا در این فصل ، شاهد تنظیمات پارامتر ها و قابلیت هایی که هر کدام در اختیار ما قرار می دهند هستیم . نویسنده تنظیم ایمیل و ارسال نوتیفیکشن را در قسمت بعدی مطرح کرده است که به موقع نسبت به هر رویداد ، اطلاعات لازم و کافی را دریافت کنیم . در ادامه مباحث ALERT و Proxy ها را مطرح کرده است که بتوانیم در این سرویس از ان استفاده کنیم .
پس از معرفی این قسمتها، به یکی از قابلیتهایی که در این خصوص برای هر DBA میتواند مفید باشد اشاره شده است. مسلما در محیطهای عملیاتی ممکن است با یک سرور درگیر نباشیم. سرورهای مختلف برای کارهای مختلف قطعا خواهیم داشت که باید به موقع و در زمان مناسب اجرای هر تسک از اخرین وضعیت ان اطلاع پیدا کنیم. یا به عنوان مثال نیاز هست که چندین دیتابیس مشابه در نقاط مختلف جغرافیایی، تنظیمات مورد نظرشان را از یک دیتابیس واحد دریافت کنند و هر وقت جابها در سرور مبدا تغییراتی داشت، در سرورهای مقصد نیز این تغییرات دریافت شود. به همین دلیل دو موضوع Master Servers و Target Servers را مطرح خواهد کرد. مباحث مرتبط با Configuring the MSX and TSX Servers در این فصل تحت غالب اسکریپتهای مختلف توضیح داده شده است. حتما این فصل را مطالعه فرمایید تا روتینهایی که ممکن است در بعضی از سناریوها به صورت خودکار پیادهسازی کرد را متوجه شوید.
در فصل بیست و سوم میخوانیم:
فصل بیست و سوم این کتاب مبحث بسیار جالبی را ارایه کرده است. موضوعی تحت عنوان Policy-Based Management (PBM). به صورت خلاصه در نظر بگیرید که چندین سرور یا Instanceهای مختلف را تحت مدیریت دارید. یا این که در یک سرور چندین دیتابیس دارید که بخواهید کنترلی بر روی هر کدام از انها داشته باشید. با استفاده از قابلیت Policy-Based Management (PBM) میتوانید قوانینی ایجاد کنید که بر اساس این قوانین سرورهای شما مجاز به فعال یا غیر فعال کردن قابلیتهایی را داشته باشند. به عنوان مثال فرض کنید که در به هیچ وقت نمیخواهید Store procedureهای جدیدی در سیستم ایجاد کنید. یا به عنوان مثال میخواید مطمئن شوید که بعضی از موارد امنیتی به درستی بر روی سرورهای شما اعمال شده باشد. به همین دلیل میتوانید، قوانینی ایجاد کنید که توسط ان کلیه این موارد و چک لیست شما بر روی همه دیتابیسها اعمال شود
البته این قابلیت بی نظیر به همین جا ختم نمی شود و می توانید Policy هایی به شکل سفارشی سازی شده طراحی کنید . در ادامه کتاب با مفاهیمی تحت عنوان Creating an Advanced Policy معرفی شده است و توابعی که در این قسمت معرفی شده است بسیار توابع کاربردی و مفیدی هستند که می توانید دستورات مختلف را در قسمت پالیسی برای ان تعریف کنید . سایت ماکروسافت این دسته بندی را برای این موضوع ارایه کرده است :
- Asymmetric Key Encryption Algorithm
- Backup and Data File Location
- Data and Log File Location
- Database Auto Close
- Database Auto Shrink
- Database Collation
- Database Page Verification
- Database Page Status
- Guest Permissions
- Last Successful Backup Date
- Public Not Granted Server Permissions
- SQL Server 64-bit Affinity Mask Overlap
- SQL Server Affinity Mask
- SQL Server Blocked Process Threshold
- SQL Server Default Trace
- SQL Server Dynamic Locks
- SQL Server Lightweight Pooling
- SQL Server Login Mode
- SQL Server Max Degree of Parallelism
- SQL Server Max Worker Threads for 32-bit SQL Server 2000
- SQL Server Max Worker Threads for 64-bit SQL Server 2000
- SQL Server Max Worker Threads for SQL Server 2005 and above
- SQL Server Network Packet Size
- SQL Server Password Expiration
- SQL Server Password Policy
- Symmetric Key Encryption for User Databases
- Symmetric Key for master Database
- Symmetric Key for System Databases
- Trustworthy Database
- Windows Event Log Cluster Disk Resource Corruption Error
- Windows Event Log Device Driver Control Error
- Windows Event Log Device Not Ready Error
- Windows Event Log Failed I_O Request Error
- Windows Event Log I_O Delay Warning
- Windows Event Log I_O Error During Hard Page Fault Error
- Windows Event Log Read Retry Error
- Windows Event Log Storage System I_O Timeout Error
- Windows Event Log System Failure Error
در هر کدام از موارد بالا، که جزو Best practiceهای سایت ماکروسافت هست، میتوانیم پالیسی ان را نیز فعال کنیم که بر اساس ان تنظیمات را در سرورهای مختلف و حتی دیتابیسهای مختلف اعمال کنیم. لذا حتما این فصل را مطالعه فرمایید و از پالیسیهایی که میتوانید اعمال کنید، بر روی سرورهای عملیاتی خود استفاده کنید. برای آشنایی بیشتر با این موارد میتوانید از سایت زیر سایر توضیحات مرتبط با پالیسیها را مطالعه فرمایید. همچنین میتوانید، تنظیماتی را که انجام دادید را به عنوان خروجی از سیستم دریافت کنید و در سرورهای دیگر بعضا اعمال کنید. در این فصل در خصوص همه این موارد صحبت شده است.
در فصل بیست و چهارم میخوانیم:
یکی از اصلیترین وظایف هر مدیر دیتابیس این هست که منابع سرور را به صورت پیوسته زیر نظر داشته باشد که هدر رفت در بعضی از قسمتها نظیر حافظه یا قسمتهای مختلف سیستم نداشته باشیم. به همین دلیل در این بخش مفهومی تحت عنوان Resource Governor معرفی شده است. با استفاده از Resource Governor میتوانید منابع سرور را به خوبی تقسیمبندی کنید. فرض کنید که که در شرکتی از اپلیکشنهایی مختلفی برای کارهای مختلفی استفاده میشود. به عنوان مثال برای بحث فروش یا پورسانت یا حقوق و دستمزد شرکت و غیره از برنامههای مختلفی استفاده میشود. در سمت دیتابیس، مشخص هست که درخواستها از سمت چه برنامه ایی ارسال میشود. در نتیجه با یک گروهبندی مناسب، بر روی هر کدام از این برنامهها میتوانید میزان تخصیص منابع را تعیین کنید.
همچنین در انتهای این کتاب ، DMV هایی معرفی شده است که می توانید نسبت به منابع استفاده شده از هر گروه ، بررسی های لازم را انجام دهید .در این خصوص در این کتاب به صورت مختصر بعضی از این موارد اشاره شده است . در صورتی که علاقه مند بودید کلیه این DMV ها را مطالعه بفرمایید می توانید مطابق با لیست زیر ، کاربرد هر یک را در این سناریو متوجه شوید . این لیست به شرح زیر هست :
- dm_resource_governor_configuration (Transact-SQL)
- dm_resource_governor_external_resource_pool_affinity (Transact-SQL)
- dm_resource_governor_resource_pool_affinity (Transact-SQL)
- dm_resource_governor_external_resource_pools (Transact-SQL)
- dm_resource_governor_resource_pools (Transact-SQL)
- dm_resource_governor_resource_pool_volumes (Transact-SQL)
- dm_resource_governor_workload_groups (Transact-SQL)
منابع:
https://github.com/Apress/expert-sql-server-transactions-and-locking
https://www.sqlshack.com/different-ways-to-sql-delete-duplicate-rows-from-a-sql-table/
https://www.sqlshack.com/locking-sql-server/
https://github.com/amanrajbits/sql/blob/master/Stored_Procedure/usp_who5.sql
https://github.com/ktaranov/sqlserver-kit/blob/master/Stored_Procedure/dbo.usp_who5.sql
https://www.sqlservercentral.com/scripts/usp_who5
https://nikamooz.com/query-store-part01/
https://nikamooz.com/query-store-part02/
https://nikamooz.com/query-store-part03/
https://nikamooz.com/query-store-part04/