我正在开发一款类似社交的应用程序,目前使用 AWS 服务进行部署。具体而言,DB 运行在使用 MYSQL 的 RDS 上。
到目前为止,我们正在使用有限数量的用户(大多是朋友)测试该应用程序,结果平均每秒写入 IOPS 为 15。
真正的问题与 db 的非常高的写入延迟有关,始终超过 100ms。RDS 实例是一个 db.m3.xlarge,比我们所需的要多得多。
我尝试在单独的实例中执行负载测试(DB 和 EC2 的配置相同),但即使我发送了更多的请求,也无法复制出这样高的延迟。因此我认为可能是由于表碎片导致的,但我还没有运行表优化,因为在此过程中 DB 将不可访问。
您是否有这个问题的经验?
更多信息:
并且。
感谢您的帮助!
安德烈
真正的问题与 db 的非常高的写入延迟有关,始终超过 100ms。RDS 实例是一个 db.m3.xlarge,比我们所需的要多得多。
我尝试在单独的实例中执行负载测试(DB 和 EC2 的配置相同),但即使我发送了更多的请求,也无法复制出这样高的延迟。因此我认为可能是由于表碎片导致的,但我还没有运行表优化,因为在此过程中 DB 将不可访问。
您是否有这个问题的经验?
更多信息:
- We're using mysql version 5.6.21 with INNODB as storage engine.
- The whole DB is about 100MB in size
The biggest table (called
Message
) has about 790k rows. Concerning this table, the following queryinsert into Message (user_id, creationDate, talk_id, text, id) values (2015, '2015-02-01 16:40:06.737', 18312, 'Some text ', 904870)
took 11s to be executed.
Even worse, the query
insert into Comment (anonymous, user_id, creationDate, deleted, post_id, text, id) values (1, 107347, '2015-02-01 16:40:01.849', 0, 124888, 'Comment text', 265742)
took 14s, but the table Comment has about 160k.
这两个表格是通过以下方式生成的:
CREATE TABLE `comment` (
`id` bigint(20) NOT NULL,
`anonymous` bit(1) NOT NULL,
`creationDate` datetime NOT NULL,
`deleted` bit(1) NOT NULL,
`text` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL,
`user_id` bigint(20) NOT NULL,
`post_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_jhvt6d9ap8gxv67ftrmshdfhj` (`user_id`),
KEY `FK_apirq8ka64iidc18f3k6x5tc5` (`post_id`),
CONSTRAINT `FK_apirq8ka64iidc18f3k6x5tc5` FOREIGN KEY (`post_id`) REFERENCES `post` (`id`),
CONSTRAINT `FK_jhvt6d9ap8gxv67ftrmshdfhj` FOREIGN KEY (`user_id`) REFERENCES `kuser` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
并且。
CREATE TABLE `message` (
`id` bigint(20) NOT NULL,
`creationDate` datetime NOT NULL,
`text` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL,
`user_id` bigint(20) NOT NULL,
`talk_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_d0j091jvk2y4mmfbadnqlohtf` (`user_id`),
KEY `FK_64tr15t6wu5y9u143gxt6o3g2` (`thread_id `),
CONSTRAINT `FK_64tr15t6wu5y9u143gxt6o3g2` FOREIGN KEY (`thread_id`) REFERENCES `thread` (`id`),
CONSTRAINT `FK_d0j091jvk2y4mmfbadnqlohtf` FOREIGN KEY (`user_id`) REFERENCES `kuser` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
一些图表
使用AppDynamics,我能够提取以下图表:
等待状态:查询结束时间是否过长?
页面缓存:
写延迟和队列:
查询缓存
+------------------------------+-----------+
| Variable_name | Value |
+------------------------------+-----------+
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 1048576 |
| query_cache_type | OFF |
| query_cache_wlock_invalidate | OFF |
+------------------------------+-----------+
感谢您的帮助!
安德烈
id
是 UNSIGNED 和 AUTO_INCREMENT 的。你是如何生成这些 ID 的? - Marcus Adams