我正在尝试使用mysqltuner调整一个MySQL数据库。 Mysqltunerbuild议我增加join_buffer_size和query_cache_size。 但是,同时警告我的最大内存使用率很高,在已安装的内存(2GB)的200%以上。 我所使用的绑定当然是,如果我做了mysqltuner所说的话,内存使用率将会更高。 那么我在这里做什么? 是问题而不是与MySQL,但在这个服务器上运行的应用程序显然需要MySQL来执行大量的caching? 你将如何从这里的MySQLpipe理员专家出发? 请参阅下面的mysqltuner报告以及我当前的[mysqld]设置:
MySqlTuner报告:
MySQLTuner 1.2.0 – 主要的Hayden Bug报告,function请求和下载http://mysqltuner.com/使用“–help”运行其他选项和输出过滤
——–一般统计—————————————- ———-
[ – ]跳过版本检查MySQLTuner脚本
[确定]当前运行支持的MySQL版本5.5.30-log
[确定]在64位体系结构上运行
- 如何在MySQL中列出某个表的授权
- 如何安装新的PDO驱动程序到现有的LAMP安装
- 检查是否应用了MySQLconfiguration
- 远程访问被禁止(HY000)到特定的mysql客户端
- Nginx + php-fcgi网站加载4-5秒,缓慢的问题
——–存储引擎统计————————————— —-
[ – ]状态:+归档-BDB -Federated + InnoDB -ISAM -NDBCluster
[ – ] MyISAM表中的数据:310M(表格:264)
[ – ] InnoDB表中的数据:8M(表格:365)
[ – ] PERFORMANCE_SCHEMA表中的数据:0B(表:17)[!!]碎片表总数:376——–安全build议—————————————- —
[确定]所有数据库用户都分配了密码– – – – 性能指标 – – – – – – – – – – – – – – – – – – – – ———
[ – ]上行20h 20m 10s(2M q [35.305 qps],25K conn,TX:88B,RX:2B)
[ – ]读/写:22%/ 78%
[ – ]总caching:全球480.0M +每个线程33.5M(最多110个线程)
[!!]最大可能的内存使用量:4.1G(已安装RAM的203%)
[确定]慢查询:0%(0 / 2M)
[确定]可用连接的最高使用率:7%(8/110)
[确定]键缓冲区大小/总MyISAM索引:150.0M / 129.5M
[OK]键缓冲命中率:100.0%(caching15M / 7K)
[确定]查询caching效率:74.3%(caching762K / 1Mselect)
[!!]查询caching李子每天:4341
[确定]需要临时表的sorting:0%(3个温度sorting/ 11Ksorting)
[!!]join没有索引:3901
[确定]磁盘上创build的临时表:0%(磁盘上2K /总共547K)
[确定]线程caching命中率:99%(8创build/ 25K连接)
[确定]表caching命中率:46%(688开/ 1K开)
[确定]使用打开的文件限制:17%(593 / 3K)
[确定]立即获取表锁:99%(1M立即/ 1M锁)
[确定] InnoDB数据大小/缓冲池:8.9M / 256.0M——–build议—————————————– ————
一般build议:
运行OPTIMIZE TABLE进行碎片整理以获得更好的性能
MySQL在过去24小时内启动 – 推荐可能不准确
减less您的整体MySQL内存足迹,以保持系统稳定性
调整连接查询以始终使用索引
variables调整:
* MySQL的最大内存使用率非常高
增加MySQL缓冲区variables之前添加RAM *
query_cache_size(> 32M)
join_buffer_size(> 32.0M,或者总是使用连接索引)
my.cnf当前的mysqld设置:
的[mysqld]
本地的infile = 0
DATADIR =的/ var / lib中/ MySQL的
用户= MySQL的
符号链接= 0
端口= 3306
socket = /var/lib/mysql/mysql.sock
跳过外部locking
key_buffer_size = 150M
max_allowed_packet = 160M
max_connections = 110
wait_timeout = 60
query-cache-type = 1
query-cache-size = 32M
query_cache_limit = 2M
thread_cache_size = 16
tmp_table_size = 32M
max_heap_table_size = 32M
join_buffer_size = 32M
table_open_cache = 128
table_cache = 1600
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 2M
innodb_log_buffer_size = 8M
你在这里有一个相当奇怪的数据库 – 它比写入做了更多的写入。
调整你的数据库pipe理系统与Innodb一起运行或调整它与MyISAM运行良好非常重要 – 但是你似乎有两种表types的混合。 你不能有一个最佳的数据库pipe理系统。 您需要开始将数据迁移到单个引擎。 鉴于数据库的重写性,我推荐Innodb。
总缓冲区:全球480.0M +每个线程33.5M(最多110个线程)
目前,交换的风险主要是由每个连接的内存使用所驱动的。 但请注意,这只是一个风险 。 您还需要确定是否需要110个并发连接 – 最好稍微减less一点。 通常sort_buffer_size是每个连接使用内存的主要罪魁祸首 – 但你的默认是四分之一。
如果您在innodb上进行整合,那么您需要增加innodb缓冲池大小。
你可以在这里玩不同的值。