我一直在努力使我们的数据库运行一点点,并在过去一周取得了良好的效果。 但是还有一些我不明白的东西。
首先,数据库有25个表。 但mysql状态显示512是打开的:mysqladmin状态正常运行时间:212854线程:1问题:43041慢查询:7打开:2605刷新表:1打开表格:512查询每秒平均:0.202
我读过isam打开额外的文件描述符和其他几个原因,为什么打开的表的数量可能会高于25,但我猜测512是不是一件好事。 任何build议,为什么这可能是或我应该看看?
我也一直在使用mysqltuner,它是有帮助的。 但是它一直在207处列出碎片表的数量。在phpmyadmin中,我select了所有的表格并优化了几次。 它没有减lessmysqltuner报告的碎片表的数量。
我想我错过了关于这一切如何工作的一些重要概念。 有没有人有任何build议,指向我在正确的方向或缩小谷歌search或只是一般来说帮助我不那么笨?
谢谢!
--------一般统计---------------------------------------- ---------- [ - ]跳过版本检查MySQLTuner脚本 [确定]当前运行支持的MySQL版本5.5.20-log [确定]在64位体系结构上运行 --------存储引擎统计--------------------------------------- ---- [ - ]状态:+归档-BDB -Federated + InnoDB -ISAM -NDBCluster [ - ] MyISAM表中的数据:1M(表:254) [ - ] InnoDB表中的数据:3M(表格:199) [ - ] PERFORMANCE_SCHEMA表中的数据:0B(表:17) [!!]碎片表总数:200 --------安全build议---------------------------------------- --- [确定]所有数据库用户都分配了密码 - - - - 性能指标 - - - - - - - - - - - - - - - - - - - - --------- [ - ]上升:3d 12h 5m 8s(142K q [0.472 qps],11K conn,TX:105M,RX:37M) [ - ]读/写:79%/ 21% [ - ]总缓冲区:全球202.0M +每个线程2.5M(最多100个线程) [OK]最大可能的内存使用量:452.0M(已安装RAM的48%) [确定]慢查询:0%(8 / 142K) [OK]可用连接的最高使用率:9%(9/100) [确定]键缓冲区大小/总MyISAM索引:16.0M / 741.0K [OK]键caching命中率:99.9%(404Kcaching/ 513条读取) [确定]查询caching效率:72.1%(caching61K / 84Kselect) [确定]每天查询caching修剪:0 [确定]需要临时表的sorting:0%(0温度sorting/ 1Ksorting) [!!]磁盘上创build的临时表:41%(磁盘上6K /总共14K) [确定]线程caching命中率:99%(9创build/ 11K连接) [!!]表caching命中率:15%(512打开/ 3K打开) [确定]使用打开的文件限制:55%(633 / 1K) [确定]立即获得表锁:100%(40K立即/ 40K锁) [!!]连接中止:7% [确定] InnoDB数据大小/缓冲池:3.3M / 16.0M --------build议----------------------------------------- ------------ 一般build议: 运行OPTIMIZE TABLE进行碎片整理以获得更好的性能 进行调整时,使tmp_table_size / max_heap_table_size相等 减less不带LIMIT子句的SELECT DISTINCT查询 逐渐增加table_cache以避免文件描述符限制 您的应用程序没有正确closuresMySQL连接 variables调整: tmp_table_size(> 128M) max_heap_table_size(> 128M) table_cache(> 512)
这可能与table_cache
和/或max_connections
。
使用MyISAM表,每个新的线程/连接都需要打开表。 换句话说,如果你有一个表和十个客户端访问该表,那么根据MySQL状态行,你有十个打开的表。 table_cache
通过保持表的线程打开来帮助减less这个常量的开/关表工作。
你的表caching似乎工作得很好,因为已经有43 041个查询,但实际上只需要打开2605个表。
InnoDB有自己的连接池,行为有点不同。
有关更多信息,请参见MySQL如何打开和closures表 。