DB 12

[YCSB] MySQL 8.4.5에 YCSB 실행하기

YCSB는 야후에서 만든 벤치마크인데, 원래 NoSQL 용으로 개발되었다.하지만 많은 OLTP 논문에서 TPC-C를 비롯해 YCSB까지는 제시하고 있다. 실생활과 유사한 TPC-C는 반드시 필요한 것 같고, Read-Write ratio를 조절하는 것에 대한 차이는 YCSB로 제시한다.나는 MySQL 8.4.5를 사용하고 있기 때문에 여기서 YCSB를 돌리는 과정을 글로 남겨본다. 두 가지 버전이 있는데, 하나는 brain frank cooper의 YCSB와 benchbase에 구현된 YCSB가 있다.뭐가 원본인지는 모르겠지만... benchbase가 여러모로 범용성이 좋은 것 같아서 후자 추천! [Brain Frank Cooper 버전]0. 다운로드- YCSB 다운로드$ git clone https..

DB 2025.08.20

[기타] TPCC++ - write skew 테스트 용 벤치마크

Serializable Isolation for Snapshot Databases(MICHAEL J. CAHILL, UWE ROHM, and ALAN D. FEKETE) 라는 아티클에 소개된 벤치마크다.SI에서 SSI로 발전에서 가장 큰 부분인 Write Skew를 검증하기 위해서 개발되었다. 1. 개요TPC-C는 OLTP 워크로드 테스트에 가장 대표적인 벤치마크라 할 수 있다. 하지만 이 TPC-C만으로는 write skew가 개선되었는지를 충분히 테스트하기엔 아쉬운 점이 많다.그래서 이 연구에서는 직렬성을 깨트릴 수 있는 'Credit Check'라는 새로운 트랜잭션을 추가하였다. Write Skew라는 문제는 결국 두 트랜잭션이 동시에 같은 값을 읽고 쓰려고 할 때 발생하는 문제다. (RW-depe..

DB 2025.02.05

[논문리뷰] Serializable Snapshot Isolation in PostgreSQL (VLDB '12)

MySQL, Oracle의 Locking 기법과는 좀 다른 Snapshot Isolation에 대해 간략하게 엿볼 수 있는 논문이다.특히 Serializability에 대해 고민해볼 수 있는 좋은 논문이라 생각한다. 나는 Write Skew와 SSI의 구현을 중심적으로 읽고 정리하였다.더 자세한 내용은 논문을 읽어보길 바란다. 논문이 잘 쓰여서 재밌게 읽을 수 있을 것 같다.  Snapshot Isolation (SI)Read가 트랜잭션 시작된 시점의 Committed Version 기준트랜잭션이 시작된 이후의 변경 사항을 볼 수 없음한 트랜잭션 안에서는 일관성 보장First-Writer-WinsPostgreSQL: MVCC 방식을 사용하여 구현Repeatable Read라 불림 장점Dirty Reads..

DB 2025.01.31

[MySQL/InnoDB] Update와 Insert의 Locking, Blocking(대기) - 코드를 중심으로

MySQL 코드를 분석하면서 배운 점을 정리한 글입니다.학부생 수준의 이해를 기반으로 한 글이니, 참고용으로만 보시면 됩니다.웬만하면 공식 문서를 직접 보거나 코드를 확인해주시는 걸 추천드립니다. (일반 서버 개발자들을 위한 글이 아닙니다!! MySQL 연구를 위한 글입니다!! 개발에는 아무 도움이 안 되는 글입니다!!)  Serializable mode를 가정한 설명입니다.Lock 충돌을 확인하고, 충돌에 대해 blocking되어 대기 상태로 빠지는 부분을 위주로 공부하였습니다.   Update의 Locking업데이트의 경우 Locking이 좀 더 일반적이고 직관적으로 진행된다. 코드로는row_search_mvcc() -> sel_set_rec_lock() -> lock_clust_rec_read_ch..

DB 2024.09.30

[논문리뷰] Controlled Lock Violation (SIGMOD’13)

학부연구생을 시작하면서 처음 읽은 논문입니다. 그때 작성한 리뷰라 풋풋한 맛이 있는 것 같습니다. 전문적인 시선보다는 그냥 학생이 썼다 생각하고 봐주시길 바랍니다.Locking에 관심있는 사람이라면 꼭 읽어보길 추천드립니다.하지만 아무도 관심 없겠죠......    너무 길어서 노션으로 첨부합니다https://hjinu.notion.site/Controlled-Lock-Violation-71c9cadb29ce4fdc9fdab2ef39110a0e?pvs=4 Controlled Lock Violation | Notion정보hjinu.notion.site  참고https://dl.acm.org/doi/pdf/10.1145/2463676.2465325

DB 2024.09.30

[논문리뷰] Releasing Locks As Early As You Can: Reducing Contention of Hotspots by Violating Two-Phase Locking (SIGMOD ’21)

논문:https://dl.acm.org/doi/pdf/10.1145/3448016.3457294 옛날엔 노션에서 복붙이 됐는데 이젠 안 되네요... 어쩔 수 없이 마크다운으로 내보낸 다음 복붙했습니다.가독성이 좀 안 좋아도 이해 부탁드립니다! # Introduction### 문제 상황 - Hotspot- Hotspot: 작은 수의 레코드(tuples)가 집중적으로 읽히거나 쓰이면서 동시에 여러 트랜잭션이 해당 레코드를 경쟁하는 상황 - 이런 hotspot은 전체 실행 시간 중 일부만 차지하지만, 그 전체 트랜잭션은 Blocking 상태로 만들어 병렬성 저하### 한계 - 2PL- Hotspot은 잠깐 쓰이고 끝나더라도, strict 2PL에서는 트랜잭션이 커밋될 때까지 모든 락을 유지해야 함 - ..

DB 2024.09.30

[MySQL] ERROR: Another process with pid ~ is using unix socket file.

갑자기... 뜬 에러... 진짜 갑자기... 아침부터 급 당황했지만 쉽게 해결할 수 있었다.다른 프로세스가 해당 socket을 쓰고 있다는 뜻.ps -ef 명령어를 쳐도 해당 pid의 프로세스가 뜨지 않는다. 프로세스는 종료됐는데 socket이 release 되지 않는 건 아닐까 싶음. 해결법$ mysql_config --socket$ cd /tmp$ rm mysql.sock.lockmysql_config --socket 명령어를 입력하면 socket 파일의 주소를 알려준다.내 경우에는 /tmp/mysql.sock 였음. 여기로 이동해서 sock.lock 파일을 삭제해준다. 나는 sock 파일도 삭제했다.삭제하면 알아서 다시 생성해준다. 끝! 참고https://velog.io/@ounols/docker%..

DB 2024.09.30

[MySQL] Rollback Pointer 기반의 MVCC 이해하기 - 코드 중심으로

DB의 concurrency control 분야를 연구하면서, innodb의 mvcc 로직을 코드 수준으로 이해할 필요가 있다고 생각하여 공부한 내용을 블로그에 작성해보려 합니다.아래 내용은 제가 직접 찾아보면서 나름의 이해를 바탕으로 쓴 글입니다.저는 일개 학부연구생으로 전문가가 아닙니다. 그냥 워낙 innodb 관련된 글이 없으므로(특히 한국어는) 조금이라도 도움이 되었으면 해서 블로그로 남기는 것이니 참고만 하시는 게 좋을 것 같습니다. 코드 기준은 MySQL-5.7.24 입니다.아래 모든 코드는 실제 코드를 쉽게 이해하기 위해 임의로 작성한 수도코드입니다. Flow만 참고하면 됩니다.    더보기더보기0. 관련 용어 정리 0.1. Clustered Index와 Secondary Index 개념- ..

DB 2024.02.06

[MySQL] 전문검색 FullText Search 기능 이용해 검색 구현하기 - AWS RDS innoDB 8.0.28

지금까지 검색 기능에서 LIKE %% 을 이요하고 있었다. 이유는 그냥.. 시간이 없어서...ㅋㅋㅋㅋ 검색 기능을 구현하긴 해야 하는데, 검색 엔진 도입하자니 시간이 없고 데이터 양도 많지 않아서 속도 면에서도 나쁘지 않았다. 엘라스틱 서치 도입하고 싶어서 강의까지 결제했는데 몰아치는 업무에 그냥 방치 중,, 그러다 MySQL에서 제공해주는 전문 검색 기능이 있다는 걸 알게 되었고, 외부 검색 엔진보다 쉽게 도입할 수 있을 것 같아서 스터디 겸 도전해보게 되었다. * 필자는 AWS의 RDS 서비스를 통해 MySQL을 서비스하고 있다. 1. 먼저 테스트 테이블을 만들어준다. 나는 이미 덤프 테이블이 하나 있어서 그걸 쓸 예정. 2. 원하는 칼럼에 인덱스를 만들어준다. MySQL Workbench를 기준으로..

DB 2022.09.14

[DynamoDB] 비동기 처리 - 익명함수를 기다리지 않고 return 하는 문제

다이나모에 쿼리를 보내고 그 값을 클라이언트에 전달하는 상황이었다. AWS 독스에 있는 코드를 참고해서 docClient.query(params, function(err, data) { if (err) { console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); } else { console.log("Query succeeded."); data.Items.forEach(function(item) { console.log(" -", item.year + ": " + item.title); }); } }); 의 형식을 이용해, 쿼리의 값을 바로 함수로 넘기고, 그 값을 가공해 클라이언트로 넘기려고 하였다. export default as..

DB 2022.01.21