ApacheとMod_phpを使用してWindows(Windows 7 64ビット)でPHP 5.3.10を使用しています。私は使用すべきライブラリを決定する過程でPHP MysqlとWindowsのMysqli
イムので、私は、MySQLとMySQLiの両方を
をテストしてい私はテスト
$mysqli = new mysqli("127.0.0.1", "root2", "secretsquirrel", "test");
for ($i=0;$i<100;$i++) {
$result = $mysqli->query("SELECT * from test");
// var_dump($result);
echo "ok $i";
$result->close();
}
そして
$dbh=mysql_connect("127.0.0.1","root2","secretsquirrel",true);
mysql_select_db("test",$dbh);
for ($i=0;$i<100;$i++) {
[email protected]mysql_query("SELECT * from test",$dbh);
echo "ok";
mysql_free_result($result);
}
のための2つのページを作成しました
どちらのテストでも、問題なく接続でき、情報を取得できます。
しかし、私が同時テスト(5人の同時ユーザー)を実行すると、MySqliは非常に遅くなります。
最悪の場合、私が同時テスト(同時ユーザー数10人)を実行すると、MySQLiがクラッシュします。
Faulting application name: httpd.exe, version: 2.2.22.0, time stamp: 0x4f4a84ad
Faulting module name: php5ts.dll, version: 5.3.10.0, time stamp: 0x4f2ae5d1
Exception code: 0xc0000005
Fault offset: 0x0000c7d7
Faulting process id: 0x1250
Faulting application start time: 0x01cd037de1e2092d
Faulting application path: C:\apache2\bin\httpd.exe
Faulting module path: C:\php53\php5ts.dll
Report Id: 1fb70b72-6f71-11e1-a64d-005056c00008
MySqlでは、1000人の同時ユーザーでも、すべてが完璧に動作します。
質問:私は何か間違っていますか?
それは
[MySQLi]
mysqli.max_persistent = -1
;mysqli.allow_local_infile = On
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
PS私のphp.iniの設定です:espectedとして、PDOは道最悪
コードです:(テストが間違っているかもしれ?)
$dbo = new PDO("mysql:host=127.0.0.1;dbname=test", "root2", "secretsquirrel");
for ($i=0;$i<100;$i++) {
$dbo->query("SELECT * from test");
echo "ok $i";
}
結果はMySQLiよりも悪い
更新日:
私はLinux(redhat)で同じことをしており、MysqlI/PDOはより安定しています。
(同時コール数1000、差はありません)
モジュール合計(MS)MIN(MS)MAX(MS)
MySQLiを66986 265 1762
のMySQL
PDO 75426 249 1809
(マイナスが良い)。
まあ、明らかに答えはありません.MysqlIとPDOは大きな問題ではありません(開発プロセスを除いて)。 Linuxの場合、3つは同じですが、一般的なサーバー(同時ユーザーが多い)ではMysqlが最高、MysqlIは3%、PDOは10%遅いです。
しかし、実際のテストではありませんので、走行距離は異なる場合があります。しかし、結果は一般的な信念であるMysql> Mysqli> pdoと一貫しています。
どのようなテーブルテストのサイズですか? –
@ YourCommonSense MySQLはクエリの結果をキャッシュするので、テーブルのサイズは関係ありません(単一のユーザで機能するため)。問題はPHPやMySQLではなく、Apacheにあると私は信じています。 –
3行、1つの整数、1つのvarchar(20) – magallanes