일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스택머신
- 필수 스크립트
- 안전하게 테이블 변경
- 마운트
- 밑바닥부터 구현하는 컴퓨팅 시스템
- 메모리 세그먼트
- performance스키마
- ec2
- mysql 엔진
- innodb구조
- innodb 버퍼풀
- 컴퓨터 아키텍쳐
- s3
- 어뎁티브 해시 인덱스
- Terraform
- mysql 구조
- 도커
- dff
- InnoDB
- mysql 아키텍쳐
- 리눅스
- 운용 시 유용한 쿼리
- MySQL
- 온라인 ddl
- vm머신
- nandtotetris
- 밑바닥부터 만드는 컴퓨팅 시스템
- 핵기계어
- 폰 노이만 구조
- 밑바닥부터 만드는 운영체제
- Today
- Total
목록전체 글 (86)
이것이 점프 투 공작소

가상 머신 패러다임프로그램들은 컴퓨터에서 실행되려면 기계어로 번역되어야 합니다.많은 고수준 언어들이 생겨남에따라, 동일하게 컴파일러들도 생겨났고 이러한 컴파일러들은 원본언어에 종속적이게 되었습니다. 현대에는 이 종속성을 분리하기 위해 전체 컴파일 과정을 두 단계로 나누었습니다.첫 단계는 고수준 언어의 구문을 분석(parse)하여 그 명령들을 중간처리단계로 번역합니다. (컴파일러)두 번째 단계에서는 이 중간 단계를 다시 대상 하드웨어의 기계어로 번역합니다. (VM번역기) 두 단계(컴파일러, vm번역기)를 이어주는 인터페이스를 가상 머신 (virtual machine)이라고 합니다. 고수준 언어가 기계어로 번역되는 과정컴파일러가 고수준 코드를 중간 VM 명령으로 번역vm 변역기가 중간 vm 명령을 기계 ..
해당 장 과제인 어셈블러 구현은고수준 프로그래밍 언어로 구현하기에 포스팅에서 생략합니다!어셈블러모든 컴퓨터에는 명령어가 0과 1의 연속으로 작성되는 이진 기계어와 인간이 이해하기 쉬운 표현을 사용하여 명령어를 표현하는 어셈블리 언어가 있습니다. 두 언어 모두 정확히 동일한 작업을 수행하며 완전히 동등합니다. 하지만 어셈블리로 프로그램을 작성하는 것이 바이너리로 작성하는 것보다 훨씬 쉽고 안전합니다. 이러한 이점을 누리기 위해서는 누군가 심볼릭 프로그램을 컴퓨터에서 그대로 실행할 수 있는 바이너리 코드로 번역해 주어야 합니다. 이 번역 서비스를 어셈블러가 수행합니다. 어셈블리어는 2진 코드와 직접 대응되므로, 어셈블러를 구현하는 일은 그렇게 어렵지 않습니다.다만 어셈블리 프로그램에서 메모리 주소를 기호로 ..

폰 노이만 구조튜링기계는 간단한 추장석 컴퓨터 모델로, 주로 이론 컴퓨터 과학에서 계산의 논리적 기초를 분석하는 데 활용됩니다.반면 폰 노이만 기계는 모든 현태 컴퓨터 플랫폼을 구성하는 실제 모델로서 폰 노이만 구조는 메모리 장치와 통신하고, 입력 장치에서 데이터를 받고, 출력 장치로 데이터를 내보내는 중앙 처리 장치(CPU)를 바탕으로 합니다.컴퓨터가 조작하는 데이터 외에 컴퓨터가 수행할 작업을 지시하는 명령어도 메모리에 저장된다는 개념입니다.메모리메모리는 물리적관점과 논리적관점에서 바라 볼 수 있습니다. 물리적으로는 주소를 지정 할 수 있는 고정된 크기의 레지스터들을 선형적으로 배열한 것 이며, 레지스터들은 각각의 값을 가집니다.논리적으로는 데이터 저장과 명령어 저장이라는 두가지 용도로 사용됩니다.명..

기계어하드웨어(기계)를 제어하는 언어이며, 하드웨어와 소프트웨어 사이 가장 중요한 인터페이스입니다.CPU가 명령을 처리 할 때 사용되는 언어로 2진수로 되어있습니다. 모든 기계어는 기본적인 산술연산과, And, Or, Not같은 논리연산들을 위한 명령어들을 지원합니다.기계어에서 수행되는 많은 작업들은 특정메모리에 접근하여 메모리를 조작하는 것과 관련이 있습니다. 아래 예시는 완전한 기계어(2진수)가 아니라 어셈블리어 입니다.어셈블리어는 어셈블러에 의해 기계어로 변경되어 하드웨어에 전달됩니다. CPU는 메모리에 올라가있는 명령들을 순서대로 실행하지만,특정 명령어로 점프하거나, 반복해야하는 경우도 있습니다.이러한 분기동작을 위한 기능도 존재합니다. (R1, R2는 레지스터를 의미합니다.)핵 기계어책에서 다루..

