2017-10-03 13 views
1

실시간 응용 프로그램 중 하나에 NDB 클러스터 (MYSQL 5.7)를 설정하려고합니다 (높은 볼륨의 읽기 및 쓰기 동시성).테이블의 행 수가 많으면 데이터를 가져 오는 데 NDB cluster7.5 (MySQL 5.7)가 더 많은 시간이 걸립니다.

내 설정 -

3 데이터 노드 1 관리 노드 1 MySQL의 노드

모든 노드는 아마존 EC2의 r3.4xlarge 타입입니다. OS - centos 7

나는 동일한 기본 키 데이터가 단일 노드에 있는지 확인하기 위해 하나의 테이블을 만들고 기본 키로 분할했습니다. 키

Table Schema - 
CREATE TABLE ContactsAgentContacts(
     uniqueid integer not null, 
     did varchar(32) not null, 
     nId varchar(50), 
     companyname varchar(50), 
primary key (uniqueid,did) 
) 

ENGINE = NDBCLUSTER 파티션 (한);

이제 각 테이블에 1K 레코드가 포함 된 방식으로 2 백만 개의 레코드가 채워졌습니다.

쿼리 횟수 - SELECT DISTINCT ContactsAgentContacts.companyname AS 'fullname' from ContactsAgentContacts where did='xyz';

성능을 얻기 -

하나의 동시성 - 내가 진짜을 개발하기 위해 노력하고 하나의 1K 기록이

**with 1 read concurrency - 800 ms 
with 25 read concurrency - 1.5 sec 
with 50 read concurrency - 3 sec** 

했다 페치 시간 시스템 어떤 값보다 300ms가 너무 많아서 이번엔 n을 늘리는 것입니다. 표의 행 수는 증가하고 있습니다. 내 솔루션을 최적화하는 방법을 알려주십시오. 기본 키 (한, 경우 uniqueid)에

My configiration . 
config.ini 

[tcp default] 
SendBufferMemory=2M 
ReceiveBufferMemory=2M 

[ndb_mgmd default] 
# Directory for MGM node log files 
DataDir=/var/lib/mysql-cluster 

[ndb_mgmd] 
#Management Node db1 
HostName=10.2.25.129 
NodeId=1 

[ndbd default] 
NoOfReplicas=1 
DataMemory=2000M 
IndexMemory=300M 
LockPagesInMainMemory=1 
#Directory for Data Node 
DataDir=/var/lib/mysql-cluster 
NoOfFragmentLogFiles=300 
MaxNoOfConcurrentOperations=100000 
SchedulerSpinTimer=400 
SchedulerExecutionTimer=100 
RealTimeScheduler=1 
TimeBetweenGlobalCheckpoints=1000 
TimeBetweenEpochs=200 
RedoBuffer=32M 

[ndbd] 
#Data Node db2 
HostName=10.2.18.81 
NodeId=2 
#LockExecuteThreadToCPU=1 
LockMaintThreadsToCPU=0 

[ndbd] 
#Data Node db3 
HostName=10.2.20.15 
NodeId=3 
#LockExecuteThreadToCPU=1 
LockMaintThreadsToCPU=0 

[ndbd] 
#Data Node db4 
HostName=10.2.24.28 
NodeId=4 
#LockExecuteThreadToCPU=1 
LockMaintThreadsToCPU=0 

[mysqld] 
#SQL Node db5 
HostName=10.2.29.42 
NodeId=5 

답변

1

스위치는 기본 키에 주문 지수는 파티션 중 하나 대신에 스캔 전체 테이블 스캔의 을 사용된다는 것을 의미합니다.

이렇게하면 크기가 향상됩니다.

+0

query fetch patteren은 (did, uniqueid)의 조건부가 결합되었지만 여전히 메모리 constarints가이 경우 문제가 될 수 있지만 seprate 보조 인덱스에 추가 할 수는 없습니다. –

+0

정렬 된 색인 추가는 메모리 공간 (DataMemory에서) 당 행당 약 10 바이트입니다. –

+0

감사합니다. @mikael - 2 차 색인 속도가 매우 빠릅니다. –