ホームページ  >  記事  >  データベース  >  mysqlの起動プロセスを解析する

mysqlの起動プロセスを解析する

怪我咯
怪我咯オリジナル
2017-04-01 10:46:421130ブラウズ

ある日、mysql カーネルを理解していなかった 2 人は、コードをデバッグして情報を探す代わりに、mysql カーネル コードを理解したいと考えていました。カーネルが分からないので考えながら検証します。 使用した mysql コードは 5.1.7 で、デバッグ環境は Windows プラットフォームの vs2003 です。 Bingxi: 「アレックス、mysql の起動プロセスはどのようになると思いますか? 銀行
の動作
を例に考えてみましょう。」 Alex: 「そうですね、Bingxi。朝、銀行は準備をします。」ようこそ、mysql にも handl
e_connections_sockets 関数があります。この関数は、各ユーザーがアクセスすると番号を取得します。その後、業務が処理されます。「

pthread_handler_t handle_connections_sockets(void *arg attribute((unused)))

{

  ……

  while (!abort_loop)

  {

    select((int) max_used_connection,&readFDs,0,0,0) < 0) //有连接了则往下来执行,否则一直等待

    ……

    accept(sock, my_reinterpret_cast(struct sockaddr *) (&cAddr),&length)  //接受请求

    ……

    create_new_thread(thd);

  }

  //abort_loop=1,则执行到这里进行推出。今天业务不处理了

}
Bingxi: ああ、ここには 2 つの可能性があります。1) ユーザーが来たらすぐに電話を処理するスタッフを割り当てる、2) キューに登録されている番号の人を呼び出す前者のシナリオは、リクエスト量が多く、応答速度が特に速い状況に適していますが、次のような場合もあります。割り当ての制限、いわゆる最大接続数の制限はインターネット業界ではよくあることですが、これも同様にマシンの負荷が非常に大きいことがわかります。各ビジネスが複雑で (リソースを消費する SQL ステートメント)、同時に処理される場合、この状況は 2 番目の方法の方が適切です。 : "そうです。Mysql は前者を選択します。Oracle は 2 つの方法から選択できます。スレッド
キャッシュ

を設定し、キャッシュが利用可能な場合はスレッドを起動し、そうでない場合は新しいスレッドを作成します。"

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: 「そうですね、ラオヤン、銀行がこの期間中顧客にサービスを提供するサービススタッフを割り当てていることを理解していますか。その中にはユーザーのコマンドを待っているコードセグメントがありますが、それは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;

    }

}

以上がmysqlの起動プロセスを解析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。