[英]Laravel 6 with Nginx, php 7.4 fpm and mysql 8 on docker is slower than Laravel 4 on php 7.1
[英]Same mariaDB inserts much more slower in PHP 7.4 than PHP 7.1 with FAT FREE
我正在嘗試將舊的 PHP/Fat Free 項目從 php 7.1 遷移到 7.4,但我發現某些查詢需要很長時間(比如 10 倍多的時間)才能完成。 特別是一些插入。 我在本地主機中使用 xampp(7.1.32 和 7.4.6)運行相同的項目,並始終使用完全相同的 MariaDB 服務器(v10.4.8)和完全相同的數據庫。
代碼是這樣的:
foreach($ridiculouslyLongArray as $row) //I'm talking about some millons of rows
$this->db->exec("INSERT INTO a_table (field1, field2, fieldn) VALUES ('".$row['field1']."', '".$row['field2']."', '".$row['fieldn']."')");
//是的,它對sql注入開放,我也會修復它
$this->db 的定義如下:
$this->db = new DB\SQL('mysql:host=localhost;port=3306;dbname=something', 'dbuser', 'dbpassword', array(\PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION));
據我所知,它是 PDO 的包裝器。
我試圖更改代碼以在每個查詢中插入多行,但查詢仍然比在 php 7.1 中花費更多的時間。
這是我的設置
-> 原始項目(其中查詢運行良好)
-> 新建項目(查詢運行緩慢)
謝謝你的時間。
編輯:我剛剛注意到 MySQL 的 PDO 驅動程序在版本之間是不同的
對於 PHP 7.1:
對於 PHP 7.4:
編輯 2:查詢在一個事務中,它使用相同的索引和相同的 dB 引擎,因為在同一台服務器上的同一數據庫中的同一表上進行了相同的插入。 代碼中沒有任何變化,只有 PHP 版本。
評論中沒有明確提到這一點,但可能導致某些緩慢的其他原因是查詢日志記錄。
默認情況下,Fat-Free 將記錄所有數據庫查詢。 如果您正在運行大量插入,則所有這些插入都將被記錄。 如果還沒有,我會建議在生產中禁用查詢日志記錄。 無論您的引導程序/服務文件在哪里創建數據庫連接,我都會在它之后添加:
$f3->set('db', new DB\SQL(/* config stuff */));
if(ENVIRONMENT === 'PRODUCTION') { // or whatever you use to signal it's production
$f3->db->log(false);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.