我是数据库管理的新手,一直依靠论坛的建议和答案来帮助解决我的数据库挂起和太多的连接错误;我已经设法减少太多连接错误的频率,但我想在这个级别上消除它们。
根据 RolandoMySQLDBA 在 这篇文章中的回答,“如果 Open_tables 超过(Opened_tables / Uptime),我有理由担心......”
我的服务器规格是 2.0Mhz 和 484Mem;我有一个客户端,其每小时最多可处理 1000 个请求,并且主要处理他们的 2 个 InnoDB 表,这意味着一个小时内与两个表建立了大约 3000 个连接。
根据另一个论坛的建议,我对 my.cnf 进行了更改,它转化为:
[mysqld]
port = 3306
socket = /var/run/mysqld/mysqld.sock
skip-locking
key_buffer_size = 30M
max_allowed_packet = 1M
table_cache = 300
sort_buffer_size = 256K
read_buffer_size = 1M
read_rnd_buffer_size = 1M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8
net_buffer_length = 12K
thread_stack = 1M
innodb_buffer_pool_size=60M
interactive_timeout=300
wait_timeout=300
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 48M
sort_buffer_size = 48M
#key_buffer_size = 256M
#sort_buffer_size = 256M
#read_buffer = 2M
#write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
当我根据帖子检查opened_tables、open_tables和uptime的参数时,我得到了这些值:
Uptime = 78018
Opened_tables = 1606999
Open tables = 300
所以:Opened_tables / Uptime=1606999/78018= 20.6
但是,我的 Opened_tables 变量在 3 小时内没有改变;它是一样的。
在这些更改之后,服务器负载在过去 24 小时内(晚上)发生了两次,我没有记录这段时间的 Opened_tables 值;但正如您从计算中注意到的那样,当许多客户端请求通过时,Opened_tables 值在昨晚急剧增加。
线程变量的输出是:
Threads_cached | 7 |
| Threads_connected | 14 |
| Threads_created | 306 |
| Threads_running | 2
我从 mysql 文档(http://dev.mysql.com/doc/refman/5.5/en/server-status-variables.html#statvar_Threads_connected)中注意到我需要增加 thread_cache_size 。
我的 max_connections 是默认值;
所以基本上:
- 我需要增加thread_cache_size;
- 我需要增加 table_open_cache (但非常大的值也会导致不可靠性)
在发布此消息时,我刚刚遇到“连接过多”错误,无法获得 Opened_tables 和 Open_tables 的结果;另外,我无法通过另一个会话登录到服务器;我自动断开连接。
问题:
我应该使用什么方法来近似
thread_cache_size 和 table_open_cache 的值?我的 max_connections 是否太低?如何计算最佳 max_connections 设置?
如何减少“连接过多”错误(不创建另一个用户并让该用户成为建立连接的用户而不是 root)?
注意:不,我现在无法升级内存。谢谢。现在我处理这个问题的唯一方法是关闭端口表单传入消息(这不完全符合道德)或重新启动服务器以处理系统中的待处理消息并释放内存。
在我现在 有太多的连接错误之后- 我通过阻止接收端口解决了这个问题;我的变量现在是:
Opened_tables = 1970498
Open_tables =300
| Threads_cached | 6 |
| Threads_connected | 15 |
| Threads_created | 437 |
| Threads_running | 2 |
任何我明智有效地处理这个问题的建议将不胜感激。提前致谢。
[3]: