Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 即使使用索引,AWS RDS表读取速度也很慢_Mysql_Amazon Web Services_Indexing - Fatal编程技术网

Mysql 即使使用索引,AWS RDS表读取速度也很慢

Mysql 即使使用索引,AWS RDS表读取速度也很慢,mysql,amazon-web-services,indexing,Mysql,Amazon Web Services,Indexing,我对AWS很陌生 我有两台服务器。一个是我的站点服务器(它位于我的公司而不是我的计算机上,我称它为服务器A),另一个是在AWS上。我正在将表从站点服务器迁移到AWS服务器 我的问题是AWS服务器的表读取速度慢。我不确定延迟是来自DB部分还是可以通过AWS设置解决(如果我可以在这里做些什么) 服务器A基于MySQL(不确定版本),AWS基于Aurora 我的问题是: SELECT sessionId, sequence, timestamp, source, sourceType, repId,

我对AWS很陌生

我有两台服务器。一个是我的站点服务器(它位于我的公司而不是我的计算机上,我称它为服务器A),另一个是在AWS上。我正在将表从站点服务器迁移到AWS服务器

我的问题是AWS服务器的表读取速度慢。我不确定延迟是来自DB部分还是可以通过AWS设置解决(如果我可以在这里做些什么)

服务器A基于MySQL(不确定版本),AWS基于Aurora

我的问题是:

SELECT sessionId, sequence, timestamp, source, sourceType, repId, 
   content, contentType FROM chatLines 
   WHERE sessionId=%s ORDER BY sequence ASC;
我试图找出这是否是索引问题,但服务器A和AWS服务器的索引信息相同,如下所示:

Table, Non_unique, Key_name, Seq_in_index, Column_name, Collation, Cardinality, Index_type

chatLines,  0,  PRIMARY,    1,  id, A,  2492436 ,           BTREE       
chatLines,  0,  IDX_CHATLINES_SESSIONID_SEQUENCE,   1,  sessionId,  A,  166162,             BTREE       
chatLines   0   IDX_CHATLINES_SESSIONID_SEQUENCE    2   sequence    A   2492436             BTREE       
chatLines   1   IDX_CHATLINES_SESSIONID_TIMESTAMP   1   sessionId   A   166162              BTREE       
chatLines   1   IDX_CHATLINES_SESSIONID_TIMESTAMP   2   timestamp   A   2492436             BTREE       
chatLines   1   IDX_CHATLINES_SESSIONID_BYTYPE  1   sessionId   A   207703              BTREE       
chatLines   1   IDX_CHATLINES_SESSIONID_BYTYPE  2   sourceType  A   623109              BTREE       
这是我用来创建表的表模式。我从MySQL Workbench->import schema中得到了这个

-- Table structure for table `chatLines`
--

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `chatLines` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sessionId` varchar(20) NOT NULL,
`sequence` smallint(6) NOT NULL,
`timestamp` datetime NOT NULL,
`source` varchar(100) NOT NULL,
`sourceType` char(1) NOT NULL,
`repId` varchar(20) DEFAULT NULL,
`content` mediumtext,
`contentType` char(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `IDX_CHATLINES_SESSIONID_SEQUENCE` (`sessionId`,`sequence`),
KEY `IDX_CHATLINES_SESSIONID_TIMESTAMP` (`sessionId`,`timestamp`),
KEY `IDX_CHATLINES_SESSIONID_BYTYPE` (`sessionId`,`sourceType`),
CONSTRAINT `chatLines_ibfk_1` FOREIGN KEY (`sessionId`) 
  REFERENCES `chatSessions` (`sessionId`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=308232770 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
以下是解释选择结果:

explain select * from chatLines 
where sessionId = 'ID1560302010' order by sequence asc

1. Server A

id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, SIMPLE, chatLines, ref, IDX_CHATLINES_SESSIONID_SEQUENCE,IDX_CHATLINES_SESSIONID_TIMESTAMP,IDX_CHATLINES_SESSIONID_BYTYPE, IDX_CHATLINES_SESSIONID_SEQUENCE, 62, const, 16, Using where

2. AWS

id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, SIMPLE, chatLines, ref, IDX_CHATLINES_SESSIONID_SEQUENCE,IDX_CHATLINES_SESSIONID_TIMESTAMP,IDX_CHATLINES_SESSIONID_BYTYPE, IDX_CHATLINES_SESSIONID_SEQUENCE, 62, const, 16,**Using index condition;** Using where
这里是AWS参数(我认为它很重要)配置。请注意,AWS的“选择”速度较慢:

  • 查询缓存大小:{DBInstanceClassMemory/24}

  • 查询\缓存\类型:1

  • innodb_缓冲区_池_大小:{DBInstanceClassMemory*3/4}

  • 开关innodb\u自适应\u哈希\u索引=1


  • 去掉
    id
    和当前的
    主键
    。将唯一索引更改为

    PRIMARY KEY(`sessionId`,`sequence`)
    
    更改后,相关查询将运行得更快(在任何机器上),并且可能大多数其他查询也会运行得更快

    这一变化还将消除您可能面临的问题:
    id
    的上限约为20亿,而您已经达到了3亿

    至于为什么这两台服务器的性能不同,显然它们运行的是不同版本的MySQL。哪个版本


    我们也来看看别的。每个有多少内存?innodb\u buffer\u pool\u size的值是多少??

    模式是什么样的?编辑问题以添加
    SHOW CREATE TABLE chatLines
    。此处信息不足,无法回答所问问题。(有人问过问题吗?)没有提到EC2实例的大小、聊天行的存储引擎(InnoDB或MyISAM)、您运行的MySQL版本等。我们只是猜测您已经在Linux上安装了MySQL Community Edition。我们不知道您是如何测量/确定“表格读取速度慢”的。我知道你有一个性能问题,但是这个“问题”的表达方式,没有任何方法可以回答。同时发布你的
    EXPLAIN SELECT…
    的结果,谢谢你更新你的问题。解释@spencer7593并进行诊断:storage engine=InnoDB✔. MySQL版本=?EC2实例大小=?表中的行数=?另外,请尝试不使用ORDER BY的查询,并告诉我这是否有助于提高性能?谢谢您的回答。显然,这是AWS设置的问题。我在我的机器上创建了本地数据库,我的本地数据库和其他服务器一样快速。RDS中的aws设置(我认为这可能很重要)如下:innodb_buffer_pool_size:{DBInstanceClassMemory*3/4}query_cache_size:{DBInstanceClassMemory/24}query_cache_type:1请告诉我是否有任何其他重要参数需要注意。3/4听起来不错。查询缓存设置不太可能影响此问题。但是,我建议
    query\u cache\u size
    不要超过50M。不同的RAM数量?不同的磁盘系统(SSD与旋转等)?两台服务器上的表都是InnoDB吗?版本很重要,因为
    使用索引条件是一项相对较新的功能。