我正在尝试使用我正在构建的系统的性能,而且速度很慢,我不知道为什么或者它应该如此缓慢。我测试的是我可以对数据库做多少次INSERT,每秒钟可以达到22次。这听起来非常慢,当我尝试插入时,我可以在大约0.5秒内插入30000条记录,这是一个singel大型SQL查询。在现实生活中,插入是由系统中的不同用户创建的,因此连接,发送查询,解析查询等的开销总是在那里。我到目前为止所尝试的:性能下降MySql
- mysqli尽可能少的代码。 = 22每秒插入
- PDO尽可能少的代码。 =每秒
- 22 INSERT从本地主机每秒
- 的mysqli 127.0.0.1 = 22 INSERT更改连接的主机没有Statement对象和检查SQL注入=每秒
因此,一些接缝22 INSERT在这里是错误的。
系统规格:
- 英特尔酷睿i5
- 16演出RAM
- 7200转盘驱动
软件:
- 的Windows 10
- XAMP P,与MariaDB相当新
- 数据库引擎innoDB。
我用来做测试的代码:
$amountToInsert = 1000;
//$fakeData is an array with randomly generated emails
$fakeData = getFakeData($amountToInsert);
$db = new DatabaseHandler();
for ($i = 0; $i < $amountToInsert; $i++) {
$db->insertUser($fakeUsers[$i]);
}
$db->closeConnection();
调用数据库类:
class DatabaseHandler {
private $DBHOST = 'localhost';
private $DBUSERNAME = 'username';
private $DBPASSWORD = 'password';
private $DBNAME = 'dbname';
private $DBPORT = 3306;
private $mDb;
private $isConnected = false;
public function __construct() {
$this->mDb = new mysqli($this->DBHOST, $this->DBUSERNAME
, $this->DBPASSWORD, $this->DBNAME
, $this->DBPORT);
$this->isConnected = true;
}
public function closeConnection() {
if ($this->isConnected) {
$threadId = $this->mDb->thread_id;
$this->mDb->kill($threadId);
$this->mDb->close();
$this->isConnected = false;
}
}
public function insertUser($user) {
$this->mDb->autocommit(true);
$queryString = 'INSERT INTO `users`(`email`, `company_id`) '
.'VALUES (?, 1)';
$stmt = $this->mDb->prepare($queryString);
$stmt->bind_param('s', $user);
if ($stmt->execute()) {
$stmt->close();
return 1;
} else {
$stmt->close();
return 0;
}
}
}
“用户” 表中有4列结构如下:
- id INT无符号主键
- 电子邮件VARCHAR(60)
- COMPANY_ID INT无符号INDEX
- GUID TEXT
我在这里损失真的不知道在哪里旁边看。任何帮助正确的方向将非常感激。
给定你的设置,每秒22个似乎是合理的。请记住,您执行的每个'commit'都必须*导致写入磁盘,物理,不允许缓存。可能甚至多次写入元数据和东西。在一次事务中执行多次插入会提高每秒的记录次数,但如果这不是真实世界的用例场景,那么基准测试就是这样。 – JimmyB
如果这是您的选项,请在此表上将引擎从* InnoDB *更改为* MyISAM *。即使它是没有太多字段的用户表,因此不需要频繁的UPDATE,它不应该是一个问题。插入会更快,但有一些缺点。只有比较你的INSERT性能结果值得一试。 –
如果您在操作系统崩溃的情况下可以承担松散最后一秒的交易,那么my.ini中的innodb-flush-log-at-trx-commit = 0是您的朋友。如果您将批量插入事务处理,交易是您的朋友。 –