MySQL의 온라인 DDL 및 DML 동시 관계 요약 차단

세 가지 방법으로 MySQL의 DDL 작업은 수행
1 INPLACE, 동작 동안 DDL은 DML 동작이 정상에서 수행 될 수 있고, 판독 및 기록 테이블에 영향을 미치지 않으며, 따라서 데이터베이스의 전체 부하를 최소화 연관된 COPY 프로세스 디스크 I / O 및 CPU 사이클을 방지하기 위해.
부하를 최소화하는 DDL 작업 중에 좋은 성능과 높은 처리량을 유지하는 데 도움이됩니다.
2 COPY 허용 DDL 동시 실행, 실행 테이블 있지만 기입 판독하는 복수의 관통.
임시 테이블의 새로운 구조를 만들어 프로세스, 새로운 테이블의 재 명명, 원래의 테이블이 완료 삭제, 임시 테이블에 데이터를 복사, 원래의 테이블을 복사해야합니다,
3, 인스턴트는 소개와 MySQL 8.0.12에서 기본적으로 사용하기 시작했다. INSTANT 알고리즘은 현재와 같은 열을 추가하는 등의 DDL 작업의 종류의 작은을 지원, 다른 유형은 여전히 ​​INPLACE을 기본값으로 설정됩니다.

다음은 요약 다양한 DDL 작업의 구현의 MySQL의 5.7 버전입니다 :
구현 DDL은 상대 고정 = YES이면 (1)는 , 다음 DDL 변화 동시 DML을 지원 실행 변경 검색 추가 및 삭제의 테이블에 영향을주지 할 
  1.1 구현이 DDL 상대 고정 = YES 및 재생성 표 = 아니오 예로 다음 일부만을 수정 메타 데이터, 즉 메타 데이터만을 변경할 경우, 유사한 INSTANT 
  DDL의 구현이 상대 고정 = YES 및 재 구축 표 = 경우 1.2, 예, 다음 없음을 일정 만 수정합니다 메타 데이터, 같은 CPU 및 IO와 같은 자원의 재 구축 표 소비를 고려
DDL의 구현 상대 고정 인 경우 2, = NO 다음 DDL 테이블의 실행 중에 변화 읽기 전용, 쓰기 블록 (추가 및 삭제)은 또한 CPU와 IO 등 리소스의 소비를 고려해야
1.1 유사 3. 만약 인스턴트 방법,
 
다음과 같이 기간 동안 동시 DML 작업을 지원하지 않으며, 타사 도구를 고려해야 할 필요가 없다 동시 DML의 작동에 영향을하고, 필요 그러한 CPU 및 IO 같은 자원의 소비를 고려하지 않을 경우 밖으로 표시했다.
타사 도구를 사용하여 IO 및 CPU 리소스를 소모하기 위해 동일한 필요가 있기 때문에.
정상 작동의 경우, 필드 데이터 유형을 수정하고, 동시 DML을 지원하지 않지만 다른 모든 동시 DML DDL 실행하는 동안, 열, 나열된 세 가지 파생 필드 순서뿐만 아니라 파티션에 관련된 대부분의 작업 등을 도출 증가.
 
인덱스 작업
CREATE  INDEX의 이름을 ON  테이블 (col_list) ( ALTER  TABLE의 tbl_name를 추가  INDEX의 이름 (col_list))
 DROP  INDEX의 이름 ON  테이블 ( ALTER  TABLE의 tbl_name를의 DROP의  INDEX의 이름)
 ALTER  TABLE의 tbl_name를 이름 바꾸기 INDEX old_index_name TO의 new_index_name, 알고리즘 = INPLACE, LOCK = NONE;
CREATE FULLTEXT INDEX의 이름 ON  테이블 ( 컬럼 );
CREATE  TABLE의 기하 구조 (g의 GEOMETRY NOT  NULL을 ); ALTER  TABLE의 기하 구조 ADD SPATIAL INDEX (g) ALGORITHM = INPLACE, LOCK = SHARED;
ALTER  TABLE tbl_name에의 DROP의  INDEX의 I1, ADD의  INDEX를 I1 (key_part, ...) BTREE, ALGORITHM USING = INPLACE 단계;
 
기본 키 조작
ALTER   tbl_name에의 ADD  PRIMARY  KEY ( 컬럼 )
 ALTER의   tbl_name를 DROP  PRIMARY  KEY 
ALTER의   tbl_name를 DROP  PRIMARY  KEY , ADD  PRIMARY  KEY (  )

열 작업

ALTER tbl_name에의 ADD 항목명 column_definition,
ALTER tbl_name를 DROP의 COLUMN_NAME
ALTER TABLE CHANGE old_col_name new_col_name DATA_TYPE TBL
ALTER의 tbl_name를 MODIFY COL_NAME의 column_definition FIRST
ALTER C1 tbl_name를 변경 C1 BIGINT
ALTER tbl_name를 변경 칼럼 C1 C1 VARCHAR ( 255 )
ALTER의 tbl_name를 ALTER COLUMN의 COL의 SET의 DEFAULT 문자
ALTER TABLE TBL ALTER COLUMN의 COL의 DROP의 DEFAULT
ALTER TABLE의 테이블 AUTO_INCREMENT = NEXT_VALUE
ALTER의 tbl_name를 MODIFY COLUMN의 COLUMN_NAME의 DATA_TYPE NULL
ALTER의 tbl_name를 MODIFY COLUMN의 COLUMN_NAME의 DATA_TYPE NOT NULL
ALTER TABLE T1 MODIFY COLUMN의 C1의 ENUM ( ' ' , ' B ' , ' C ' , ' D ' )
 
유도 열 (열 생성 ) 운전
ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) STORED)
ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED FIRST
ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL)
ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL FIRST
ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE
 
外键操作
ALTER TABLE tbl1 ADD CONSTRAINT fk_name FOREIGN KEY index (col1)REFERENCES tbl2(col2) referential_actions;
ALTER TABLE tbl DROP FOREIGN KEY fk_name;
 
表操作
 
ALTER TABLE tbl_name ROW_FORMAT = row_format
ALTER TABLE tbl_name KEY_BLOCK_SIZE = value
ALTER TABLE tbl_name STATS_PERSISTENT=0, STATS_SAMPLE_PAGES=20, STATS_AUTO_RECALC=1, ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE tbl_name CHARACTER SET = charset_name, ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name, ALGORITHM=COPY;
OPTIMIZE
TABLE tbl_name;
ALTER TABLE tbl_name FORCE, ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE tbl_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE old_tbl_name RENAME TO new_tbl_name, ALGORITHM=INPLACE, LOCK=NONE;
 
表空间操作
ALTER TABLE tbl_name ENCRYPTION='Y', ALGORITHM=COPY;

 

分区操作
 

추천

출처www.linuxidc.com/Linux/2019-11/161583.htm