MySQL のプロセス/接続がどのように機能するかを理解しようとする必要があります。私はグーグルで検索しましたが、素人の言葉で何も表示されないので、ここで質問しています。これが状況です。
私たちのホストは、「MySQL プロセスが多すぎる」と嘆いています。私たちは共有サーバーにいます。サーバーの mySQL プロセスの .2 が許可されており、これは 50 接続であると彼らは主張していますが、.56 を使用していると彼らは言います。
技術サポート担当者から:
「MySQL proc の数 (平均) - 0.59 は、共有サーバーで利用可能な MySQL 接続の合計の 0.59% を使用していたことを意味します。許容値は 0.20、つまり 50 接続です。」
実行しているものは次のとおりです。
Zen Cart: 1.5.1 35K products. Auto updating of 1-20
products every 10 hours via cron.
PHP version 5.3.16
MySQL version 5.1.62-cll
Architecture i686
Operating system linux
通常、サイトには 1 日あたり約 5000 のヒットがあり、Google ウェブマスター ツールでクロール レートを最小に設定しているにもかかわらず、Google ボットは頻繁にアクセスします。
このホストが話していることに関して、誰かが MySQL プロセスを説明してくれることを願っています。彼らに尋ねるたびに、あいまいで不明確な難読化された答えが返ってきます。訪問者がサイトにアクセスするたびに、新しい MySQL プロセスが作成されますか? それは正しくないようです。
技術によると、その時点で 150 の接続を使用していました。
編集:これがzencartの接続機能です
function connect($zf_host, $zf_user, $zf_password, $zf_database, $zf_pconnect = 'false', $zp_real = false) {
$this->database = $zf_database;
$this->user = $zf_user;
$this->host = $zf_host;
$this->password = $zf_password;
$this->pConnect = $zf_pconnect;
$this->real = $zp_real;
if (!function_exists('mysql_connect')) die ('Call to undefined function: mysql_connect(). Please install the MySQL Connector for PHP');
$connectionRetry = 10;
while (!isset($this->link) || ($this->link == FALSE && $connectionRetry !=0) )
{
$this->link = @mysql_connect($zf_host, $zf_user, $zf_password, true);
$connectionRetry--;
}
if ($this->link) {
if (@mysql_select_db($zf_database, $this->link)) {
if (defined('DB_CHARSET') && version_compare(@mysql_get_server_info(), '4.1.0', '>=')) {
@mysql_query("SET NAMES '" . DB_CHARSET . "'", $this->link);
if (function_exists('mysql_set_charset')) {
@mysql_set_charset(DB_CHARSET, $this->link);
} else {
@mysql_query("SET CHARACTER SET '" . DB_CHARSET . "'", $this->link);
}
}
$this->db_connected = true;
if (getenv('TZ') && !defined('DISABLE_MYSQL_TZ_SET')) @mysql_query("SET time_zone = '" . substr_replace(date("O"),":",-2,0) . "'", $this->link);
return true;
} else {
$this->set_error(mysql_errno(),mysql_error(), $zp_real);
return false;
}
} else {
$this->set_error(mysql_errno(),mysql_error(), $zp_real);
return false;
}