이전까지 만들었던 칩들은 시간과 무관한 조합(combination)칩입니다.여기서 실습할 칩들은 현재시점의 입력과 이전에 처리되었던 칩들의 결과에도 영향을 받는 순차(sequential)칩 입니다.컴퓨터에서의 시간은 클럭(tick, tock)이라는 2개의 이산신호를 이용해서 구현 할 수 있습니다. 데이터 플립 플롯 (DFF)컴퓨터에서의 시간 클럭(tick, tock)을 사용하는 논리게이트입니다.DFF는 클럭 신호에 맞추어 데이터를 출력하며, 이전에 입력되었던 신호를 출력하는 간단한 동작을 구현합니다.(클럭 신호는 클록 전용 버스를 통해 DDL로 전달됩니다.) 예를들어 DFF의 in에 1이 들어간다면 DFF는 in으로 들어온 데이터 1이 저장되고다음 클럭 때 DFF에서 가지고 있던 데이터 1을 출력합니다...

컴퓨터 내부에서 모든것은 2진코드로 표현되며,레지스터의 wordsize(cpu가 한번에 처리 할 수 있는 단위)에 따라 처리할 수 있는 데이터의 단위가 결정됩니다.cpu아키텍쳐에 따라 wordsize가 32bit라면 4바이트, 64bit라면 8바이트의 단위를 한번에 처리 할 수 있습니다. 예를들어 어떤 컴퓨터가 8bit wordsize를 가졌다면 총 255까지의 숫자를 표현 할 수 있지만, 음수는 표현할 수 없습니다.이번 글에서는 컴퓨팅 시스템에서 제한된 비트 안에서 어떻게 음수를 표현하는지, 그리고 단순한 가산기부터 ALU를 만드는 실습까지 진행해보려 합니다. 컴퓨터에서의 2진수 처리덧셈오른쪽에서 끝 비트인 최하위 비트(least significant bit, LSB)부터 최상위 비트 (most sig..

DB에서 뭔가 Performance나 sys테이블 봐야할거같은데어떻게 쿼리를 쳐서 봐야할지 바로바로 생각나지 않는 경우가 많죠그래서 유용할만한 쿼리들을 포스팅해두려 합니다.(Real MySQL을 보고 공부한 내용을 다룹니다.) 호스트 접속 이력 확인MySQL에 접속했던 host들의 전체 목록을 확인합니다.CURRENT_CONNECTIONS는 현재 연결된 커넥션 수, TOTAL_CONNECTIONS는 연결되었던 총 커넥션 수 입니다.SELECT * FROM performance_schema.hosts MySQL 총 메모리 사용량 확인SELECT * FROM sys.memory_global_total 스레드별 메모리 사용량 확인SELECT thread_id, user, current_allocated FR..

서비스를 운영하다보면 테이블을 변경해야 할 때가 있습니다.호기롭게 DDL문을 실행했지만 변경하는 시간이 오래 걸리게되면 급격하게 불안해지는 저의 모습을 여러번 보았습니다..그래서 스키마 변경 중에도 다른 커넥션에서 데이터를 정상적으로 조회 할 수 있도록 도와주는 온라인 DDL알고리즘과 해당 알고리즘을 적용해 테이블을 변경하는 방법들을 정리해보려 합니다.(Real MySQL 8.0을 보고 공부한 내용을 다룹니다.) 온라인 DDL 알고리즘스키마 변경 중에도 다른 커넥션에서 데이터를 정상적으로 조회 할 수 있도록 도와주는 MySQL의 기능입니다.3가지의 알고리즘이 존재하며, ALTER TABLE 실행하면 MySQL은 INSTANT, INPLACE, COPY 순서대로 가능한 알고리즘을 선택하여 적용시킵니다.IN..

DB에서 쿼리를 작성하면 EXPLAIN 또는 DESC 명령어를 통해 실행계획을 확인합니다.하지만 보다보면 가끔 잘 모르겠는 부분이 있어서..Real MySQL을 보며 공부한 부분을 정리하려합니다. 통계정보와 히스토그램실행계획을 보기 전에 옵티마이저가 어떤식으로 실행계획을 만드는지 간단하게 알아보려고합니다.옵티마이저가 보다 효율적인 실행계획을 만들기 위해 필요한 두가지가 통계정보와 히스토그램입니다.두 정보를 기반으로 어떤 인덱스를 선택할지 JOIN순서를 어떻게 정할지 결정하기 때문입니다. 통계정보는 디스크에 저장되며 테이블이 생성되거나 데이터가 변경될 때 통계정보가 추가 및 변경됩니다.히스토그램은 자동으로 수집되지 않으며, 데이터 분포에 대한 통계정보를 제공합니다. 히스토그램은 아래와 같은 명령어로 생성 ..

웹서비스를 개발하다 보면 실제 운영서버에 반영하기 전에 만들어둔 쿼리에 대한 테스트 및 성능확인이 필요합니다.주로 EXPLAIN 명령어를 통해 쿼리의 성능을 평가했는데, 그냥 인덱스를 잘 타는구나~ 이 정도만 확인했던 기억이 있습니다. 그래서 옵티마이저가 인덱스를 어떻게 확인해서 쿼리에 적용하는지 더 나은 인덱스를 태우려면 어떻게 해야하는지 궁금해서MySQL 옵티마이저에 대해 공부 및 정리해보려고 합니다.(Real MySQL을 보고 공부한 내용을 다룹니다.)쿼리의 실행 절차1. SQL 파싱사용자로 부터 쿼리요청이 들어오면 'SQL 파서 모듈'에서 문장을 적절하게 쪼개어 MySQL서버가 이해할 수 있는 수준으로 분리합니다.(파싱 트리 작업)2. 최적화 및 실행계획 수립 (옵티마이저 일하는 단계)파싱 트리 ..