我在在线服务的 MySQL 实例方面遇到了真正的问题。我们使用 hibernate 和 c3p0 池并采用以下设置:
c3p0.max_size=200
c3p0.min_size=5
c3p0.timeout=60000
c3p0.max_statements=20
c3p0.idle_test_period=300
c3p0.acquire_increment=3
c3p0.unreturnedConnectionTimeout=70000
我注意到服务(网站)已关闭,因为它拒绝连接。我登录 MySQL 控制台,并show processlist
在列表中显示了与相关数据库的 30 个休眠(命令)连接。这让我很担心。我们每次都期望有 200 个连接,并将 MySQL 最大连接数设置为 300。这是我的 .cnf
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 8
max_connections = 300
#table_cache = 64
#thread_concurrency = 10
满的我的cnf
我做了一个小研究,发现 table_cache 大小必须相应更新。该机器是一台四核机器,运行 ubuntu 9.10 服务器 4gb 内存
**问题1:**如何强制c3p0释放空闲连接。
**问题 2:**我需要修复哪些 tache_cache 和所有其他参数,以允许服务器充分发挥其潜力并且不会拒绝连接
**问题 3:** 在我重新启动 Tomcat 后,MySQL 连接数下降到 4。我需要尽快修复此问题,为此我需要您的经验。但我也希望在未来获得这种经验。从 MySQL 性能调整到集群,您应该推荐哪本书?
答案1
Mysql 调优可以通过几个脚本来实现。
Mysqltuner、mytop、mysqlreport、tuning-primer......这些脚本将为您提供有关服务器的详细信息......
例如检查下一个链接
http://www.serveradminblog.com/2011/03/tuning-mysql-performance-howto-part-1/
答案2
优化是一个永无止境的追求,但以下几点可能会有所帮助:
- 增加
max_connect_errors
(我用的是 10,但你可以尝试更多) - 增加
table_open_cache
:我使用的是 2048,但这取决于您的应用程序中的表的数量。 - 在授权语句中使用所有 IP 地址,并禁用 DNS:[mysqld] skip-name-reslove = 1
- 肯定会增加
query_cache_size
(即 64 MB)