最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql的啟動過程詳解

 更新時間:2014年08月18日 12:03:07   作者:yzyangwanfu  
這篇文章主要介紹了mysql的啟動過程詳解,本文用生動風趣的文風講解了mysql的啟動過程,絕對讓你難忘哦,需要的朋友可以參考下

有一天,兩個不懂mysql內核的人想去了解mysql內核代碼,兩個人不是去調試代碼、查找資料,而是在那邊思考。因為不了解內核,所以邊思考邊去驗證。
 
使用的mysql代碼是5.1.7,調試環(huán)境是windows平臺下的vs2003。
 
Bingxi:“alex,你覺得mysql的啟動過程會是什么樣的呢?我們以銀行為例吧?!?br /> Alex:“嗯,bingxi。早上銀行開門了,會先準備好環(huán)境,然后開門迎客,mysql也是這樣。Mysql里面會有一個handle_connections_sockets函數,這個函數就好比是個叫號機,每個用戶來了都會取個號,然后就會進行業(yè)務處理?!?br />

復制代碼 代碼如下:
pthread_handler_t handle_connections_sockets(void *arg __attribute__((unused)))
{
  ……
  while (!abort_loop)
  {
    select((int) max_used_connection,&readFDs,0,0,0) < 0) //有連接了則往下來執(zhí)行,否則一直等待
    ……
    accept(sock, my_reinterpret_cast(struct sockaddr *) (&cAddr),&length)  //接受請求
    ……
    create_new_thread(thd);
  }
  //abort_loop=1,則執(zhí)行到這里進行推出。今天業(yè)務不處理了
}

Bingxi:“啊,這里面存在兩種可能的,1)用戶來一個就分配一個工作人員處理,2)將排號的人丟進工作隊列,根據叫號機到指定窗口獲取服務。前者的場景適合于請求量大,并且需要響應速度特別快的情況,但是分配也會有個限制,所謂的最大連接數,這樣的情況常見于互聯網行業(yè),相應地我們可以看到機器的負載變化范圍特別大。同樣的,這也是它的一個弊端,假設每個業(yè)務都復雜(消耗資源型sql語句),同時處理的話,機器會支撐不住,這時候第二種方法就比較好,這種情況屬于事務性場景?!?/p>

Alex:“嗯,是的。Mysql選擇的是前者,oracle提供兩種方法供選擇。我們繼續(xù)往下面的代碼看,如果我們配置了線程緩存,且有可用的緩存,則喚醒該線程,否則創(chuàng)建新的線程?!?br />

復制代碼 代碼如下:

static void create_new_thread(THD *thd)
{
 
    if (cached_thread_count > wake_thread)
    {
      start_cached_thread(thd);
    }
    else
    {
      if ((error=pthread_create(&thd->real_id,&connection_attrib,
                            handle_one_connection,
                            (void*) thd)))
  }
}

Bingxi:“嗯,老楊。是不是理解銀行為客戶分配了一個服務人員,在這段期間一直為該客戶服務。里面有個代碼段,是一直在等用戶下命令。但是有可能網絡,或者被kill掉了,就像一個人存了100,不斷取1塊錢一樣,被保安帶走了。”
復制代碼 代碼如下:

pthread_handler_t handle_one_connection(void *arg)
{
    while (!net->error && net->vio != 0 &&
           !(thd->killed == THD::KILL_CONNECTION))
    {
      net->no_send_error= 0;
      if (do_command(thd))
       break;
    }
}

Alex:“嗯,獲取命令,然后執(zhí)行命令。在dispatch_command函數中,根據不同的客戶請求進行響應的處理,比如開賬戶、存錢等”
復制代碼 代碼如下:

bool do_command(THD *thd)
{
 
  if ((packet_length=my_net_read(net)) == packet_error) //獲取命令
 
  DBUG_RETURN(dispatch_command(command,thd, packet+1, (uint) packet_length));
}

相關文章

  • Mysql5.7.18的安裝與主從復制圖文詳解

    Mysql5.7.18的安裝與主從復制圖文詳解

    這篇文章主要介紹了Mysql5.7.18的安裝與主從復制圖文詳解,需要的朋友可以參考下
    2017-08-08
  • Mysql自連接查詢實例詳解

    Mysql自連接查詢實例詳解

    這篇文章主要介紹了Mysql自連接查詢,結合實例形式分析了MySQL自連接查詢的應用場景、原理及相關操作技巧,需要的朋友可以參考下
    2019-07-07
  • linux(Centos7)下安裝mysql8.0.18的教程圖解

    linux(Centos7)下安裝mysql8.0.18的教程圖解

    這篇文章主要介紹了linux(Centos7)安裝mysql8.0.18的教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • MySQL中慢SQL優(yōu)化方法的完整指南

    MySQL中慢SQL優(yōu)化方法的完整指南

    當數據庫響應時間超過500ms時,系統(tǒng)將面臨三大災難鏈式反應,所以本文將為大家介紹一下MySQL中慢SQL優(yōu)化的常用方法,有需要的小伙伴可以了解下
    2025-03-03
  • 圖文并茂地講解Mysql索引(index)

    圖文并茂地講解Mysql索引(index)

    在關系數據庫中,索引是一種單獨的、物理的數對數據庫表中一列或多列的值進行排序的一種存儲結構,下面這篇文章主要給大家介紹了關于Mysql索引(index)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • mysql中格式化日期詳解

    mysql中格式化日期詳解

    最近因為工作需要,要使用mysql查詢記錄可如果有時間戳字段時,查看結果不方便,不能即時看到時間戳代表的含義,所以這篇文章就提供mysql格式換時間函數,可以方便的看到格式化后的時間。有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-11-11
  • Linux中安裝MySQL5.7.42的詳細教程

    Linux中安裝MySQL5.7.42的詳細教程

    這篇文章主要介紹了Linux中安裝MySQL5.7.42,本文通過實例圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • centos編譯安裝mysql 5.6及安裝多個mysql實例詳解

    centos編譯安裝mysql 5.6及安裝多個mysql實例詳解

    這篇文章主要介紹了centos編譯安裝mysql 5.6及安裝多個mysql實例詳解,需要的朋友可以參考下
    2017-02-02
  • MySQL數據庫遠程訪問權限設置方式

    MySQL數據庫遠程訪問權限設置方式

    這篇文章主要介紹了MySQL數據庫遠程訪問權限設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 詳解mysql的備份與恢復

    詳解mysql的備份與恢復

    這篇文章主要介紹了mysql的備份與恢復的相關資料,幫助大家更好的理解和學習mysql,感興趣的朋友可以了解下
    2020-08-08

最新評論

娄底市| 鹤壁市| 四会市| 黑水县| 青海省| 辽阳市| 白水县| 钟山县| 天镇县| 武邑县| 东丰县| 会理县| 五家渠市| 武宁县| 鸡泽县| 中卫市| 拉孜县| 长葛市| 睢宁县| 拜泉县| 临泽县| 台北县| 新晃| 女性| 景德镇市| 东台市| 河间市| 章丘市| 保山市| 敖汉旗| 独山县| 布拖县| 聊城市| 渝北区| 盐亭县| 新乐市| 怀仁县| 巩义市| 托克托县| 闽侯县| 门头沟区|