လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI :: Kill function ကိုအသုံးပြုသောအခါ connection connection ကြောင့်ဖြစ်ပေါ်လာသောခြွင်းချက်များကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း

MySQLI :: Kill function ကိုအသုံးပြုသောအခါ connection connection ကြောင့်ဖြစ်ပေါ်လာသောခြွင်းချက်များကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း

gitbox 2025-06-07

PHP ကို ​​အသုံးပြု. MySQL ဒေတာဘေ့စ်တစ်ခုကို operating လုပ်သည့်အခါ MySQLI :: Kill နည်းလမ်းကိုသတ်သတ်မှတ်မှတ်ဆက်သွယ်မှုချည်ကိုရပ်ဆိုင်းရန်အသုံးပြုသည်။ သို့သော် developer များအသုံးပြုစဉ်အတွင်းပြ a နာတစ်ခုကြုံတွေ့ရနိုင်သည် ဤဆောင်းပါးသည်၎င်း၏အပြုအမူနိယာမကိုခွဲခြမ်းစိတ်ဖြာပြီး connection roundss များကိုရှောင်ရှားရန်မှန်ကန်သောနည်းလမ်းကိုပေးလိမ့်မည်။

MySQLI :: Kill ကဘာလဲ

MySQLI :: KULL Method ၏ function သည်သတ်မှတ်ထားသောချည် (ချည် ID) မှကိုယ်စားပြုသည့်ဆက်သွယ်မှုကိုရပ်ဆိုင်းရန် MySQL server သို့ CAZE command ကိုပို့ရန်ဖြစ်သည်။ အခြေခံအသုံးပြုမှုမှာအောက်ပါအတိုင်းဖြစ်သည် -

 $mysqli = new mysqli('localhost', 'user', 'password', 'database');
$thread_id = 12345;
$mysqli->kill($thread_id);

ဤနေရာတွင် $ Thread_id သည် များသောအားဖြင့်လက်ရှိဆက်သွယ်မှုကိုယ်နှိုက်၏ချည်မှချည်မျှင်မဟုတ်သော်လည်းအောက်ပါနည်းလမ်းဖြင့်ရရှိသောအခြားဆက်သွယ်မှုများ၏ ID ကိုသတိပြုသင့်သည်။

 $thread_id = $mysqli->thread_id;

သတ်မည် () မိမိကိုယ်ကိုသတ်သေမည်လော။

အဖြေမှာ - မဟုတ်ပါ, သင်အစပြုလုပ်ဆောင်ခြင်းကိုမပြုလုပ်ပါကမဟုတ်ပါ။

MySQLi-> Kill ($ thread_id) နှင့် $ thread_ID ဟုခေါ်သည့်အခါ $ thread_id သည်လက်ရှိဆက်သွယ်မှု၏ချည် id ကိုခေါ်ပါကသင်၏ဆက်သွယ်မှုကိုချက်ချင်းပြတ်တောက်စေလိမ့်မည်။ နောက်ဆက်တွဲဒေတာဘေ့စ်လုပ်ငန်းများသည်အောက်ပါနှင့်ဆင်တူသောအမှားတစ်ခုဖြစ်ပေါ်လိမ့်မည်။

 MySQL server has gone away

ဥပမာ -

 $mysqli = new mysqli('localhost', 'user', 'password', 'database');
$mysqli->kill($mysqli->thread_id); // ကိုယ့်ကိုယ်ကိုသတ်သေမှု
$mysqli->query("SELECT 1"); // ခြွင်းချက်တစ်ခုဒီမှာပစ်ချလိမ့်မည်

အကယ်. သင်သည်အခြားချည်ကိုရပ်စဲလိုပါကအခြားဆက်သွယ်မှုတစ်ခုမှ Thread_id ကို သေချာအောင်လုပ်ပါ။

မှန်ကန်စွာအသုံးပြုမှုဇာတ်လမ်း - အခြားဆက်သွယ်မှုများကိုသတ်ပစ်ပါ

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

 // ဆက် A:执行任务的ဆက်
$connA = new mysqli('localhost', 'user', 'password', 'database');
$task_thread_id = $connA->thread_id;

// ဆက် B:管理ဆက်
$connB = new mysqli('localhost', 'admin', 'admin_pass', 'information_schema');
$connB->kill($task_thread_id); // သတ်ဖြတ် A 的ဆက်

