
مقدمه: وقتی Performance دیتابیس دردسرساز میشود…
اگر با Oracle کار کرده باشی، حتماً این سناریو را تجربه کردهای:
«سیستم کند شده، کاربران شاکیاند، اما هیچکس دقیق نمیداند مشکل از کجاست!»
در این شرایط، Trace گرفتن از کل دیتابیس نه منطقی است و نه امن؛
اینجاست که DBMS_MONITOR مثل یک ذرهبین حرفهای وارد عمل میشود.
📌 با DBMS_MONITOR میتوانی:
- فقط همان Session مشکلدار
- یا حتی فقط یک SQL خاص
- یا یک Service اپلیکیشن
را مانیتور کنی، بدون اینکه کل سیستم را تحت فشار بگذاری.
در این مقاله آموزش Oracle در بخش آموزش پکیج های اوراکلی، DBMS_MONITOR را واقعی، کاربردی و حرفه ای یاد میگیری.
اگر DBA یا توسعهدهندهی اوراکل باشی، احتمالاً بارها با این سؤال مواجه شدی:
«چرا این کوئری کنده و دقیقاً چی کار کنم بهتر بشه؟»
اینجاست که پکیج قدرتمند DBMS_ADVISOR وارد بازی میشود؛ پکیجی که مغز متفکر بسیاری از ابزارهای تحلیلی Oracle مثل SQL Tuning Advisor، SQL Access Advisor و Segment Advisor است.
پیشنهاد می کنم این مقاله زیر رو حتما مطالعه کنی.
در این مقاله شما می خوانید
پکیج DBMS_MONITOR چیست؟
DBMS_MONITOR یک پکیج سیستمی در Oracle است که برای فعالسازی Trace هدفمند استفاده میشود.
✅ برخلاف SQL_TRACE قدیمی، این پکیج:
- دقیق
- قابل کنترل
- و مناسب محیط Production است
چرا پکیج DBMS_MONITOR از SQL_TRACE بهتر است؟
| DBMS_MONITOR | SQL_TRACE | ویژگی |
|---|---|---|
| ✅ | ❌ | Trace هدفمند |
| ✅ | ❌ | مناسب Production |
| ✅ | ❌ | SQL_ID خاص |
| ✅ | ❌ | Service-based Trace |
| کامل | محدود | کنترل Wait و Bind |
✅ نتیجه ساده است:
پکیج DBMS_MONITOR انتخاب حرفهایهاست.
پیشنیاز استفاده از پکیج DBMS_MONITOR
دسترسی لازم
GRANT EXECUTE ON DBMS_MONITOR TO your_user;
مسیر فایلهای Trace
SELECT value
FROM v$diag_info
WHERE name = 'Diag Trace';
مانیتور کردن یک Session خاص (Session Trace)
یک کاربر خاص باعث مصرف CPU بالا شده و کل سیستم را کند کرده است.
پیدا کردن SID و SERIAL#
SELECT sid, serial#, username
FROM v$session
WHERE username = 'HR';
فعالسازی Trace
BEGIN
DBMS_MONITOR.SESSION_TRACE_ENABLE(
session_id => ۱۲۳,
serial_num => ۴۵۶,
waits => TRUE,
binds => TRUE
);
END;
/
📌 با این کار فقط همان Session مانیتور میشود.
غیرفعالسازی Trace
BEGIN
DBMS_MONITOR.SESSION_TRACE_DISABLE(
session_id => ۱۲۳,
serial_num => ۴۵۶
);
END;
/
مانیتور کردن SQL خاص با SQL_ID
فعالسازی Trace برای SQL_ID
گاهی فقط یک Query بد کل دیتابیس را زمینگیر میکند.
BEGIN
DBMS_MONITOR.SQL_TRACE_ENABLE(
sql_id => '۶g8f9k2abc123',
waits => TRUE,
binds => TRUE
);
END;
/
✅ مزیت بزرگ:
حتی اگر این SQL توسط چند Session اجرا شود، فقط همان SQL Trace میشود.
غیرفعالسازی
BEGIN
DBMS_MONITOR.SQL_TRACE_DISABLE(
sql_id => '۶g8f9k2abc123'
);
END;
/
مانیتور کردن Service (بهترین روش در محیط های عملیاتی)
در محیط واقعی، اپلیکیشنها معمولاً با Service Name وصل میشوند.
فعالسازی Trace روی Service
BEGIN
DBMS_MONITOR.SERVICE_TRACE_ENABLE(
service_name => 'OLTP_SERVICE',
waits => TRUE,
binds => TRUE
);
END;
/
✅ فقط همان اپلیکیشن مانیتور میشود
✅ بقیه کاربران کاملاً امن هستند
غیرفعالسازی
BEGIN
DBMS_MONITOR.SERVICE_TRACE_DISABLE(
service_name => 'OLTP_SERVICE'
);
END;
/
مانیتور کردن Module و Action (روشی برای Developerها)
تنظیم Module در برنامه
BEGIN
DBMS_APPLICATION_INFO.SET_MODULE(
module_name => 'PAYMENT_APP',
action_name => 'INSERT_ORDER'
);
END;
/
فعالسازی Trace
BEGIN
DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE(
client_id => 'PAYMENT_APP',
waits => TRUE,
binds => TRUE
);
END;
/
📌 این روش برای Debug اپلیکیشنهای Java و NET. فوقالعاده است.
فایل Trace کجاست؟
پیدا کردن SPID
SELECT p.spid
FROM v$process p
JOIN v$session s ON p.addr = s.paddr
WHERE s.sid = 123;
نام فایل
ora_.trc
مسیر:
$ORACLE_BASE/diag/rdbms/.../trace/
تحلیل فایل Trace با TKPROF
tkprof ora_12345.trc output.txt sys=no sort=exeela,fchela
اطلاعات مهم خروجی:
- Execution Plan
- CPU Time
- Physical Reads
- Wait Events
- Bind Variables
سناریوی واقعی از محیط عملیاتی
📌 مشکل: ثبت سفارش کند شده
📌 راهحل DBA حرفهای:
- Trace روی Service اپلیکیشن
- TKPROF
- شناسایی SQL بد
- Index یا Rewrite Query
- حل مشکل بدون Downtime ✅
سوالات متداول درباره پکیج DBMS_MONITOR در اوراکل
پکیجی برای Trace هدفمند Session، SQL و Service در Oracle بدون افت Performance.
بله، اگر محدود و هدفمند استفاده شود کاملاً امن است.
DBMS_MONITOR دقیقتر، سبکتر و مناسب محیط واقعی است.
با فایل Trace و ابزار TKPROF.
جمعبندی
✅ DBMS_MONITOR ابزار طلایی Performance Tuning در Oracle
✅ امن برای محیط های عملیاتی
✅ مناسب DBA و Developer
✅ یادگیری آن = یک مهارت سطح بالا
اگر Oracle کار میکنی، نباید از DBMS_MONITOR غافل شوی.
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید