Mysql

MySQL Connections 減慢了我的網站速度

  • February 23, 2022

我有一個執行完全正常的網站,直到今天它變得非常慢。經過幾個小時的調試,一切都歸結為數據庫。

我執行了這些查詢

show status like 'Connections';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 78    |
+---------------+-------+
1 row in set (0.01 sec)

show status like "%thread%";

+------------------------------------------+-------+
| Variable_name                            | Value |
+------------------------------------------+-------+
| Delayed_insert_threads                   | 0     |
| Performance_schema_thread_classes_lost   | 0     |
| Performance_schema_thread_instances_lost | 0     |
| Slow_launch_threads                      | 0     |
| Threads_cached                           | 3     |
| Threads_connected                        | 6     |
| Threads_created                          | 17    |
| Threads_running                          | 6     |
+------------------------------------------+-------+
8 rows in set (0.01 sec)

show variables like "%max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.02 sec)


Version :
+----------------------------------+
| version()                        |
+----------------------------------+
| 5.6.35-1+deb.sury.org~xenial+0.1 |
+----------------------------------+
1 row in set (0.00 sec)

我發現,當連接數超過 20 時,網站的載入速度會變得非常慢。

我不確定為什麼會發生這種情況,或者這是否正常。我試圖調整“max_connections”變數,但仍然沒有運氣。有沒有人也遇到過這個問題?我該如何優化呢?

謝謝您的幫助。

這是與連接相關的日誌:

+-----------------------------------------------+-------+
| Variable_name                                 | Value |
+-----------------------------------------------+-------+
| Aborted_connects                              | 1     |
| Connection_errors_accept                      | 0     |
| Connection_errors_internal                    | 0     |
| Connection_errors_max_connections             | 0     |
| Connection_errors_peer_address                | 0     |
| Connection_errors_select                      | 0     |
| Connection_errors_tcpwrap                     | 0     |
| Connections                                   | 48    |
| Max_used_connections                          | 6     |
| Performance_schema_session_connect_attrs_lost | 0     |
| Ssl_client_connects                           | 0     |
| Ssl_connect_renegotiates                      | 0     |
| Ssl_finished_connects                         | 0     |
| Threads_connected                             | 6     |
+-----------------------------------------------+-------+
14 rows in set (0.01 sec)

您沒有提及您的應用程序使用哪種語言,但如果您在請求的每個頁面上都進行連接,則只需使用數據庫連接池即可提高速度。這樣,您的應用程序將不需要太多連接,也不必在每個請求上都連接,從而為您提供額外的速度,因為您不必每次都重新連接,並且還大大減少了它使用的並發連接數,這似乎是您的問題。

我只在 Windows 機器上看到過您提到的此類問題。只需將您的數據庫遷移到 GNU/Linux(或 BSD),大多數此類問題也得到了高度緩解。

Connections是一個不斷增長的計數器。

Connections / Uptime是“每秒連接數”。如果這小於 1,則建立連接的速率是可以的。

Threads_created– 再次,找出“每秒”的值。它也應該低於 1/秒。

VARIABLE thread_cache_size表示要保留多少“執行緒”或“程序” 。20 對於 *nix 來說是一個合理的值。0 適用於 Windows。

回到“真正的”問題……如果 MySQL 是“慢”或“高 CPU”或“高 I/O”,則定位可能是反派的查詢。 SHOW FULL PROCESSLIST;可能會抓住它。慢日誌,long_query_time=1將擷取並記錄它。

有了查詢,獲取SHOW CREATE TABLE所涉及的表。並EXPLAIN SELECT ...獲得一些關於它如何運作的線索。然後向我們展示那些東西;我們也許可以幫助你。

引用自:https://dba.stackexchange.com/questions/175147