목록분류 전체보기 (129)
봉황대 in CS
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/DFloj/btsL6SIqlNd/NQOTiS4kuUuBq3kKPM4DW0/img.png)
Global cache vs. Local cache분산 환경에서 Global cache는 다수의 서버가 바라볼 수 있는 캐시를 말한다. 예를 들어, MSA 환경에서 Redis를 캐시 서버로 띄워놓고, 여러 서버들이 DB에 있는 원본 데이터를 조회하는 것이 아니라 Redis에 캐싱되어 있는 데이터를 조회하는 것이다. 이를 통해 DB connection 요청을 줄일 수 있으며 Redis의 빠른 조회 성능을 통해 전체 시스템의 성능도 향상할 수 있다. 하지만 이는 원래 DB로 가야 했던 요청이 캐시 서버로 옮겨진 것일 뿐이라, 만약 조회가 매우 빈번하게 발생하는 데이터인 경우에는 캐시 서버가 그 부하를 모두 견뎌야 한다. 그리고 캐시 서버에서 데이터를 가져올 때마다 서버에서 메모리 할당이 발생하고 이후 GC가..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yhyOx/btsL4NftvBv/hSbFjGRF9V8PpRQYK8nrdK/img.png)
문제 상황이벤트 목록을 조회하는 API를 구현하는 중이었다. 이벤트 목록은 자주 조회되는 데이터라, 매 순간마다 DB에 요청을 보내는 것은 비합리적이다. 한번에 얻을 수 있는 DB connection의 개수는 한정적이기 때문에 DB에게 부하를 많이 주게 되면 connection을 얻기 위해 기다리는 시간이 늘어날 수 밖에 없고, 이벤트 목록 조회 뿐만 아니라 다른 요청들도 DB에게 가게 된다면 그 파급 효과가 더욱 커지게 된다. 따라서 Redis에 캐싱해두는 전략을 사용하여 DB connection 요청을 줄이고자 하였다. (+ 이벤트 목록은 모든 사용자에게 동등하게 보이는 Global 데이터이기 때문에 Redis cache에 올려두어도 문제가 없다.) 조회 로직은 다음과 같다.1. Redis에 캐싱된..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6EQ8C/btsL1tuax9s/pnoXKRuUUoq2GiEiuFJRkK/img.png)
Pagination(또는 Paging)은 데이터를 조회하는 경우, 데이터 전체를 가져오는 것이 아니라 데이터를 페이지라는 일정량으로 쪼개어 요청한 페이지에 대한 데이터만 일부분 가져오는 기법이다. 전체 데이터가 매우 많은 경우에 Pagination을 통해 DB의 부하를 줄일 수 있으며, '무한 스크롤'을 위한 조회 API 구현 시 많이 사용하는 방법이다. Pagination을 구현하는 방법에는 여러 가지가 존재하는데, 이 글에서는 Offset 기반 pagination과 Cursor 기반 pagination을 알아본다. 그리고 nGrinder를 통한 부하 테스트를 진행하여 서로를 비교하고 왜 이런 차이가 발생하는지를 정리한다.예시 상황상품(Product) table에는 300,000건의 데이터가 저장되어 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yGt0n/btsJGgLl1rh/5xlEe6uZamB2UombkqLHw0/img.png)
* 본 글은 ‘친절한 SQL 튜닝’ 책과 Oracle 공식 문서들을 바탕으로 작성하였습니다. (참고한 문서의 링크는 하단에 첨부) SQL Processing 과정 중에서 Soft parse와 Hard parse는 각각 어떤 과정이고, 언제 선택되는가? 먼저 여기에서 중심이 되는 구조인 Library cache에 대해서 알아보자. Library CacheSQL과 PL/SQL code를 재사용할 수 있도록 caching 해두는 메모리 공간이다. System Global Area(SGA) 내부 Shared pool에 위치하여, 모든 server와 background process가 공유한다. Why caching & reusing SQL, PL/SQL codes ?왜 SQL과 PL/SQL code를 ca..
* 본 글은 'Database System Concepts - 7th Edition(데이터베이스 시스템 7판)'을 바탕으로 작성하였습니다. What is phantom read ?i.e., Phantom phenomenon 이미 전 포스팅에서 다룬 개념이지만, 다시 명확하게 하는 겸 작성한다.https://eunajung01.tistory.com/166 두 개의 transaction, T_1과 T_2가 있다고 하자. 둘은 각각 다음과 같은 SQL을 실행한다.# T_1insert into instructor values(11111, 'Feynman', 'Physics', 94000);# T_2select count(*)from instructorwhere dept_name='Physics';T_2는 in..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bgttMI/btsI1UBr0mk/4p9P6pXFwysKXlOo2tLVX1/img.png)
ACID는 데이터베이스의 transaction이 안전하게 수행되는 것을 보장하기 위해서 가져야 하는 특성들을 말한다. Atomicity ensures that either all all the effects of a transaction are reflected in the database, or none are;a failure cannot leave the database in a state where a transaction is partially executed. (All or nothing)Consistency ensures that if the database is initially consistent,the execution of the transaction (by itself) leaves..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/qA3uo/btsITvRmmqQ/jlVoKEFvhMd0LeOojA6C1K/img.png)
What is CPU Pinning ?‘CPU pinning’은 특정 process 또는 thread가 지정한 CPU core에서만 실행되도록 하는 것을 말한다. CPU pinning is a stricter form of CPU affinity,where you bind a process or a thread to a specific CPU core, and prevent it from running on any other core. What is CPU Affinity ?여기서 ‘CPU affinity’란, ‘the ability to specify which CPU cores a process or a thread can run on’특정 process 또는 thread가 지정된 CPU core 집..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bg9QJo/btsIRgdC0Zw/FXzdDis3mijDxBmMqD3bVk/img.png)
학교에서 들었던 OS와 DB 강의 중 synchronization과 관련해서는 ‘lock’에 대해서만 들었는데,여러 Database system 관련 논문들에서 ‘latch’라는 단어를 사용하는 것을 보게 되었다. 그때는 대충 lock과 비슷한 의미겠거니~~ 하면서 넘어갔는데 ㅎ,,이번 방학 동안 읽고 있는 '친절한 SQL 튜닝' 책의 설명에서는 latch와 lock을 완전히 구별해서 말하고 있길래 .. 이 참에 조금 더 공부해서 둘을 비교하면서 정리하고, 나의 견해를 마지막에 남겨보고자 한다. --- 둘의 공통적인 역할은 'Synchronization mechanism을 제공하여, shared resource들을 보호'하는 것이다. 또한, 정의되어 있는 정책에 따라서여러 worker들이 shared..