运行OPTIMIZE TABLE来对表进行碎片整理以获得更好的性能


12

我正在运行Linux 64位OS。我的mysql调谐器在说以下内容:

--------一般统计---------------------------------------- ----------
[-]跳过版本检查MySQLTuner脚本
[确定]当前正在运行受支持的MySQL版本5.1.61-log
[OK]在64位架构上运行

--------存储引擎统计信息--------------------------------------- ----
[-]状态:-存档-BDB-联合+ InnoDB -ISAM -NDBCluster
[-] MyISAM表中的数据:1G(表:1914年)
[-] InnoDB表中的数据:4M(表:199)
[!!]碎片表总数:296

--------安全建议---------------------------------------- ---
[确定]为所有数据库用户分配了密码

-  -  -  -  性能指标  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - ---------
[-]最多:6s(7K q [1K qps],142 conn,TX:8M,RX:701K)
[-]读/写:97%/ 3%
[-]总缓冲区:每个线程1.7G全局+ 13.2M(最大384个线程)
[确定]可能的最大内存使用量:6.6G(已安装RAM的42%)
[确定]慢查询:0%(0 / 7K)
[确定]可用连接的最高使用率:5%(20/384)
[确定]密钥缓冲区大小/ MyISAM索引总数:1.5G / 2.7G
[确定]关键缓冲区命中率:97.4%(553K缓存/ 14K读取)
[确定]查询缓存效率:64.6%(4K缓存/ 6K选择)
[确定]每天查询缓存修剪:0
[确定]需要临时表的排序:0%(2个临时排序/ 337个排序)
[确定]在磁盘上创建的临时表:8%(磁盘上17个/总计198个)
[确定]线程缓存命中率:85%(已创建20个/ 142个连接)
[确定]表缓存命中率:98%(438个打开/ 445个打开)
[确定]使用的打开文件限制:10%(856 / 8K)
[确定]立即获得表锁:99%(2K立即/ 2K锁)
[确定] InnoDB数据大小/缓冲池:4.2M / 8.0M


--------建议----------------------------------------- ------------
一般建议:
    运行OPTIMIZE TABLE来对表进行碎片整理以获得更好的性能
    MySQL在过去24小时内启动-建议可能不正确

他们的建议是对OPTIMIZE TABLE表进行碎片整理以获得更好的性能。但是我不知道如何通过腻子来运行它。

有没有人可以给我代码,我如何通过腻子运行它?

Answers:


7

OPTIMIZE TABLE 是一条SQL语句-在MySQL客户端中运行它。

在服务器的命令行上,您应该安装了命令行客户端。您可以使用连接到客户端中的数据库mysql -u username -p

有关更多信息,请参见文档OPTIMIZE TABLE


该站点是有关专业系统管理员提出的问题的。
gparent

@gparent-是不是要提问,不是Shane的完全正确答案?
马克·亨德森

2
@gparent正确-但我认为根据某人在看到某条SQL语句时判断其专业水平并不公平。研究会很快找到答案的,但是..我不喜欢这个社区拒绝过于“明显”的问题的想法。
Shane Madden

您是对的,我的评论根本不属于此处,我认为作者在Shane的问题上发表了评论,然后删除了该评论,或者我真的打算将其张贴在Barkat的问题上,但是如果有以下情况,我通常会添加更多信息:就是这种情况。
gparent

1
不过,我不同意您的意见,在某个地方您必须划清界限。我认为可以公平地说,目前正在使用MySQL数据库并试图对其进行优化的专业人士(常见问题:以专业人士的身份)应该足够熟练地用Google搜索该词,并从第一个搜索结果中找出它是MySQL查询。也许我对任何员工都
抱有

18

您也可以mysqlcheck -u username -p --auto-repair --optimize --all-databases在终端中尝试。

只要运行“优化表”,您就可以像这样启动MySQL,mysql -u username -p然后从那里执行命令。通常,我使用的第一个命令是,show databases;但是您应该首先真正找到MySQL教程。出现在Google的第一个:http : //downloads.mysql.com/docs/mysql-tutorial-excerpt-5.1-en.pdf

是否使用腻子无关紧要。您可能要说“从命令行”而不是“通过Putty”。


2
这比被接受的解决方案好得多。在运行命令之前,无需枚举所有数据库和表以及自动修复。
Sammitch 2012年

1
也请帮自己一个忙,并在运行任何数据库之前进行数据库备份。mysqldump -u username -p dbname > dbname.sql并且gzip dbname.sql应该做得很好。
Fiasco Labs

惨败,至少要以centos计,命令应为mysqldump -u username -p db_name > dbname.sql
yitwail 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.