Skip to main content

بررسی تخصصی management view های پویا

Understanding dynamic management views

در این درس تخصصی به بررسی عمیق dynamic management views در SQL Server پرداخته می‌شود؛ جایی که با استفاده از viewهایی مانند sys.all_columns و sys.all_objects، کاربران قادر خواهند بود جزئیات مربوط به ساختار اشیاء (مانند جداول، stored procedures و …) را مشاهده و مانیتور کنند. در این آموزش، تفاوت بین user-defined views و system views مورد بررسی قرار گرفته و تکنیک‌های پیشرفته فیلترینگ (مثلاً استفاده از WHERE type = ‘U’) و مرتب‌سازی نتایج با ORDER BY modify_date DESC برای شناسایی تغییرات اخیر و عیب‌یابی سیستم ارائه شده است. هدف از این درس، ارائه رویکردی جامع و کاربردی برای مدیریت و نظارت بر عملکرد SQL Server به گونه‌ای است که متخصصان بازار کار بتوانند به سرعت مشکلات را شناسایی و رفع کنند.

لینک کمکی (official link) – مانیتورینگ پیشرفته SQL Server با DMVs: تسلط بر بهینه‌سازی و رفع خطا – Dynamic Management Views

گروه دیگه از ابزاری که باید هنگام مانیتورینگ و نظارت بر SQL Server 2016 أزشون اگاه باشیم، مدیریت پویای view هاست که در اصطلاح بهشون dynamic management views هم میگن. این سری از view ها، که به صورت اتوماتیک در هر پایگاه داده گنجونده شده، اطلاعاتی درباره مدیریت و عملکرد اون داده ها ارائه میده. بنابراین داخل AdventureWorks 2014، من اون رو باز میکنم و برای این کار کافی هست به view ها یک نگاهی بکنم و هنگامی که view ها رو باز میکنم، یک لیستی از همه view های تعریف شده که توسط کاربرهامون ایجاد شده، میبینم. بد نیست بدونید به اینها، view های user-defined هم میگن چون ممکنه بعد از تعریف شون به عنوان یک داده در دیتابیس توسط کاربرهامون تغییر نام داده شده باشن.

اما بالاتر از همه این view های user-defined، ما یک فولدر برای System Views داریم و اگه من اون رو باز کنم، تعداد خیلی زیادی view میبینم. یکی از متداولترین اونها، که خیلی مورد استفاده قرار میگیره، اونی هست که با حروف sys شروع میشه. برای مثال، ما sys.all_columns رو درست در اینجا داریم. اگه روی اون راست کلیک کنم و گزینه Select Top 1000 Rows رو انتخاب کنم، اون در یک query برای من اجرا میشه که داده رو درباره همه ستونها در همه جدولها در این پایگاه داده بهم برمیگردونه. زمانی که ما به سمت پایین میریم و تا آخر این داده ها اسکرول می کنیم، از این طریق، چیزهایی رو میبینیم که به وضوح به عنوان نام های مختلف ستون ها، اونها رو میشناسیم.

همانندProductID ، ListPrice، ModifiedDate. بنابراین این view شامل اطلاعاتی درباره همه ستونها است، همه ستون هایی که در همه جداول این دیتابیس وجود دارن. شما ممکنه که انتظار داشته باشین که یک مدیریت پویا برای view یا باصطلاح یک dynamic management view هم در اینجا وجود داشته باشه که شامل همه جداول هم بشه. اگرچه این dynamic management view این دیتابیس یک همچین قابلیتی رو دقیقا نداره، اما بجاش چیزی با نام all_objects داره که اونو می تونید درست در اینجا ببینید و اون شامل table ها،  stored proceduresها و بسیاری از ایتم های دیگه هست و بنظر کار راحتی که بخاید بیایید و فقط tables ها رو برای مشاهده جداول درش فیلتر کنید و به نتایج دلخواهتون برسید بنابراین بنظرم بهتر یک نگاهی به این dynamic management view هم بندازیم پس روی sys.all_objects کلیک راست میکنم.

و دوباره از منویی که برام باز میشه Select Top 1000 Rows رو انتخاب میکنم، اگه ما به بالای سمت راست نگاه کنیم، دو ستون میبینیم که type یا همون نوع و اون یکی type description یا همون شرح نوع رو میبینم و type description چیزهایی مانند stored procedures، views،  functionsو user table. رو شامل شده. من همچنین میدونم که type یا نوع user tableها با حرف u مشخص میشن.

بنابراین ما میتونیم پیش بریم و بند WHERE رو برای این query در اس کیو ال مون اضافه کنیم و فقط این نوع رو فیلتر کنیم، یعنی اگر چه یک dynamic management view وجود نداره که بیاد و فقط جداول یا table های این دیتابیس رو بهمون نشون بده ولی dynamic management view های دیگه ای مثل همین  sys.all_objects وجود داره که می تونه ما رو به اون چیزی که مد نظرمون هست برسونه. بنابراین در پایان این query فقط کلمه کلیدی  WHEREرو اضافه میکنم.

نام ستون رو type انتخاب می کنم تا فیلترمون فقط از ستون type انجام بشه و بعدش علامت برابر یا مساوی و بعدش هم با تک کوتیشن که داخل اون حرف بزرگ U هست، میایم و فقط حرف بزرگ U که نمایانگر user table ها هست رو فیلتر می کنیم، و اینطوری خیلی راحت میایم و کدمون رو کمی سفارشی تر می کنیم. این query رو دوباره اجرا میکنم و حالا ما هر چیزی رو که با نوع U برگردونده شده، میبینیم. اگه دقت کنید در ستون type description، الان دیگه فقط USER_TABLE ها دقیقا نام جداولی که میخاستیم، هست و ما میتونیم در میان اونها بچرخیم و یک لیستی از همه جداول این دیتا بیس رو ببینیم. زمانی که به سمت راست میرم، تا به ستونهای دیگه یک نگاهی بندازم.

