3 回答

TA貢獻1982條經驗 獲得超2個贊
通常情況下在PHP中MySQL查詢是串行的,如果能實現MySQL查詢的異步化,就能實現多條SQL語句同時執行,這樣就能大大地縮短MySQL查詢的耗時,提高數據庫查詢的效率。目前MySQL的異步查詢只在MySQLi擴展提供,查詢方法分別是:
1、使用MYSQLI_ASYNC模式執行mysqli::query
2、獲取異步查詢結果:mysqli::reap_async_query
使用mysql異步查詢,需要使用mysqlnd作為PHP的MySQL數據庫驅動。
使用MySQL異步查詢,因為需要給所有查詢都創建一個新的連接,而MySQL服務端會為每個連接創建一個單獨的線程進行處理,如果創建的線程過多,則會造成線程切換引起系統負載過高。Swoole中的異步MySQL其原理是通過MYSQLI_ASYNC模式查詢,然后獲取mysql連接的socket,加入到epoll事件循環中,當數據庫返回結果時會回調指定函數,這個過程是完全異步非阻塞的。

TA貢獻1865條經驗 獲得超7個贊
mysql的最大連接數默認是100, 這個數值對于并發連接很多的數據庫應用是遠遠不夠的,當連接請求大于默認連接數后,就會出現無法連接數據庫的錯誤,因此我們需要把它適當調大一些。
調節方法為:
1.linux服務器中:改my.cnf中的值就行了
2.Windows服務器中(我用的):
在文件“my.ini”中找到段 [mysqld],在其中添加一行
max_connections=200 ### 200可以更改為想設置成的值.
然后重啟"mysql"服務。
/mysqladmin所在路徑/mysqladmin -uroot -p variables
輸入root數據庫賬號的密碼后可看到
| max_connections | 1000 |
其他需注意的:
在編程時,由于用mysql語句調用數據庫時,在每次之執行語句前,會做一個臨時的變量用來打開數據庫,所以你在使用mysql語句的時候,記得在每次調用完mysql之后就關閉mysql臨時變量。
另外對于訪問量大的,可以考慮直接寫到文本中,根據預測的訪問量,先定義假若是100個文件文件名依次為1.txt,2.txt...100.txt。需要的時候,再對所有文本文件中的數據進行分析,再導入數據庫。
添加回答
舉報