반응형

mysql 은 기본 defult character 셋을 utfmd4로 설정해놓았다.

다만 이모티콘등을 사용하지 않는데 굳이 utfmd4를 써서 자원을 낭비할 필요가 없다.

대부분의 테이블은 utf8 3Byte로 사용하고 있고

 

테이블 생성 character set = utf8 이다.

이렇게 설정할 경우 varchar 255 * 3 = 762 바이트(해더를 뺀 254 *3)가 넘는 데이터 컬럼은 인덱스 생성이 안된다.

 

mysql> ALTER TABLE entry ADD UNIQUE INDEX (name(255));
ERROR
1071 (42000): Specified key was too long; max key length is 762bytes

 

하지만 reg_id등 암호화된 데이터를 갖은 컬럼도 인덱스 생성이 필요할 경우가 있다.

이럴 가능하게 하려면 일단 mysql 의 시스템 환경변수를 확인해야 한다.

 

1) 지원가능여부확인 

 #mysq. 5.7
mysql> show variables like 'innodb_file_format';
+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| innodb_file_format | Barracuda |
+--------------------+-----------+
1 row in set (0.00 sec)
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'innodb_large_prefix';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| innodb_large_prefix | ON    |
+---------------------+-------+
1 row in set (0.00 sec)



#보통 mysql 5.7은 defualt로 전부 가능하게 설정되어있다.
#가장 좋은 성능튜닝은 version up 이다.ㅎㅎ


# mysql 5.5를 확인해본다.
mysql> show variables like 'innodb_file_format';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| innodb_file_format | Antelope |
+--------------------+----------+
1 row in set (0.00 sec)
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF   |
+-----------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'innodb_large_prefix';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| innodb_large_prefix | OFF   |
+---------------------+-------+
1 row in set (0.00 sec)



#불가능하다. 지원하지 않는다.
#mysql 5.7 버전부터 지원하며 5.6의경우 특정 버전 이상부터 지원하는 것으로 알고 있다.

 

2) 인덱스 생성

1) 임시테이블생성(바라쿠다엔진선택)
아래처럼 임시테이블을 만들고 rename으로 테이블 교체
CREATE TABLE `TMP_LOAD_20180605` (
  ...
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
ROW_FORMAT=DYNAMIC COMMENT='테스트';

 
바라쿠다엔진은 여러 format이 있는데 테이블의 사용 패턴에 따라 다양하게 설정하면 된다. 해당테이블은 update가 빈번히 일어나서 Dynamic으로 설정하였다.
실시간 데이터 연동테이블이라 Rename으로 교체작업을 진행하였다.


3) unique 인덱스 생성
alter table TMP_LOAD_20180605 add unique index IDX_LOAD_20180605_02 (REGID);

 
잘된다...^^ 이제 성능이슈는 한동안.. byebye...
 

 

반응형

'RDB > mysql' 카테고리의 다른 글

mysql shell script 2  (0) 2019.09.09
Mysql shell script 1  (0) 2019.09.09
Xtrabackup 2.49 설치  (0) 2019.09.06
mysql 5.7 binary 설치 3  (0) 2019.08.30
mysql 5.7 binary 설치 2  (0) 2019.08.28
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,