ما create_date و  modify_dateرو میبینیم، دیگه خوب می دونید که اینها با توجه به فیلتری که چند لحظه پیش انجام دادم دقیقا زمان ایجاد و ویرایش جداول این پایگاه داده هستن. برای من، modify_date خیلی جالب هست. خب، من در کارم معمولا اگه نیاز به عیب یابی داشته باشم؛ معمولا modify_date یا زمان ویرایش جداول میتونه برام مهم و قابل توجه باشه و اون وقت هست که در شرایط عیب یابی سرور modify_date خیلی حائز اهمیت میشه.

بذارید با تعریف یک سناریو این تجربم رو در اختیارتون بذارم: اگه ما یک وضعیتی داشته باشیم که یک پایگاه داده با یک رفتار عجیب و غریب شروع بشه و استارت بخوره، و ما معتقدیم که یک table یا stored procedure، ویرایش شده در ساختار دیتابیس باعث برروز این رفتارهای عجیب و غریب شده، ما میتونیم به این مدیریت پویای view  یا باصطلاح dynamic management view یک sys.all_objects نگاه کنیم و به سرعت، اون table یا stored procedure رو که اخیرا اصلاح شده، خیلی راحت از ستون modify_date فیلتر و پیدا کنیم و فقط یک سری به اونهایی که ویرایش شدن بزنیم و چکشون کنیم تا نهایتا بتونیم عملیات عیب یابی رو خیلی راحت و موفقیت آمیز باتمام برسونیم.

بنابراین برای اینکه تجربه شخصیم رو بصورت عملی در اختیارتون بذارم به query برمیگردیم، بعد از دستور where من میخوام بند  ORDER BYرو که بند مرتب سازی بود، اضافه کنم. بنابراین ORDER BY modify_date رو قرار میدم و تایپش می کنم و میخوام این کار به صورت نزولی باشه، بنابراین اونهایی که اخیرا اصلاح شدن در بالا نمایان داده میشن و نهایتا کار عیب یابی ام خیل راحت تر هم میشه.

بنابراین همونطور که در ویدئو های آموزشی قبلی هم گفتم desc رو قرار میدیم برای اینکه بتونم اون رو به صورت نزولی مرتبش کنم و زمانی که اون رو اجرا میکنیم. ما میتونیم اخرین جدول اصلاح شده رو که xmlTest هست، رو ببینیم که خیلی تعجب اور نیس چون اون یک جدولیه که من برای  AdventureWorks databaseبعد از ایجاد اصلی این دیتابیس اضافه کردم.

پس دیدید که عیب یابی خیلی هم سخت نیست، بنابراین دوباره بهتون میگم، این هم یکی از روال های متداولی هست که من از اون در یک سناریوی عیب یابی استفاده میکنم. اگه ما شک داشتیم، خب به این دلیل که آیا این پایگاه داده ای بود که به تازگی اصلاح شده بود و این هست که باعث ایجاد اختلال در سرور شده و یا اینکه این نیست و ممکنه یک جدول دیگه باشه؛ تنها کاری که برای رفع این ابهامات باید انجام بدیم این هست که، ما به داخل این view میایم و به سرعت اونچه رو که در یک زمان خاص اصلاح شدن رو با روشی که چند لحظه پیش بهتون آموزش دادم پیدا می کنید.

به لیست dynamic management views میریم که تعداد کاملی از اونها الان برای من وجود داره و به اونچه که شما نیاز وعلاقه دارین، بستگی مستقیم داره و سفارشی شده، پس شما بسته به توانایی خودتون باید برای رسیدن به اونچه که مد نظرتون هست أزشون استفاده کنید. شما میتونین اطلاعات خیلی زیادی از اونچه که در  sql serverداره، پیدا کنین. و شک نکنید اونچه که اکثر شما ها بهش نیاز دارید از طریق یکی ازاین dynamic management views در دسترس هست، و فقط کافیه که با اطلاع از اونها ایده خودتون رو راحت تر عملی کنید. در سایت مایکروسافت داکیومنت یا راهنمای کاملdynamic management views ها وجود داره، بنابراین، شما میتونین به اون داکیومنت ها نگاه بندازین و یا اگه هم دوست دارین می تونین همینجا با ران کردن برخی از این dynamic management views ها اونها رو بصورت تست اجرا کنید تا از عملکردشون آگاه بشید، این dynamic management views ها در زمان اجرا به چیزی در پایگاه داده آسیب نمیزنن چون از یک دستور ساده select در مقابل یک view استفاده شده و این دستوراتی هستند که نمیتونه اطلاعاتی رو تغییر یا حذف کنن و نهایتا نمیتونه به پایگاه داده شما آسیبی وارد بکنه.

بنابراین ما میتونیم بر روی هر کدوم از اونها، کلیک راست کنیم و Select Top 1000 Rows رو انتخاب کنیم و دقیقا همون چیزی که میخوایم رو دریافت کنیم. اگه این dynamic management views چیزی هست که ممکنه برای ما جالب باشه، و اگه یک نوع اطلاعات که شما به دنبال اون میگردین دقیقا همون چیزی هست که دارید مشاهده می کنید، یا اگه اطلاعاتی که برای فراخونی یک فایل رو از گذشته فراموش کردید و اون رو الان می بینید، بدونید که اینها تنها بخشی از کاربرد های dynamic management views ها هست، و همگی ممکنه که برای سناریوی عیب یابی در اینده مفید باشن.

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دوره ها
درس ها
Tha PMIS
طهاکو من
0