我在使用 600MB 的 MySQL 数据库的网站时遇到问题。网站太慢了。我注意到 MySQL 数据库越大,运行速度就越慢。当它是 5MB 时,网站速度非常快。当它开始变大时,它开始变得越来越慢,现在 600MB,它真的很慢,加载页面需要 10 秒。
我检查了顶级进程,它与高负载或任何事情无关。它甚至与 IOPS 无关,因为我在 HDD 7.2k rpm 驱动器上进行了测试,现在使用 Intel 320 SSD 驱动器进行测试时出现了同样的问题,因此我认为这也与高查询无关。
该网站正在使用 Wordpress,并且有 9 个插件处于活动状态。人们说这可能是插件......好吧也许......但现在我只想将整个数据库缓存在内存中,并希望获得有关从哪里开始以及如何做的帮助和指导。
我有 16GB RAM 和 i5-2400 4 核 @ 3.1 GHz。操作系统是centos 5.7
top - 07:23:57 up 9 days, 12:15, 0 users, load average: 0.09, 0.04, 0.05
Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie
Cpu(s): 8.2%us, 1.0%sy, 0.0%ni, 90.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16367532k total, 3641628k used, 12725904k free, 612140k …
Run Code Online (Sandbox Code Playgroud) 我们有 14 GB 的 CSV,总计 1.38 亿行。我首先使用 InnoDB 将其导入到 MySQL 表中,然后使用 MyISAM 再次尝试。在这两种情况下,对主键(只是一个自动递增的 int)的简单 SELECT 需要 6-7 秒,尽管 MyISAM 有时在 5-6 秒时快一点。
我们只需要写一次数据,我一直在使用mysqlimport。考虑到这一点,如何提高查询速度?
...我们有 2 演出 RAM 并且一切都是一张表,这毫无价值(并且由于查询的性质,它必须保持这种状态)。考虑到硬件,这是我可以期待的最佳性能吗?或者还有什么我应该尝试的,比如压缩?或者真的,我需要更多的内存?
第一个设置是客户使用的数据库从站。那已经足够快了。第二个设置(现在)是我刚刚使用的数据库从站的复制。当前设置在查询执行时较慢(即使我不必共享 CPU 和内存),理论上这是因为 DBMS 不是“热”使用,但每次使用时 fx 都必须重新加载索引它。这会导致性能下降。结论是运行预定查询以保持数据库“温暖”。
我想知道三件直接相关的事情:
这种影响的主要原因是什么?是不是因为在每次对从属服务器进行小的写访问后都会复制到我的服务器上,索引会在执行查询之前首先加载到内存中?我的胆量告诉我有更复杂的事情发生。
查询必须如何以最佳方式使用数据库(计划的)来保持温暖和准备就绪?我知道这篇文章:MySQL 暖程序- 但我对通用查询不是很感兴趣,而是了解它背后的逻辑。
是什么决定了这种保温查询(或一组)的运行频率?
SHOW VARIABLES LIKE "%version%";
innodb_version 5.6.13-rel61.0
protocol_version 10
slave_type_conversions -
version 5.6.13-rc61.0
version_comment Percona Server (GPL), Release 61.0
version_compile_machine x86_64
version_compile_os Linux
Run Code Online (Sandbox Code Playgroud) 是否有一种工具可以发现 MySql 中的冗余索引?
例如,如果我有以下索引:
index1(col1)
index2(col1,col2)
Run Code Online (Sandbox Code Playgroud)
那么index1
应该被标记为冗余。
有任何想法吗?