MySQL Connections 減慢了我的網站速度
我有一個執行完全正常的網站,直到今天它變得非常慢。經過幾個小時的調試,一切都歸結為數據庫。
我執行了這些查詢
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 ...
獲得一些關於它如何運作的線索。然後向我們展示那些東西;我們也許可以幫助你。