Nei*_*eil 6 mysql performance index mysql-5.6
尽管没有代码更新,但我的(LAMP 堆栈)站点的性能在过去几天中显着下降。似乎只有特定 MySQL 表的插入、更新和删除会导致问题。任何更新、插入或删除作业“表”条目的页面都需要大约 10 秒的时间来加载。(EG UPDATE jobs SET title = 'sdfldsfjlk' WHERE job_id = 134324
)
SELECT
查询似乎像以前一样执行,但如果同时进行更新,它们似乎会变慢。
该表有大约 180,000 个条目。我在 PHPMyAdmin 视图中注意到,除了主字段上的“正常”索引外,“entry_date”字段上还有一个索引(见图)。在这种情况下,这可能是一个问题吗?我不知道为什么会在该字段上创建索引。
如果没有,还有什么可能是问题的根源?我检查了磁盘上的空间,这似乎没问题。(7 GB 可用)根据 df。
SHOW CREATE TABLE job\G
Create Table: CREATE TABLE `job` (
`job_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL DEFAULT '0',
`entry_date` date NOT NULL DEFAULT '0000-00-00',
`timescale` varchar(20) COLLATE latin1_german2_ci NOT NULL DEFAULT '0000-00-00',
`title` varchar(60) COLLATE latin1_german2_ci NOT NULL,
`description` text COLLATE latin1_german2_ci NOT NULL,
`start_date` varchar(60) COLLATE latin1_german2_ci NOT NULL,
`address_town` varchar(40) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
`address_county` varchar(40) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
`postcode1` varchar(4) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
`postcode2` char(3) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
`status` tinyint(4) NOT NULL DEFAULT '0',
`cat_id` int(4) NOT NULL DEFAULT '0',
`price` decimal(4,2) NOT NULL DEFAULT '1.00',
`emailcount` smallint(5) NOT NULL DEFAULT '-1',
`emailcount2` int(11) NOT NULL DEFAULT '-1',
`recemailcount` int(11) NOT NULL DEFAULT '-1',
`archive` tinyint(4) NOT NULL DEFAULT '0',
`post_url` varchar(100) COLLATE latin1_german2_ci NOT NULL,
PRIMARY KEY (`job_id`),
KEY `entrydatejob_id` (`entry_date`,`job_id`)
) ENGINE=MyISAM AUTO_INCREMENT=235844
DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci
Run Code Online (Sandbox Code Playgroud)
更新- 首先感谢所有贡献者。我非常感激。所以在过去的几天里,问题停止了,这使得试图找出问题可能更加困难。不过现在好像又回来了。首先让我提供托管在谷歌云上的机器类型:g1-small(1 个 vCPU,1.7 GB 内存)。我将继续使用评论者要求的更多信息进行更新。
要回答具体问题:
(entry_date)
或两个额外的索引不会影响更新不同title
列的性能。此外:
我们只能推测手头的问题,但可能有什么问题或解释它:
旧的、低效的硬件:检查磁盘规格,测量它的性能。
碎片索引/表。在此处查看 MySQL 文档和旧问题/答案,了解如何对 MyISAM 表进行碎片整理(优化表)。
最后但并非最不重要的:
您的表正在使用MyISAM 引擎,这是旧消息。多年前,InnODB 已将其替换为 MySQL 中的默认引擎。这个引擎没有积极的发展。与 InnoDB(事务、外键约束等)和大多数工作负载的性能相比,它缺乏几个特性。我强烈建议您更改您的表(当然在测试您的应用程序和程序不会中断之后)以使用 InnoDB。
重要的是你的问题时,InnoDB可以执行SELECT
和UPDATE
在同一时间(通常情况下)。MyISAM 完全锁定表;更新或选择必须在选择或更新开始之前完成。
当从 MyISAM 切换到 InnoDB 时,一定要调整key_buffer_size
和innodb_buffer_pool_size
.
归档时间: |
|
查看次数: |
1059 次 |
最近记录: |