2016-08-24 11 views
-1

AWSの新機能です。AWS RDSテーブルインデックス付きでも読み込みが遅い

私は2台のサーバーを持っています。 1つは自分のサイトサーバー(自分のコンピュータではなく、私のコンピュータではなく、サーバーAと呼ぶ)ともう1つはAWSです。サイトサーバーからAWSサーバーにテーブルを移行しています。

私の問題は、テーブルの読み取りは、AWSサーバーの遅いです。レイテンシがDB部分から来ているかどうか、またはAWS設定から解決できるかどうかはわかりません(もし私がここでできることがあれば)。

サーバAは(バージョンがわからない)のMySQLに基づいており、AWSはオーロラに基づいています。

私のクエリはこれです:私は、これはインデックスの問題であれば見つけることを試みたが、次のようにインデックス情報がサーバAとAWSサーバと同じである

SELECT sessionId, sequence, timestamp, source, sourceType, repId, 
    content, contentType FROM chatLines 
    WHERE sessionId=%s ORDER BY sequence ASC; 

:ここ

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  

です私はテーブルを作成するために使用したテーブルのスキーマです。ここで

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のパラメータ設定(私はそれが重要であると考えている)である:ここでは

-- 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である>輸入スキーマ - 私は、MySQL Workbenchのからこれを得ました。 "SELECT" は、AWSのために遅いことに注意してください:

  1. query_cache_size:{DBInstanceClassMemory/24}

  2. query_cache_type:1

  3. innodb_buffer_pool_size:{DBInstanceClassMemory * 3/4}

  4. スイッチinnodb_adaptive_hash_index = 1

+0

スキーマはどのようなものですか?質問を編集して、 'SHOW CREATE TABLE chatLines'を追加してください。 – tadman

+0

質問された質問には十分な情報がありません。 (質問がありましたか?)EC2インスタンスのサイズ変更、 'chatlines'テーブル(InnoDBまたはMyISAM)のストレージエンジン、実行しているMySQLのバージョンなどについては言及していません.MySQLコミュニティがあると推測していますLinuxにインストールされたエディション。そして、私たちは、あなたがどのように「テーブル読み取りが遅い」と測定/判断しているのか分かりません。私はパフォーマンスの問題があることを理解していますが、この「質問」が提示される方法は、回答する方法がありません。 – spencer7593

+0

あなたの 'EXPLAIN SELECT ... 'の結果を投稿してください – Sylwit

答えて

0

idと現在のPRIMARY KEYを取り除く。ユニークインデックスを

PRIMARY KEY(`sessionId`,`sequence`) 

に変更します。この変更後、問題のクエリは(すべてのコンピュータで)高速に実行され、おそらく他のほとんどのクエリは高速に実行されます。

この変更により、問題が解決されます。idには約20億の制限があり、すでに3億になっています。 2台のサーバーが別々に行う理由については

、彼らは明らかにMySQLの別のバージョンを実行しています。どのバージョン?

ものは何かを確認してみましょう。どれくらいのRAMがありますか? innodb_buffer_pool_sizeの値は何ですか?

+0

はありがとうござい答え。 AWSの設定問題であることは明らかです。私は自分のマシンにローカルDBを作成し、私のローカルは他のサーバーと同じように高速です。次のようにRDSがあるから(私はこれが重要かもしれないと思う)の設定 AWS: innodb_buffer_pool_size:{DBInstanceClassMemory * 3/4} query_cache_size:{DBInstanceClassMemory/24} query_cache_type:1 は、他のがあれば私に知らせてください重要なパラメータ私は世話をする必要があります。 –

+0

3/4良い音。 query_cacheの設定は、この質問に影響する可能性は低いです。しかし、私は 'query_cache_size'は50M以下であることをお勧めします。 –

+1

RAMの量が異なっていますか?異なるディスクシステム(SSDとスピンなど) –

関連する問題