일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- devops
- laravel
- 맛집
- db
- Git
- tool
- AWS
- 요리
- it
- elasticsearch
- Gradle
- MySQL
- springboot
- Web Server
- jenkins
- Oracle
- javascript
- php
- IntelliJ
- ReactJS
- jsp
- Spring
- JVM
- Spring Boot
- ubuntu
- Spring Batch
- redis
- linux
- Design Patterns
- java
- Today
- Total
목록MySQL (25)
아무거나
Spring Batch + Redis Pipeline 으로 구현한 성능 개선코드 참고는 https://github.com/bkjeon1614/java-example-code/tree/develop/spring-batch-mybatis-codebase 에서 참고 부탁드립니다.Redis Pipeline 이란Redis의 pipeline은 여러 개의 명령어를 한 번에 보내고, 그 결과를 한 번에 받아올 수 있는 메커니즘입니다. 이를 통해 네트워크 오버헤드를 줄이고 Redis 서버의 처리 성능을 최적화할 수 있다. 또한 주의해야할 점은, Redis 서버의 처리량(capacity)을 고려하여 pipeline의 chunk size를 결정해야 한다.주의사항Request Chunk Size: 먼저 요청하는 chunk s..
Spring Batch 성능 개선 사례 정리개선 항목 점검 Flow유지보수가 좋고 코드가 직관적인 범주 내에서 최적화를 진행이후에도 성능 이슈가 발생하면 멀티 스레드 / 파티셔닝과 같은 다양한 방식으로 진행즉, 직관적인 방식과 단계적으로 진행하는 편이 좋다.개선 항목단일 UPDATE -> WHERE IN (Nos..) UPDATE 로 변경하기 코드에서 단일로 UPDATE 를 실행하면 건별로 DB의 I/O 발생이 일어난다. 만약 WHERE IN 으로 변경시 예를 들어 1000개의 단 건일 경우 WHERE IN 으로 500개씩 나누어 처리하면 최대 2건의 I/O 발생// 단일UPDATE userSET grade = 'A'WHERE id = 1;UPDATE userSET grade = 'A'WHERE id =..
파티션 (partition) 대량의 데이터를 테이블에 저장할 때, 물리적으로 별도의 테이블로 분리해서 저장시키는 기법 (단, mysql 내부적으로 분리되어 처리되기 때문에, 파티션이 얼마나 있든 사용자는 하나의 테이블로 보인다.) 특정 DML과 Query의 성능을 향상시키고, 주로 데이터가 실시간으로 쌓이는 데이터베이스 환경에서 효율적이다. 특히 Full Scan에서 데이터의 접근 범위를 줄여 성능 향상을 가져올 수 있습니다. 물리적인 파티셔닝으로 인해 전체 데이터의 훼손 가능성이 줄어들며, 각 파티션 별로 독립적으로 백업하고 복구할 수 있다. 다만, 테이블 간 Join이 일어날 경우 비용이 증가 하며 테이블과 인덱스를 별도로 파티셔닝 할 수는 없다. 파티션 종류 기본적으로 파티셔닝은 수평 분할과 수직 ..
로컬세팅시 자주 사용하는 명령들을 귀찮아서 한 번에 저장하였다. Docker 설치(CentOS8) sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce Elasticsearch + Kibana + Cerebro 설치 (Docker Compose 또는 Docker 중 선택) Docker Compose [docker-compose.yml] version: '3.6' services: elasticsearch: image: 'docker.e..
AWS RDS MySQL VS Aurora Aurora란 AWS가 MySQL과 Postgresql을 호환해서 만든 RDBMS이다. 둘의 가장 큰 차이점은 Storage이며 Aurora는 Shared Storage를 사용하며 MySQL은 Binary Log 기반의 Replication 기반이 아닌 Storage와 Page 기반의 Replication을 사용 Aurora 장점 기본적으로 MySQL 및 PostresSQL 호환 가능하다. 스토리지 용량이 64TB까지 자동 증가된다. (RDS MySQL은 EBS 볼륨 할당을 직접 해야함) 3개의 AZ (가용 영역)에 대해서 6방향 복제를 지원한다 (6개의 스토리지 지원) Read Replica (읽기 전용 복제본)을 15개까지 지원한다 Read Replica에 ..
MySQL에서의 인덱스: insert, update, delete의 성능을 희생하고 select의 성능을 향상(update, delete, insert의 행위가 느린것이며 해당 쿼리를 실행하기 위해 데이터를 조회하는 것은 인덱스가 존재하면 빠름) B-Tree Index(=Balanced Tree) 설계기준 개수는 3~4개가 적당 인덱스의 키는 길면 길수록 성능이 저하(인덱스 키란 데이터타입(ex: varchar, int ..)의 크기로 이해하면 되고, InnoDB Storage Engine에서 전체 인덱스 키 크기는 767byte이다.) 1개의 컬럼만 Index를 적용시 카디널리티(=Cardinality)가 가장 높은 것으로 잡는게 좋음(인덱스로 최대한 효율을 내기 위해서는 많은 부분을 걸러내야 한다. ..
테이블 복사 복사할 테이블이 존재하지 않을경우 CREATE TABLE [대상 테이블명] SELECT * FROM [원본 테이블명] 복사할 테이블이 존재하는 경우 INSERT INTO [대상 테이블명] SELECT * FROM [원본 테이블명] 다른 데이터베이스 간의 테이블 값 복사 INSERT INTO [대상 데이터베이스명].[대상 테이블명] SELECT * FROM [원본 데이터베이스명].[원본테이블명] 중복 레코드 에러가 생길 겨우 예외처리 방법 // ignore 처리 INSERT ignore INTO .....
스칼라 서브쿼리 SQL에서 단일 값을 스칼라(=Scala)값 이라고 표현한다. 즉, 스칼라 서브쿼리(=Scala Subquery)는 SELECT절에 오는 서브쿼리로 결과값으로 1행만 반환하는것을 말한다. -- SELECT문 안에 SELECT문으로 스칼라 서브쿼리 사용 SELECT board_title, ( SELECT board_contents FROM tb_board AS a WHERE a.board_no = b.board_no ) AS board_contents, board_no FROM tb_board AS b WHERE board_contents like '%contents%';
Spring Boot + Mybatis + Mysql 을 활용한 계층형(=hierarchy) 게시판 구현 테이블 설계 CREATE TABLE `tb_board` ( `BOARD_NO` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '게시판 고유 값', `GROUP_NO` int(11) unsigned NOT NULL COMMENT '게시판 그룹번호 (원글은 자신의 값)', `SORT_SEQ` int(2) unsigned NOT NULL COMMENT '게시글 정렬 순번', `BOARD_LVL` int(2) unsigned NOT NULL COMMENT '게시글 레벨(depth)', `BOARD_TITLE` varchar(45) NOT NULL COMMENT '게시..