컬럼 크기가 대용량인 경우 DB 버퍼 풀에 전부 올라오는지 궁금합니다
63
10 câu hỏi đã được viết
컬럼의 크기가 평균 1MB 정도 된다고 했을 때DB 버퍼 풀에 전부 올라오고 나서 서비스 서버로 올라가게 되는지 궁금 합니다 !
서비스 서버 단에서 스트림으로 처리 한다고 해서 DB 메모리 공간도 같이 효율적으로 사용 되는지도 궁금 합니다 !
Câu trả lời 2
1
안녕하세요. ggg7515님
결론부터 말씀드리면, 해당 컬럼 값 전체가 버퍼 풀을 거쳐서 올라옵니다.
InnoDB는 데이터를 항상 페이지(기본 16KB) 단위로 읽고 씁니다. 그런데 1MB 정도의 큰 컬럼 값은 하나의 페이지에 담을 수 없기 때문에, InnoDB는 이런 값을 별도의 외부 페이지(overflow page)에 나누어 저장하고, 원래 레코드에는 그 위치를 가리키는 포인터만 남겨둡니다.
따라서 이 컬럼을 조회하면 InnoDB는 포인터를 따라가며 1MB를 담고 있는 약 64개의 외부 페이지를 모두 읽어야 하는데, InnoDB의 모든 페이지 읽기는 반드시 버퍼 풀을 통해서만 일어납니다. 대용량 값이라고 해서 버퍼 풀을 우회하는 별도 경로는 없습니다. 값 전체가 버퍼 풀에 올라온 뒤에 MySQL 서버가 이를 조합해서 클라이언트로 전송합니다.
두 번째 질문도 중요한 포인트인데요, 애플리케이션에서의 스트림 처리는 결과를 행 단위로 받아서 애플리케이션 서버의 메모리를 아끼는 기술입니다. 하지만 DB 입장에서는 어차피 각 행을 만들기 위해 해당 컬럼 전체를 버퍼 풀에 읽어야 하므로, 클라이언트가 스트림으로 받는다고 해서 DB의 메모리 사용이 줄어들지는 않습니다. 오히려 스트림 방식은 커넥션을 더 오래 점유하는 비용도 있습니다.
추가로 실무 관점을 말씀드리면, 이런 대용량 컬럼은 버퍼 풀을 빠르게 채워서 정작 자주 쓰는 인덱스와 데이터 페이지를 밀어낼 수 있습니다. 그래서 실무에서는 보통 다음과 같이 설계합니다. 첫째, 대용량 컬럼은 꼭 필요한 경우에만 SELECT 합니다(SELECT *를 피하고 컬럼을 명시). 둘째, 일부만 필요하면 SUBSTRING으로 나누어 읽는 방법도 있습니다. 셋째, 1MB급 데이터라면 파일 스토리지(S3 등)에 저장하고 DB에는 메타데이터와 경로만 보관하는 설계를 가장 많이 사용합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
ggg7515님, 데이터베이스 버퍼 풀에 대해서 질문해주셨군요.
버퍼 풀은 데이터베이스에서 디스크 I/O를 줄이고 성능을 향상시키기 위한 메모리 공간입니다. 일반적으로 버퍼 풀은 자주 사용되는 데이터 및 인덱스를 메모리에 적재하여 빠르게 접근할 수 있도록 돕습니다. 하지만, 모든 데이터를 버퍼 풀에 올리는 것은 현실적으로 한계가 있습니다.
특히, 컬럼의 크기가 평균 1MB 정도로 대용량일 경우, 전체 데이터를 버퍼 풀에 적재하는 것은 어려울 수 있습니다. 이는 버퍼 풀의 크기와 설정에 따라 다르겠지만, 버퍼 풀은 보통 자주 접근하는 작은 데이터 블록을 캐싱하는데 최적화되어 있으며, 대용량 컬럼을 모두 메모리에 적재하는 것은 비효율적일 수 있습니다.
스트리밍 처리는 이러한 제한점을 해결하는 방법 중 하나입니다. 스트리밍 처리를 통해 데이터의 일부만 메모리에 올리고 필요한 부분만을 네트워크를 통해 처리할 수 있어, 메모리와 네트워크 자원을 좀 더 효율적으로 사용할 수 있습니다.
또한, 데이터베이스에서 대용량 데이터를 처리할 때는 데이터베이스 설계 및 구성, 인덱싱 전략의 최적화가 중요합니다. 효율적인 데이터 처리 및 성능 최적화를 위해 다양한 접근을 고려해 보시는 것을 추천드립니다.
추가적인 도움이 필요하시다면, 참고 링크도 함께 제공해드리겠습니다:
- Kafka Documentation - Hardware and OS
감사합니다.
app logs 데이터로 쿼리 연습
0
5
1
ArticleReadService 관련 질문
0
10
0
마스터패스...
0
14
1
kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.
1
30
1
[과제] 연습문제 쿼리 작성했습니다!
0
8
1
SubStack 신청 완료했습니다!
0
12
2
domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다
1
22
1
실습소 페이지
0
18
2
노드
0
16
1
57번
0
28
1
안녕하세요. 요약집 어디서 볼 수 있을까요?
0
27
1
아무도 모르게 책 내시면 모르실 줄 알고!!
1
42
2
Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면
1
57
1
스크립트에 대해 질문 있습니다.
1
51
1
64비트 다운로드 링크
0
26
2
같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!
2
55
1
리뷰
0
37
2
이진 트리 노드
0
44
1
통계정보 갱신 질문
0
62
2
PK 관련하여 궁금한 점이 있어서 질문 드립니다.
0
69
2
탐색을 한번 더 하지 않게 하는 방식 중 어댑티브 해시 방식도 맞는지 궁금 합니다.
0
71
2
실습데이터 ORDERS 생성 시간 질문요...
0
94
3
MySQL 서버구조 쿼리파서 질문 있습니다 !
0
67
1
Postgresql 아키텍처 업데이트
1
85
2

