2011-03-14 59 views
2

爲什麼,當我運行分析MySQL表時提示錯誤1040 - 連接太多

ANALYZE TABLE table_name_here 

MySQL服務器啓動給予了這個錯誤:

1040 - 連接太多

我已經運行這個通過PHPMyAdmin btw ..

該表包含超過1500萬行數據。有沒有辦法來解決這個問題?

MySQLTuner結果:

-------- General Statistics -------------------------------------------------- 
[--] Skipped version check for MySQLTuner script 
[OK] Currently running supported MySQL version 5.0.91-rs-log 
[OK] Operating on 64-bit architecture 

-------- Storage Engine Statistics ------------------------------------------- 
[--] Status: +Archive -BDB +Federated -InnoDB -ISAM -NDBCluster 
[--] Data in MyISAM tables: 10G (Tables: 192) 
[!!] Total fragmented tables: 14 

-------- Security Recommendations ------------------------------------------- 
ERROR 1142 (42000) at line 1: SELECT command denied 
[OK] All database users have passwords assigned 

-------- Performance Metrics ------------------------------------------------- 
[--] Up for: 21m 37s (134K q [103.756 qps], 982 conn, TX: 267M, RX: 20M) 
[--] Reads/Writes: 88%/12% 
[--] Total buffers: 1.2G global + 22.2M per thread (120 max threads) 
[!!] Maximum possible memory usage: 3.8G (99% of installed RAM) 
[OK] Slow queries: 0% (4/134K) 
[OK] Highest usage of available connections: 14% (17/120) 
[OK] Key buffer size/total MyISAM indexes: 1.0G/2.9G 
[OK] Key buffer hit rate: 97.7% (1M cached/25K reads) 
[OK] Query cache efficiency: 72.7% (92K cached/127K selects) 
[OK] Query cache prunes per day: 0 
[OK] Sorts requiring temporary tables: 0% (0 temp sorts/6K sorts) 
[!!] Joins performed without indexes: 492 
[!!] Temporary tables created on disk: 44% (490 on disk/1K total) 
[OK] Thread cache hit rate: 98% (17 created/982 connections) 
[OK] Table cache hit rate: 97% (262 open/268 opened) 
[OK] Open file limit used: 0% (463/65K) 
[OK] Table locks acquired immediately: 99% (78K immediate/78K locks) 

-------- Recommendations ----------------------------------------------------- 
General recommendations: 
    Run OPTIMIZE TABLE to defragment tables for better performance 
    MySQL started within last 24 hours - recommendations may be inaccurate 
    Reduce your overall MySQL memory footprint for system stability 
    Adjust your join queries to always utilize indexes 
    When making adjustments, make tmp_table_size/max_heap_table_size equal 
    Reduce your SELECT DISTINCT queries without LIMIT clauses 
Variables to adjust: 
    *** MySQL's maximum memory usage is dangerously high *** 
    *** Add RAM before increasing MySQL buffer variables *** 
    join_buffer_size (> 10.0M, or always use indexes with joins) 
    tmp_table_size (> 192M) 
    max_heap_table_size (> 192M) 

本來我的鑰匙緩衝區的大小僅設置爲64MB。當我將密鑰緩衝區大小設置爲1GB時,我的最大連接用戶數僅在17時達到峯值,而運行該命令。當它只設置爲64MB時,它總是達到允許的最大連接用戶數。我無法將此設置爲更高,因爲我的服務器僅限於4GB RAM。

+0

http://rackerhacker.com/2008/06/24/mysql-error-1040-too-many-connections/ - 這是一個配置問題來分析表沒有必然的關係。運行分析會鎖定一個連接,並且如果您的運行接近您配置的限制,則會看到此問題。 –

+0

我已經添加MySQLTuner結果,我做了一些改變,我沒有得到這「太多的連接」的錯誤了,當我運行的命令,但我得到一個MySQL的最大內存使用量是高危險的消息。我認爲這與索引太大的表格有關。有任何解決這個問題的方法嗎? – officeboi101

回答

1

我提出我的意見,以一個完整的答案在這裏。這是一個MySQL配置問題,您可能會在服務器故障上得到更好的答案。

[分析表做了兩兩件事,會導致你的服務器的問題。首先,這是一個需要很長時間才能運行的命令。從你對問題的簡要描述中,我猜你的應用程序正在與數據庫進行很多短連接。由於ANALYZE需要很長時間,所以在運行時使用的連接被鎖定。如果應用程序正在使用連接池或對應用程序的連接數限制了特定的應用程序限制,我會將其設置爲短於MySQL連接限制的3倍,以便您可以像這樣執行此類操作。

其次,ANALYZE TABLE,對於MyISAM表重建索引。這意味着MySQL嘗試將整個表加載到內存中(或者讀取整個表)以重新構建索引。這會對錶發出表鎖並佔用大量內存,這會干擾MySQL執行其他工作(如運行應用程序)的能力。

我真正的建議將被移動到InnoDB的,而不是MyISAM數據。它在管理內存,索引和數據方面做得更好。對於您正在處理的表格大小和更少的頭痛,它比MyISAM更快。