လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Database Query ကိုရှာဖွေခြင်းမပြုမီနှင့်အပြီးတွင်စနစ်၏ဖိအားကိုရှာဖွေရန် GetUse () ကိုအသုံးပြုနည်း

Database Query ကိုရှာဖွေခြင်းမပြုမီနှင့်အပြီးတွင်စနစ်၏ဖိအားကိုရှာဖွေရန် GetUse () ကိုအသုံးပြုနည်း

M66 2025-06-11

Getueage ဆိုတာဘာလဲ ()

GetUsage () သည်လက်ရှိလုပ်ငန်းစဉ်သို့မဟုတ်ယင်း၏ကလေးဖြစ်စဉ်များကိုအရင်းအမြစ်အသုံးပြုမှုကိုရရှိသော PHP ဇာဇာ function ကိုဖြစ်သည်။ User / Kernel ပြည်နယ် CPU အချိန်, မှတ်ဥာဏ်စာမျက်နှာပျက်ကွက်ခြင်း,

 $usage = getrusage();

အများအပြားအသုံးများသောလယ်ကွင်းများတွင်:

  • ru_utime.tv_sec နှင့် ru_utime.tv_usec : သုံးစွဲသူပြည်နယ် (စက္ကန့်နှင့် microseconds) မှအချိန်ကုန်လွန်သည့်အချိန်

  • ru_stime.tv_sec နှင့် ru_stime.tv_usec : အချိန် System State (စက္ကန့်နှင့် microseconds) တွင်အချိန်ကုန်လွန်ခဲ့သည်။

  • Ru_minflt : disk မှခေါ်ရန်မလိုအပ်သည့်စာမျက်နှာအမှားအယွင်းများ (soft page ပျောက်ဆုံးခြင်း)

  • Ru_majflt : disk မှခေါ်ဆိုသည့်စာမျက်နှာအမှားအယွင်းများ (ခဲယဉ်းပျောက်ဆုံးနေသောစာမျက်နှာများ)

  • ru_nvcsw and ru_nivcsw : စေတနာ့ဝန်ထမ်းနှင့်အတင်းအဓမ္မအခြေအနေများပြောင်းလဲခြင်းအချိန်များ


ဒေတာဘေ့စ်စုံစမ်းမှုမတိုင်မီနှင့်ပြီးနောက် GetUsage () ကိုခေါ်ပါ

စနစ်ပေါ်ရှိဒေတာဘေ့စ်မေးမြန်းချက်များ၏သက်ရောက်မှုကိုစောင့်ကြည့်ရန်တိုက်ရိုက်နည်းလမ်းမှာ -

  1. စုံစမ်းမှုမတိုင်မီတစ်ကြိမ် ရရှိသော getTrusage () logs;

  2. aivel,

  3. စုံစမ်းမှုပြီးနောက်နောက်တဖန် getTrusage () မှတ်တမ်းတင်ပါ;

  4. နှစ်ခုမှတ်တမ်းများအကြားခြားနားချက်နှိုင်းယှဉ်။

နမူနာကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

 function getResourceUsageDiff($start, $end) {
    $diff = [];
    foreach ($end as $key => $value) {
        if (isset($start[$key])) {
            $diff[$key] = $value - $start[$key];
        }
    }
    return $diff;
}

$before = getrusage();

// ဒေတာဘေ့စ်စုံစမ်းမေးမြန်းမှုကို Simulate
$mysqli = new mysqli("localhost", "user", "password", "database");
$result = $mysqli->query("SELECT * FROM users WHERE email LIKE '%@example.com'");

$after = getrusage();

$usageDiff = getResourceUsageDiff($before, $after);

echo "<pre>";
print_r($usageDiff);
echo "
";

ဤကုဒ်သည်စုံစမ်းမှုမှထုတ်လုပ်သောစနစ်အရင်းအမြစ်များကိုပြောင်းလဲနိုင်သည်။ ဥပမာအားဖြင့်, Ru_stime.tv_usec သိသိသာသာတိုးတက်မှုကိုသင်တွေ့မြင်ပါက,


ပိုမိုအလိုလိုသိသောမျက်နှာပြင် - function encapsulation နှင့် logging

