我正在嘗試使用我正在構建的系統的性能,而且速度很慢,我不知道爲什麼或者它應該如此緩慢。我測試的是我可以對數據庫做多少次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是您的朋友。如果您將批量插入事務處理,交易是您的朋友。 –