هزینه (Cost) بالا = کوئریِ (Query) کُند.
بعد از ۲۰ سال کالبدشکافی پلنهای اجرایی (execution plans) و مهندسی عملکرد پایگاه داده، این همچنان رایجترین تصور غلطی است که در بین DBAها و توسعهدهندگان میبینیم.
شما یک explain plan ایجاد میکنید، هزینهای (Cost) برابر با ۵۰۰,۰۰۰ میبینید و وحشت میکنید. یک index hint را تحمیل میکنید، هزینه به ۵۰۰ کاهش مییابد و همه جشن میگیرند، تا زمانی که کوئری در محیط عملیاتی (production) اجرا میشود و دو برابر بیشتر طول میکشد.
واقعیت این است:
هزینه بهینهساز (Optimizer Cost) معیاری برای زمان اجرا نیست.
این هزینه با ثانیه، دقیقه یا ساعت اندازهگیری نمیشود. Cost یک معیار داخلی و بدون واحد است که بهینهساز مبتنی بر هزینه (CBO) از آن برای تخمین میزان منابع سختافزاری (I/O، CPU و حافظه) که یک پلن خاص مصرف میکند، استفاده میکند.
در اینجا نحوه تغییر این دیدگاه برای تیمهای مهندسی شما آمده است:
- هزینه (Cost) صرفاً برای مقایسه داخلی است:
CBO هزینه را محاسبه میکند تا پلن A را با پلن B برای دقیقاً همان کوئری مقایسه کند. شما نمیتوانید هزینه کوئری X را با کوئری Y مقایسه کنید.
- یک پلن با “هزینه بالا” میتواند فوقالعاده سریع باشد:
یک Full Table Scan ممکن است هزینه عظیمی را نشان دهد زیرا نیازمند خواندن بلاکهای زیادی است. اما به لطف خواندنهای چندبلاک (multiblock reads)، اجرای موازی (parallel execution) یا اسکنهای هوشمند Exadata، ممکن است در ۲ ثانیه به پایان برسد.
- یک پلن با “هزینه پایین” میتواند یک تله باشد:
یک Index Range Scan ممکن است هزینه بسیار پایینی را به زیبایی نشان دهد. اما اگر جدول دارای clustering factor وحشتناکی باشد، پایگاه داده مجبور میشود هزاران خواندن فیزیکیِ تصادفی و تکبلاک انجام دهد که باعث میشود کوئری برای ۱۰ دقیقه هنگ کند.
نکته کلیدی برای توسعهدهندگان و DBAها:
تنظیم (tuning) صرفاً برای رسیدن به یک هزینه پایینتر را متوقف کنید. اگر آمارها (statistics) یا کاردینالیتیهای (cardinalities) پایه بهینهساز اشتباه باشند، هزینه پایینتر تضمینکننده پلن بهتر نیست.
به جای خیره شدن به ستون Cost، به معیارهای واقعی که اهمیت دارند نگاه کنید:
زمان سپری شده (Elapsed Time)، خواندنهای منطقی (Logical Reads یا Buffer Gets) و I/O فیزیکی.
در TuneMatrix، تیم متخصصان دارای گواهینامه اوراکلِ ما به مشتریان سازمانی کمک میکنند تا فراتر از معیارهای سطحی نگاه کنند و کشف کنند چه چیزی واقعاً عملکرد E-Business Suite و پایگاه داده آنها را پایین میکشد.
در دادههای ASH/AWR عمیق شوید، سشن (session) را ردیابی (trace) کنید و برای واقعیتِ اجرا تنظیم (tune) کنید، نه بر اساس تخمینهای بهینهساز.
آیا تا به حال کوئریای با هزینه بسیار بالا دیدهاید که در کمتر از یک ثانیه اجرا شود؟ در کامنتها به ما اطلاع دهید. 👇



