在Ubuntu Server 10.04上糟糕的PHP / MySQL查询性能

我只是用标准的LAMPconfiguration做了Ubuntu Server 10.04的清理安装。

然后,我制作了一个小脚本,将插入速度testing成3列的表格。

当我在我的其他机器上运行脚本(centos和fedora)时,我每秒获得大约2000-3000个插入。

在Ubuntu机器上,我每秒获得大约20个插入(相同的确切脚本)。

我尝试切换脚本来使用套接字,但没有改变。

当我做mysql转储和恢复时,mysql执行得非常好,并在大约20秒钟内将1000000条logging加载到表中。

为什么PHP会把这么糟糕的查询速度变成mysql? (我尝试使用pdo和mysqli – 他们都得到相同的结果)。

目前安装:

libmysqlclient16 5.1.41-3ubuntu12 mysql-client-5.1 5.1.41-3ubuntu12 mysql-client-core-5.1 5.1.41-3ubuntu12 mysql-common 5.1.41-3ubuntu12 mysql-server 5.1.41-3ubuntu12 mysql-server-5.1 5.1.41-3ubuntu12 mysql-server-core-5.1 5.1.41-3ubuntu12 php5-mysql 5.3.2-1ubuntu4.2 libapache2-mod-php5 5.3.2-1ubuntu4.2 php-apc 3.1.3p1-2 php5-cli 5.3.2-1ubuntu4.2 php5-common 5.3.2-1ubuntu4.2 php5-mysql 5.3.2-1ubuntu4.2 

编辑/解决:

我做了一个Ubuntu的重新安装,同样的问题。 我安装了Fedora 13,SAME PROBLEM ….然后在玩了桌子之后,我发现这是一个InnoDB问题(MyISAM每秒插入数千行)。

事实certificate,innodb_flush_log_at_trx_commit被默认为“1”,这意味着它在每次写入时都会刷到磁盘上……这是在杀害我的performance。 由于这是一个蹩脚的消费者戴尔机器,当我切换到innodb_flush_log_at_trx_commit = 0(每秒冲洗)时,演出天空飙升。 我现在可以在45秒内插入1,000,000行。 :d

听起来就像你的MySQLconfiguration需要调整。 假如他们不是在服务器上运行的唯一服务,那么任何发行版上的基本MySQLconfiguration都是保守的。 你应该花点时间调整它。 如果你的表格是InnoDB格式的话,确保将innodb_buffer_pool_sizevariables调整到大约80%的系统内存(假设它是唯一运行的服务)。

这可能是比较操作系统时首先要看的地方。 每个发行版都有自己的标准。 如果你想在它们之间运行一个公平的testing,你应该匹配configuration。

希望这可以帮助!

我同意troyengel。 你需要比较你的my.cnf在提供不同行为的服务器上,看看瓶颈可能在哪里。 从你自己的testing中,似乎更可能与你的MySQLconfiguration有关,并且不太可能与你的PHPconfiguration有关。 – dxjones