ဤနည်းလမ်းသည်စီမံခန့်ခွဲမှုချိတ်ဆက်မှုသည်အချိန်တိုင်းတွင်ပုံမှန်ဖြစ်နေဆဲဖြစ်ပြီး,

ပုံမှန်မဟုတ်သောကြားဖြတ်ကိုရှောင်ရှားရန်အကြံပြုချက်များ

  1. ကိုယ့်ကိုယ်ကိုသတ်ရန် kill () ကို မသုံးပါနှင့် ။ ID သည် TANT Connection ထက် ID သည် target connection မဟုတ်ကြောင်းစစ်ဆေးရန် $ MySQLI-> thread_id ကို သုံးပါ။

  2. ဆက်သွယ်မှုအခြေအနေကိုခွဲခြားသိမြင်ခြင်း - ဒေတာဘေ့စ်ဆက်သွယ်မှုမျိုးစုံကိုအသုံးပြုသောအခါ၎င်းတို့၏ရည်ရွယ်ချက်ကိုခွဲခြားရန် connection transactions များကိုရှင်းရှင်းလင်းလင်းဖော်ပြရန်အကြံပြုသည်။

  3. catch rocesss : try-catch or mysqli_report (MySQLI_REPORD_EREPORD) ကိုသုံးပါ (MySQLI_REPORD_EREPORD) ကိုသုံးပါ။

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
    $mysqli = new mysqli('localhost', 'user', 'password', 'database');
    $mysqli->kill(99999); // 假设是目标ဆက်
} catch (mysqli_sql_exception $e) {
    error_log("Kill failed: " . $e->getMessage());
}

အမှန်တကယ်ကိစ္စ - Connection Pool မှခြွင်းချက်ချိတ်ဆက်မှုများကိုတက်ကြွစွာချိတ်ဆက်ခြင်း

တခါတရံတွင် Gitbox.net မှပေးသောပုဂ္ဂလိကဆက်သွယ်မှုရေကန်ကဲ့သို့သော connection pooling 0 န်ဆောင်မှုများကိုကျွန်ုပ်တို့အသုံးပြုသည်။ Connection Pool တွင်ဆက်သွယ်မှုအချို့ကိုဆိုင်းငံ့ထားသည့်အခါနောက်ခံစောင့်ကြည့်လေ့လာခြင်း 0 န်ဆောင်မှုသည်အရင်းအမြစ်များကိုတက်ကြွစွာဖြန့်ချိရန် Kill () ကို အသုံးပြုရန်ကြိုးစားနိုင်သည်။ ဒီအခြေအနေမှာစီမံခန့်ခွဲမှုဆက်သွယ်မှုတွေကြောင့်အသတ်ခံရတာကိုရှောင်ရှားနိုင်ဖို့ Connection pool ဟာစီးပွားရေးချိတ်ဆက်မှုနဲ့မတူတဲ့အကောင့်ကိုအသုံးပြုလေ့ရှိပြီး,

 $admin = new mysqli('gitbox.net', 'admin', 'pool_pass', 'mysql');
$admin->kill($stale_thread_id);

ဤနည်းအားဖြင့်အရင်းအမြစ်များကိုလုံခြုံစွာနှင့်ထိရောက်စွာစီမံနိုင်သည်။

အကျဉ်းချုပ်

  • MySQLI :: Kill သည် အသုံး 0 င်သော်လည်းအန္တရာယ်ရှိသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။

  • သင်၏ဆက်သွယ်မှုကိုမသတ်နိုင်သရွေ့လက်ရှိဆက်သွယ်မှုကိုပုံမှန်မဟုတ်သောကြားဖြတ်မှုကိုဖြစ်ပေါ်စေလိမ့်မည်မဟုတ်ပါ။

  • လုံခြုံစိတ်ချရသောအသုံးပြုရန်အတွက်ပစ်မှတ်ချည်သည်အခြားဆက်သွယ်မှုတစ်ခုမှဆင်းသက်လာကြောင်းသေချာပါစေ။

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

ဆက်စပ်မှုစီမံခန့်ခွဲမှုစီမံခန့်ခွဲမှုမဟာဗျူဟာများကိုကျိုးကြောင်းဆီလျော်စွာဒီဇိုင်းရေးဆွဲခြင်းဖြင့် 0 န်ဆောင်မှုများ၏တည်ငြိမ်မှုနှင့်ယုံကြည်စိတ်ချရမှုကိုထိန်းသိမ်းထားစဉ် သတ်မှု () စွမ်းရည်ကိုအပြည့်အဝအသုံးချနိုင်သည်။