ပိုမိုလက်တွေ့ကျသောရည်ရွယ်ချက်များအတွက်တိုင်းတာခြင်းလုပ်ငန်းစဉ်ကို function တစ်ခုသို့ encapsulated လုပ်နိုင်သည်,

 function profileQuery($query, $mysqli) {
    $before = getrusage();

    $result = $mysqli->query($query);

    $after = getrusage();
    $usageDiff = getResourceUsageDiff($before, $after);

    file_put_contents("/var/log/db_profile.log", json_encode([
        'query' => $query,
        'usage' => $usageDiff,
        'time'  => date('c')
    ]) . PHP_EOL, FILE_APPEND);

    return $result;
}

ဤနည်းလမ်းသည်သင့်အား system resolution query ားအနကိုပုံမှန်ယုတ္တိဗေဒကိုစိတ်အနှောင့်အယှက်ဖြစ်စေခြင်းမရှိဘဲစဉ်ဆက်မပြတ်စုဆောင်းရန်ခွင့်ပြုသည်။ နောက်ဆက်တွဲအကောင်းမြင်မှုအတွက်အခြေခံကျသည်။


လက်တွေ့ကျသောလျှောက်လွှာအကြံပြုချက်များ

  1. ကွဲပြားခြားနားသောအညွှန်းကိန်းဖွဲ့စည်းပုံ၏သွဇာလွှမ်းမိုးမှုနှိုင်းယှဉ်

    System Resource အသုံးပြုမှုကိုနှိုင်းယှဉ်ရန်တူညီသောအခြေအနေများနှင့်ကွဲပြားခြားနားသောအညွှန်းကိန်းဖွဲ့စည်းတည်ဆောက်ပုံများနှင့်တူညီသောအခြေအနေများနှင့်ကွဲပြားခြားနားသောအညွှန်းကိန်းဖွဲ့စည်းပုံများကိုအသုံးပြုခြင်းအားဖြင့်သင်အညွှန်းကိန်းချိန်ညှိချက်များသည်ထိရောက်မှုရှိမရှိအလိုအလျောက်အကဲဖြတ်နိုင်သည်။

  2. Batch Query သို့မဟုတ် Big Data Paging Performance
    Pagination သို့မဟုတ် Batch Query ကိုရင်ဆိုင်ရသောအခါ Ru_majflt နှင့် ru_nvcws ကြီးထွားလာခြင်းရှိမရှိကိုလေ့လာခြင်းသည်အမှတ်တရများအနေဖြင့်မှတ်ဥာဏ်အစာခြေခြင်းသို့မဟုတ်အခြေအနေပြောင်းလဲခြင်းကိုအစပျိုးခြင်းရှိမရှိဆုံးဖြတ်နိုင်သည်။

  3. စိတ်ဖိစီးမှုစမ်းသပ်မှုများတွင်အရင်းအမြစ်အသုံးပြုမှုကိုနှိုင်းယှဉ်ခြင်း

    Apache Benchmark, JMeter စသဖြင့် Tools များနှင့် ပူးပေါင်း. တစ်ပြိုင်နက်တည်းစမ်းသပ်ခြင်း, အရင်းအမြစ်သိမ်းပိုက်မှုအပြောင်းအလဲများကိုပြုလုပ်ရန်နှင့်စနစ်၏စွမ်းဆောင်ရည်ကိုမြင့်မားသောဝန်များကိုခွဲခြမ်းစိတ်ဖြာရန်နှင့်ပူးပေါင်းဆောင်ရွက်ရန်နှင့်စနစ်၏စွမ်းဆောင်ရည်ကိုဆန်းစစ်ပါ။


အပိုဆောင်း: output ကို beautify (debugging အတွက်)

အကယ် . သင်သည် GetTrusage တွင်အပြောင်းအလဲများကိုကြည့်လိုပါက debugging လုပ်နေစဉ်အတွင်း browser တွင်ရှင်းရှင်းလင်းလင်းမြင်နိုင်လျှင်အောက်ပါကုဒ်ကို အသုံးပြု. output ကို format လုပ်နိုင်သည်။

 function formatUsage(array $usage) {
    return sprintf(
        "User CPU: %.4fs, System CPU: %.4fs, Major Faults: %d, Voluntary CS: %d",
        $usage['ru_utime.tv_sec'] + $usage['ru_utime.tv_usec'] / 1e6,
        $usage['ru_stime.tv_sec'] + $usage['ru_stime.tv_usec'] / 1e6,
        $usage['ru_majflt'] ?? 0,
        $usage['ru_nvcsw'] ?? 0
    );
}

echo formatUsage($usageDiff);