알쓸코지
article thumbnail
[OS] 스레드 풀(Thread Pool)
CS 2024. 4. 26. 00:56

스레드 풀이란?스레드 + 풀`스레드(Thread)`: 프로세스에서 실행되는 흐름의 단위`풀(Pool)`: 필요할 때마다 객체를 할당하고 해제하는 대신, 사용 가능한 초기화된 객체의 집합`스레드 풀(Thread Pool)`: 미리 일정 개수의 스레드를 생성해 두고 작업이 발생하면 사용 가능한 스레드를 할당하여 작업을 처리하는 방식으로, 처리가 완료되면 스레드는 제거되지 않고 다시 스레드 풀로 돌아가 스레드의 반복적인 생성과 소멸을 피하고 시스템 자원을 효율적으로 활용할 수 있다. 스레드 풀의 필요성데이터베이스, 웹 서버 등의 서버 프로그램은 여러 클라이언트의 요청을 반복적으로 실행한다. 이를 처리하기 위해 다음과 같이 서버에 들어오는 요청마다 스레드를 새로 만들어서 처리하고 처리가 끝난 스레드를 버리는 식..

article thumbnail
[OS] Interrupt와 Context Switching
CS 2024. 4. 19. 06:34

인터럽트(Interrupt)란? CPU가 어떤 일을 수행하던 중, 예상치 못한 외부에서 발생한 이벤트로 인해 프로세스를 잠시 중단시키는 것 인터럽트가 발생하면 현재 실행 중인 프로세스나 프로그램이 멈추고, `해당 인터럽트를 처리하는 루틴(인터럽트 핸들러 루틴)`이 실행된다. 인터럽트는 키보드, 마우스 등 I/O 디바이스로 인한 인터럽트, 0으로 숫자를 나누는 산술 연산에서의 인터럽트, 프로세스 오류 등으로 발생한다. 인터럽트의 종류 동기 인터럽트(예외) CPU에 의해 발생하는 인터럽트로, CPU가 예기치 못한 상황을 접했을 때 발생한다. 비동기 인터럽트(하드웨어 인터럽트) 주로 입출력 장치에 의해 발생하는 인터럽트로, 입출력 작업 도중에도 효율적으로 명령을 처리하기 위해 사용한다. 알림과 같은 인터럽트 ..

article thumbnail
[회고] Real MySQL 8.0 뿌시기🔥 스터디 회고록
기타/회고 2024. 4. 11. 15:06

스터디 소개 🌱 기간: 2024.01.05 ~ 2024.04.05 (13주) 소개: Real MySQL 8.0 교재를 활용한 데이터베이스 스터디 시간: 매주 1회, 1시간 30분 / 디스코드 🔗 GitHub 🔗 Notion 프로젝트를 할 때 꼭 사용하는 MySQL였지만, 스키마 및 테이블 생성, 기본 SQL문 실행을 제외하고는 어떤 기능이 있는지, 어떻게 동작하는지 알지 못했다. 그래서 MySQL의 전반적인 개념을 이해하고 MySQL을 더 잘 사용하고 싶어서 스터디에 참여하게 되었다. 매주 정해진 분량을 읽고, 나만의 주제를 정해 블로그 글을 작성한 뒤 발표도 하고 질의응답도 가지는 방식으로 진행했다. 스터디 목표 달성 여부 확인 ✅ 스터디 초기 목표를 다시 돌아보며, 어떤 것을 이뤘는지, 개선할 점은 ..

article thumbnail
[MySQL] MySQL 성능 모니터링 방법
Backend/Database 2024. 4. 4. 18:12

MySQL 성능 모니터링 중요성 데이터베이스 시스템의 안정성과 성능 유지를 위해 중요함 시스템 성능 향상 시스템의 병목 현상을 식별하고 최적화할 수 있음 실행 시간이 오래 걸리는 쿼리, 대기 이벤트, 시스템 리소스 부족 등의 문제를 식별하여 해결함으로써 시스템 성능 향상 장애 예방 및 대응 잠재적인 문제를 사전에 감지하여 장애를 예방할 수 있음 CPU 사용률이 급격히 증가하거나, 디스크 공간이 부족해지는 등의 문제를 식별할 수 있음 최적화된 리소스 관리 모니터링을 통해 리소스 사용량을 실시간으로 파악할 수 있음 리소스의 효율적인 할당과 관리가 가능해지며, 불필요한 리소스 소모를 방지할 수 있음 MySQL 성능 모니터링 방법 performance 스키마 & sys 스키마 사용 MySQL 서버의 내부 작업 ..

article thumbnail
[MySQL] 데이터베이스 확장 방식
Backend/Database 2024. 3. 21. 18:59

사용자 수의 증가로 인해 발생하는 트래픽을 안정적으로 처리하기 위해서, 데이터 손실을 방지하기 위해서 등 서비스 운영에 있어 데이터베이스 확장은 중요한 요소라고 할 수 있다. 오늘은 데이터베이스 확장 방식인 클러스터링, 복제에 대해서 간단히 알아보고 어떤 상황에 적합한지 정리해보고자 한다. 데이터베이스 구성 방식 가장 기본적인 데이터베이스 구성은 다음과 같이 `DB 서버`와 디스크 역할을 하는 `DB 스토리지`가 1:1이 되도록 구성하는 것이다. 이러한 구조로는 트래픽의 증가로 성능이 저하되거나, 데이터베이스 서버 다운으로 인한 서비스 중단 등의 문제를 해결할 수 없다. `클러스터링`, `복제` 기법을 활용하여 데이터베이스를 확장하여 이러한 문제를 해결할 수 있다. 클러스터링(Clustering) 여러 ..

article thumbnail
[MySQL] 커서(Cursor)
Backend/Database 2024. 3. 14. 15:07

커서 테이블에서 여러 개의 행을 쿼리한 후, 쿼리 결과 집합을 한 행씩 처리하기 위한 개체 주로 SQL 쿼리 결과 집합을 반복적으로 탐색하고 처리하는 데 사용됨 스토어드 프로시저, 스토어드 함수, 트리거에서 커서를 사용할 수 있음 커서 분류 속성에 따라 두 그룹으로 분류해 보았다. 변화에 얼마나 민감한지에 따라 - Sensitive / Insensitive / Asensitive Sensitive Cursor 일치하는 레코드 정보를 실제 레코드의 포인터만으로 유지하는 형태 커서를 이용해 칼럼의 데이터를 변경하거나 삭제하는 것이 가능함 별도로 임시 테이블로 레코드를 복사하지 않기 때문에 커서의 오픈이 빠름 Insensitive Cursor 일치하는 레코드를 별도의 임시 테이블로 복사해서 가지고 있는 형태 ..